ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/Represent/Binary.hpp
Revision: 422
Committed: 2005-03-09T19:08:17-08:00 (20 years, 3 months ago) by douglas
File size: 1074 byte(s)
Log Message:
Gah! Menes is going crazy right now!

File Contents

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

Properties

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