ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/Represent/Binary.hpp
Revision: 370
Committed: 2004-12-21T22:04:06-08:00 (20 years, 6 months ago) by douglas
File size: 1006 byte(s)
Log Message:
Menes!

File Contents

# User Rev Content
1 douglas 362 // Represent
2     //
3     // Douglas Thrift
4     //
5     // $Id$
6    
7 douglas 370 #ifndef _Binary_hpp_
8     #define _Binary_hpp_
9 douglas 362
10 douglas 370 #include "Represent.hpp"
11 douglas 362
12 douglas 370 #ifdef MENES_PRAGMA_ONCE
13     #pragma once
14     #endif
15    
16 douglas 362 class Binary
17     {
18     private:
19 douglas 370 ext::Vector<byte_t> bytes;
20 douglas 362 public:
21 douglas 370 Binary() : bytes(size_t(1), 0) {}
22     Binary(const ext::String& string, bool signed_);
23     template <typename Type> Binary(const Type& type);
24     template <typename Type> Type convert(bool signed_);
25     operator ext::String() const;
26 douglas 362 };
27    
28     template <typename Type>
29     Binary::Binary(const Type& type) : bytes(sizeof (type))
30     {
31 douglas 370 byte_t* type_(reinterpret_cast<byte_t*>(const_cast<Type*>(&type)));
32 douglas 362
33 douglas 370 _mforeach (ext::Vector<byte_t>, byte, bytes) *byte = *type_++;
34 douglas 362 }
35    
36 douglas 365 template <typename Type>
37     Type Binary::convert(bool signed_)
38     {
39     Type type;
40    
41 douglas 370 if (sizeof (type) != bytes.GetSize()) bytes.SetSize(sizeof (type), signed_ && bytes.Last() >> 7 ? ~0 : 0);
42 douglas 365
43 douglas 370 byte_t* type_(reinterpret_cast<byte_t*>(&type));
44 douglas 365
45 douglas 370 _foreach (ext::Vector<byte_t>, byte, bytes) *type_++ = *byte;
46 douglas 365
47     return type;
48     }
49    
50 douglas 370 #endif // _Binary_hpp_

Properties

Name Value
svn:eol-style native
svn:keywords Id