diff options
author | Mike Buland <mbuland@penny-arcade.com> | 2022-04-20 11:14:47 -0700 |
---|---|---|
committer | Mike Buland <mbuland@penny-arcade.com> | 2022-04-20 11:14:47 -0700 |
commit | d10e6a5ca0905f0ef2836cd98aebfb48e7f1e8a3 (patch) | |
tree | 0235e978cc5ffa94d790a4e26b5cf1e5492cab2b /src/stable | |
parent | 819ff3d27012b4ec4a0a21c150c112a4dd28b14d (diff) | |
download | libbu++-d10e6a5ca0905f0ef2836cd98aebfb48e7f1e8a3.tar.gz libbu++-d10e6a5ca0905f0ef2836cd98aebfb48e7f1e8a3.tar.bz2 libbu++-d10e6a5ca0905f0ef2836cd98aebfb48e7f1e8a3.tar.xz libbu++-d10e6a5ca0905f0ef2836cd98aebfb48e7f1e8a3.zip |
ArchiveBase/Archive renamed. More to come.
Diffstat (limited to 'src/stable')
-rw-r--r-- | src/stable/archival.cpp | 35 | ||||
-rw-r--r-- | src/stable/archival.h | 52 | ||||
-rw-r--r-- | src/stable/archive.cpp | 200 | ||||
-rw-r--r-- | src/stable/archive.h | 159 | ||||
-rw-r--r-- | src/stable/archivebase.cpp | 197 | ||||
-rw-r--r-- | src/stable/archivebase.h | 80 | ||||
-rw-r--r-- | src/stable/archivebinary.cpp | 98 | ||||
-rw-r--r-- | src/stable/archivebinary.h | 120 | ||||
-rw-r--r-- | src/stable/array.h | 6 | ||||
-rw-r--r-- | src/stable/hash.h | 6 | ||||
-rw-r--r-- | src/stable/list.h | 6 | ||||
-rw-r--r-- | src/stable/string.cpp | 4 | ||||
-rw-r--r-- | src/stable/string.h | 6 |
13 files changed, 440 insertions, 529 deletions
diff --git a/src/stable/archival.cpp b/src/stable/archival.cpp deleted file mode 100644 index 227e25d..0000000 --- a/src/stable/archival.cpp +++ /dev/null | |||
@@ -1,35 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2019 Xagasoft, All rights reserved. | ||
3 | * | ||
4 | * This file is part of the libbu++ library and is released under the | ||
5 | * terms of the license contained in the file LICENSE. | ||
6 | */ | ||
7 | |||
8 | #include "bu/archival.h" | ||
9 | |||
10 | Bu::Archival::Archival() | ||
11 | { | ||
12 | } | ||
13 | |||
14 | Bu::Archival::~Archival() | ||
15 | { | ||
16 | } | ||
17 | |||
18 | Bu::ArchiveBase &Bu::operator<<(Bu::ArchiveBase &s, const Bu::Archival &p) | ||
19 | { | ||
20 | const_cast<Bu::Archival &>(p).archive( s ); | ||
21 | return s; | ||
22 | } | ||
23 | |||
24 | Bu::ArchiveBase &Bu::operator<<(Bu::ArchiveBase &s, Bu::Archival &p) | ||
25 | { | ||
26 | p.archive( s ); | ||
27 | return s; | ||
28 | } | ||
29 | |||
30 | Bu::ArchiveBase &Bu::operator>>(Bu::ArchiveBase &s, Bu::Archival &p) | ||
31 | { | ||
32 | p.archive( s ); | ||
33 | return s; | ||
34 | } | ||
35 | |||
diff --git a/src/stable/archival.h b/src/stable/archival.h deleted file mode 100644 index f7122bc..0000000 --- a/src/stable/archival.h +++ /dev/null | |||
@@ -1,52 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2019 Xagasoft, All rights reserved. | ||
3 | * | ||
4 | * This file is part of the libbu++ library and is released under the | ||
5 | * terms of the license contained in the file LICENSE. | ||
6 | */ | ||
7 | |||
8 | #ifndef BU_ARCHIVAL_H | ||
9 | #define BU_ARCHIVAL_H | ||
10 | |||
11 | #include "bu/archivebase.h" | ||
12 | |||
13 | namespace Bu | ||
14 | { | ||
15 | /** | ||
16 | * The base class for any class you want to archive. Simply include this as | ||
17 | * a base class, implement the purely virtual archive function and you've | ||
18 | * got an easily archiveable class. | ||
19 | * | ||
20 | * Archival: "of or pertaining to archives or valuable records; contained | ||
21 | * in or comprising such archives or records." | ||
22 | */ | ||
23 | class Archival | ||
24 | { | ||
25 | public: | ||
26 | /** | ||
27 | * Does nothing, here for completeness. | ||
28 | */ | ||
29 | Archival(); | ||
30 | |||
31 | /** | ||
32 | * Here to ensure the deconstructor is virtual. | ||
33 | */ | ||
34 | virtual ~Archival(); | ||
35 | |||
36 | /** | ||
37 | * This is the main workhorse of the archive system, just override and | ||
38 | * you've got a archiveable class. A reference to the Archive | ||
39 | * used is passed in as your only parameter, query it to discover if | ||
40 | * you are loading or saving. | ||
41 | * @param ar A reference to the Archive object to use. | ||
42 | */ | ||
43 | virtual void archive( class ArchiveBase &ar )=0; | ||
44 | }; | ||
45 | |||
46 | ArchiveBase &operator<<(ArchiveBase &, const class Bu::Archival &); | ||
47 | ArchiveBase &operator<<(ArchiveBase &, class Bu::Archival &); | ||
48 | ArchiveBase &operator>>(ArchiveBase &, class Bu::Archival &); | ||
49 | |||
50 | } | ||
51 | |||
52 | #endif | ||
diff --git a/src/stable/archive.cpp b/src/stable/archive.cpp index 69447fb..df9b1ff 100644 --- a/src/stable/archive.cpp +++ b/src/stable/archive.cpp | |||
@@ -6,15 +6,8 @@ | |||
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include "bu/archive.h" | 8 | #include "bu/archive.h" |
9 | #include "bu/stream.h" | ||
10 | #include "bu/archival.h" | ||
11 | 9 | ||
12 | #include "bu/sio.h" | 10 | Bu::Archive::Archive() |
13 | |||
14 | Bu::Archive::Archive( Stream &rStream, bool bLoading ) : | ||
15 | bLoading( bLoading ), | ||
16 | rStream( rStream ), | ||
17 | nNextID( 1 ) | ||
18 | { | 11 | { |
19 | } | 12 | } |
20 | 13 | ||
@@ -22,78 +15,183 @@ Bu::Archive::~Archive() | |||
22 | { | 15 | { |
23 | } | 16 | } |
24 | 17 | ||
25 | void Bu::Archive::write( const void *pData, size_t nSize ) | 18 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, bool p) |
19 | { | ||
20 | ar.write( &p, sizeof(p) ); | ||
21 | return ar; | ||
22 | } | ||
23 | |||
24 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, char p) | ||
25 | { | ||
26 | ar.write( &p, sizeof(p) ); | ||
27 | return ar; | ||
28 | } | ||
29 | |||
30 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, signed char p) | ||
31 | { | ||
32 | ar.write( &p, sizeof(p) ); | ||
33 | return ar; | ||
34 | } | ||
35 | |||
36 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, unsigned char p) | ||
37 | { | ||
38 | ar.write( &p, sizeof(p) ); | ||
39 | return ar; | ||
40 | } | ||
41 | |||
42 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, signed short p) | ||
43 | { | ||
44 | ar.write( &p, sizeof(p) ); | ||
45 | return ar; | ||
46 | } | ||
47 | |||
48 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, unsigned short p) | ||
26 | { | 49 | { |
27 | if( nSize == 0 || pData == NULL ) | 50 | ar.write( &p, sizeof(p) ); |
28 | return; | 51 | return ar; |
52 | } | ||
29 | 53 | ||
30 | rStream.write( (const char *)pData, nSize ); | 54 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, signed int p) |
55 | { | ||
56 | ar.write( &p, sizeof(p) ); | ||
57 | return ar; | ||
31 | } | 58 | } |
32 | 59 | ||
33 | void Bu::Archive::read( void *pData, size_t nSize ) | 60 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, unsigned int p) |
34 | { | 61 | { |
35 | if( nSize == 0 || pData == NULL ) | 62 | ar.write( &p, sizeof(p) ); |
36 | return; | 63 | return ar; |
64 | } | ||
37 | 65 | ||
38 | if( (size_t)rStream.read( (char *)pData, nSize ) < nSize ) | 66 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, signed long p) |
39 | throw Bu::ExceptionBase("Insufficient data to unarchive object."); | 67 | { |
68 | ar.write( &p, sizeof(p) ); | ||
69 | return ar; | ||
40 | } | 70 | } |
41 | 71 | ||
42 | void Bu::Archive::close() | 72 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, unsigned long p) |
43 | { | 73 | { |
44 | rStream.close(); | 74 | ar.write( &p, sizeof(p) ); |
75 | return ar; | ||
45 | } | 76 | } |
46 | 77 | ||
47 | bool Bu::Archive::isLoading() | 78 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, signed long long p) |
48 | { | 79 | { |
49 | return bLoading; | 80 | ar.write( &p, sizeof(p) ); |
81 | return ar; | ||
50 | } | 82 | } |
51 | 83 | ||
52 | uint32_t Bu::Archive::getID( const void *ptr ) | 84 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, unsigned long long p) |
53 | { | 85 | { |
54 | if( hPtrID.has( (ptrdiff_t)ptr ) ) | 86 | ar.write( &p, sizeof(p) ); |
55 | return hPtrID.get( (ptrdiff_t)ptr ); | 87 | return ar; |
56 | hPtrID.insert( (ptrdiff_t)ptr, nNextID ); | ||
57 | return nNextID++; | ||
58 | } | 88 | } |
59 | 89 | ||
60 | void Bu::Archive::assocPtrID( void **ptr, uint32_t id ) | 90 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, float p) |
61 | { | 91 | { |
62 | if( hPtrID.has( id ) ) | 92 | ar.write( &p, sizeof(p) ); |
63 | { | 93 | return ar; |
64 | *ptr = (void *)hPtrID.get( id ); | 94 | } |
65 | return; | ||
66 | } | ||
67 | 95 | ||
68 | if( !hPtrDest.has( id ) ) | 96 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, double p) |
69 | hPtrDest.insert( id, List<void **>() ); | 97 | { |
70 | 98 | ar.write( &p, sizeof(p) ); | |
71 | hPtrDest[id].getValue().append( ptr ); | 99 | return ar; |
72 | } | 100 | } |
73 | 101 | ||
74 | void Bu::Archive::readID( const void *ptr, uint32_t id ) | 102 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, long double p) |
75 | { | 103 | { |
76 | hPtrID.insert( id, (ptrdiff_t)ptr ); | 104 | ar.write( &p, sizeof(p) ); |
105 | return ar; | ||
106 | } | ||
77 | 107 | ||
78 | if( hPtrDest.has( id ) ) | 108 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, bool &p) |
79 | { | 109 | { |
80 | Bu::List<void **> &l = hPtrDest.get( id ); | 110 | ar.read( &p, sizeof(p) ); |
81 | for( Bu::List<void **>::iterator i = l.begin(); i != l.end(); i++ ) | 111 | return ar; |
82 | { | 112 | } |
83 | *(*i) = (void *)ptr; | ||
84 | } | ||
85 | 113 | ||
86 | hPtrDest.erase( id ); | 114 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, char &p) |
87 | } | 115 | { |
116 | ar.read( &p, sizeof(p) ); | ||
117 | return ar; | ||
118 | } | ||
119 | |||
120 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, signed char &p) | ||
121 | { | ||
122 | ar.read( &p, sizeof(p) ); | ||
123 | return ar; | ||
124 | } | ||
125 | |||
126 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, unsigned char &p) | ||
127 | { | ||
128 | ar.read( &p, sizeof(p) ); | ||
129 | return ar; | ||
130 | } | ||
131 | |||
132 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, signed short &p) | ||
133 | { | ||
134 | ar.read( &p, sizeof(p) ); | ||
135 | return ar; | ||
136 | } | ||
137 | |||
138 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, unsigned short &p) | ||
139 | { | ||
140 | ar.read( &p, sizeof(p) ); | ||
141 | return ar; | ||
142 | } | ||
143 | |||
144 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, signed int &p) | ||
145 | { | ||
146 | ar.read( &p, sizeof(p) ); | ||
147 | return ar; | ||
148 | } | ||
149 | |||
150 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, unsigned int &p) | ||
151 | { | ||
152 | ar.read( &p, sizeof(p) ); | ||
153 | return ar; | ||
154 | } | ||
155 | |||
156 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, signed long &p) | ||
157 | { | ||
158 | ar.read( &p, sizeof(p) ); | ||
159 | return ar; | ||
160 | } | ||
161 | |||
162 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, unsigned long &p) | ||
163 | { | ||
164 | ar.read( &p, sizeof(p) ); | ||
165 | return ar; | ||
166 | } | ||
167 | |||
168 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, signed long long &p) | ||
169 | { | ||
170 | ar.read( &p, sizeof(p) ); | ||
171 | return ar; | ||
172 | } | ||
173 | |||
174 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, unsigned long long &p) | ||
175 | { | ||
176 | ar.read( &p, sizeof(p) ); | ||
177 | return ar; | ||
178 | } | ||
179 | |||
180 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, float &p) | ||
181 | { | ||
182 | ar.read( &p, sizeof(p) ); | ||
183 | return ar; | ||
88 | } | 184 | } |
89 | 185 | ||
90 | void Bu::Archive::setProperty( const Bu::Blob &rKey, const Bu::Variant &rValue ) | 186 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, double &p) |
91 | { | 187 | { |
92 | hProps.insert( rKey, rValue ); | 188 | ar.read( &p, sizeof(p) ); |
189 | return ar; | ||
93 | } | 190 | } |
94 | 191 | ||
95 | Bu::Variant Bu::Archive::getProperty( const Bu::Blob &rKey ) const | 192 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, long double &p) |
96 | { | 193 | { |
97 | return hProps.get( rKey ); | 194 | ar.read( &p, sizeof(p) ); |
195 | return ar; | ||
98 | } | 196 | } |
99 | 197 | ||
diff --git a/src/stable/archive.h b/src/stable/archive.h index b6cc2a9..45d9af6 100644 --- a/src/stable/archive.h +++ b/src/stable/archive.h | |||
@@ -5,123 +5,82 @@ | |||
5 | * terms of the license contained in the file LICENSE. | 5 | * terms of the license contained in the file LICENSE. |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #ifndef BU_ARCHIVE_H | 8 | #ifndef BU_ARCHIVE_BASE_H |
9 | #define BU_ARCHIVE_H | 9 | #define BU_ARCHIVE_BASE_H |
10 | 10 | ||
11 | #include <stdint.h> | 11 | #include <stdint.h> |
12 | #include "bu/archivebase.h" | 12 | #include <unistd.h> |
13 | #include "bu/hash.h" | 13 | |
14 | #include "bu/util.h" | ||
15 | #include "bu/variant.h" | 14 | #include "bu/variant.h" |
16 | #include "bu/blob.h" | 15 | #include "bu/blob.h" |
17 | 16 | ||
18 | namespace Bu | 17 | namespace Bu |
19 | { | 18 | { |
20 | class Archival; | 19 | class Archive |
21 | class Stream; | ||
22 | |||
23 | /** | ||
24 | * Provides a framework for serialization of objects and primitives. The | ||
25 | * archive will handle any basic primitive, a few special types, like char * | ||
26 | * strings, as well as STL classes and anything that inherits from the | ||
27 | * Archival class. Each Archive operates on a Stream, so you can send the | ||
28 | * data using an Archive almost anywhere. | ||
29 | * | ||
30 | * In order to use an Archive to store something to a file, try something | ||
31 | * like: | ||
32 | *@code | ||
33 | * File sOut("output", "wb"); // This is a stream subclass | ||
34 | * Archive ar( sOut, Archive::save ); | ||
35 | * ar << myClass; | ||
36 | @endcode | ||
37 | * In this example myClass is any class that inherits from Archival. When | ||
38 | * the storage operator is called, the Archival::archive() function in the | ||
39 | * myClass object is called with a reference to the Archive. This can be | ||
40 | * handled in one of two ways: | ||
41 | *@code | ||
42 | * void MyClass::archive( Archive &ar ) | ||
43 | * { | ||
44 | * ar && sName && nAge && sJob; | ||
45 | * } | ||
46 | @endcode | ||
47 | * Here we don't worry about weather we're loading or saving by using the | ||
48 | * smart && operator. This allows us to write very consistent, very simple | ||
49 | * archive functions that really do a lot of work. If we wanted to do | ||
50 | * something different in the case of loading or saving we would do: | ||
51 | *@code | ||
52 | * void MyClass::archive( Archive &ar ) | ||
53 | * { | ||
54 | * if( ar.isLoading() ) | ||
55 | * { | ||
56 | * ar >> sName >> nAge >> sJob; | ||
57 | * } else | ||
58 | * { | ||
59 | * ar << sName << nAge << sJob; | ||
60 | * } | ||
61 | * } | ||
62 | @endcode | ||
63 | * Archive currently does not provide facility to make fully portable | ||
64 | * archives. For example, it will not convert between endianness for you, | ||
65 | * nor will it take into account differences between primitive sizes on | ||
66 | * different platforms. This, at the moment, is up to the user to ensure. | ||
67 | * One way of dealing with the latter problem is to make sure and use | ||
68 | * explicit primitive types from the stdint.h header, i.e. int32_t. | ||
69 | */ | ||
70 | class Archive : public ArchiveBase | ||
71 | { | 20 | { |
72 | private: | ||
73 | bool bLoading; | ||
74 | public: | 21 | public: |
75 | bool isLoading(); | 22 | Archive(); |
76 | 23 | virtual ~Archive(); | |
24 | |||
77 | enum | 25 | enum |
78 | { | 26 | { |
79 | load = true, | 27 | load = true, |
80 | save = false | 28 | save = false |
81 | }; | 29 | }; |
82 | 30 | ||
83 | Archive( Stream &rStream, bool bLoading ); | 31 | virtual void close()=0; |
84 | virtual ~Archive(); | 32 | virtual void write( const void *pData, size_t iLength )=0; |
85 | virtual void close(); | 33 | virtual void read( void *pData, size_t iLength )=0; |
86 | 34 | virtual bool isLoading()=0; | |
87 | virtual void write( const void *pData, size_t iSize ); | ||
88 | virtual void read( void *pData, size_t iSize ); | ||
89 | |||
90 | /** | ||
91 | * For storage, get an ID for the pointer to the object you're going to | ||
92 | * write. | ||
93 | */ | ||
94 | uint32_t getID( const void *ptr ); | ||
95 | |||
96 | /** | ||
97 | * For loading. Assosiates an empty pointer with an id. When you wind | ||
98 | * up loading an id reference to a pointer for an object that may or | ||
99 | * may not have loaded yet, call this with the id, if it has been loaded | ||
100 | * already, you'll immediately get a pointer, if not, it will write one | ||
101 | * for you when the time comes. | ||
102 | */ | ||
103 | void assocPtrID( void **ptr, uint32_t id ); | ||
104 | |||
105 | /** | ||
106 | * For loading. Call this when you load an object that other things may | ||
107 | * have pointers to. It will assosiate every pointer that's been | ||
108 | * registered with assocPtrID to the pointer passed in, and id passed | ||
109 | * in. It will also set things up so future calls to assocPtrID will | ||
110 | * automatically succeed immediately. | ||
111 | */ | ||
112 | void readID( const void *ptr, uint32_t id ); | ||
113 | 35 | ||
114 | virtual void setProperty( const Bu::Blob &rKey, | 36 | virtual void setProperty( const Bu::Blob &rKey, |
115 | const Bu::Variant &rValue ); | 37 | const Bu::Variant &rValue )=0; |
116 | virtual Bu::Variant getProperty( const Bu::Blob &rKey ) const; | 38 | virtual Bu::Variant getProperty( const Bu::Blob &rKey ) const=0; |
117 | |||
118 | private: | ||
119 | Stream &rStream; | ||
120 | uint32_t nNextID; | ||
121 | Hash<uint32_t,ptrdiff_t> hPtrID; | ||
122 | Hash<uint32_t,List<void **> > hPtrDest; | ||
123 | Hash<Bu::Blob, Variant> hProps; | ||
124 | }; | 39 | }; |
125 | } | 40 | |
41 | template<typename T> Archive &operator&&( Archive &ar, T &dat ) | ||
42 | { | ||
43 | if( ar.isLoading() ) | ||
44 | { | ||
45 | return ar >> dat; | ||
46 | } | ||
47 | else | ||
48 | { | ||
49 | return ar << dat; | ||
50 | } | ||
51 | } | ||
52 | |||
53 | Archive &operator<<( Archive &ar, bool p ); | ||
54 | Archive &operator<<( Archive &ar, char p ); | ||
55 | Archive &operator<<( Archive &ar, signed char p ); | ||
56 | Archive &operator<<( Archive &ar, unsigned char p ); | ||
57 | Archive &operator<<( Archive &ar, signed short p ); | ||
58 | Archive &operator<<( Archive &ar, unsigned short p ); | ||
59 | Archive &operator<<( Archive &ar, signed int p ); | ||
60 | Archive &operator<<( Archive &ar, unsigned int p ); | ||
61 | Archive &operator<<( Archive &ar, signed long p ); | ||
62 | Archive &operator<<( Archive &ar, unsigned long p ); | ||
63 | Archive &operator<<( Archive &ar, signed long long p ); | ||
64 | Archive &operator<<( Archive &ar, unsigned long long p ); | ||
65 | Archive &operator<<( Archive &ar, float p ); | ||
66 | Archive &operator<<( Archive &ar, double p ); | ||
67 | Archive &operator<<( Archive &ar, long double p ); | ||
68 | |||
69 | Archive &operator>>( Archive &ar, bool &p ); | ||
70 | Archive &operator>>( Archive &ar, char &p ); | ||
71 | Archive &operator>>( Archive &ar, signed char &p ); | ||
72 | Archive &operator>>( Archive &ar, unsigned char &p ); | ||
73 | Archive &operator>>( Archive &ar, signed short &p ); | ||
74 | Archive &operator>>( Archive &ar, unsigned short &p ); | ||
75 | Archive &operator>>( Archive &ar, signed int &p ); | ||
76 | Archive &operator>>( Archive &ar, unsigned int &p ); | ||
77 | Archive &operator>>( Archive &ar, signed long &p ); | ||
78 | Archive &operator>>( Archive &ar, unsigned long &p ); | ||
79 | Archive &operator>>( Archive &ar, signed long long &p ); | ||
80 | Archive &operator>>( Archive &ar, unsigned long long &p ); | ||
81 | Archive &operator>>( Archive &ar, float &p ); | ||
82 | Archive &operator>>( Archive &ar, double &p ); | ||
83 | Archive &operator>>( Archive &ar, long double &p ); | ||
84 | }; | ||
126 | 85 | ||
127 | #endif | 86 | #endif |
diff --git a/src/stable/archivebase.cpp b/src/stable/archivebase.cpp deleted file mode 100644 index d2d80a1..0000000 --- a/src/stable/archivebase.cpp +++ /dev/null | |||
@@ -1,197 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2019 Xagasoft, All rights reserved. | ||
3 | * | ||
4 | * This file is part of the libbu++ library and is released under the | ||
5 | * terms of the license contained in the file LICENSE. | ||
6 | */ | ||
7 | |||
8 | #include "bu/archivebase.h" | ||
9 | |||
10 | Bu::ArchiveBase::ArchiveBase() | ||
11 | { | ||
12 | } | ||
13 | |||
14 | Bu::ArchiveBase::~ArchiveBase() | ||
15 | { | ||
16 | } | ||
17 | |||
18 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, bool p) | ||
19 | { | ||
20 | ar.write( &p, sizeof(p) ); | ||
21 | return ar; | ||
22 | } | ||
23 | |||
24 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, char p) | ||
25 | { | ||
26 | ar.write( &p, sizeof(p) ); | ||
27 | return ar; | ||
28 | } | ||
29 | |||
30 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed char p) | ||
31 | { | ||
32 | ar.write( &p, sizeof(p) ); | ||
33 | return ar; | ||
34 | } | ||
35 | |||
36 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned char p) | ||
37 | { | ||
38 | ar.write( &p, sizeof(p) ); | ||
39 | return ar; | ||
40 | } | ||
41 | |||
42 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed short p) | ||
43 | { | ||
44 | ar.write( &p, sizeof(p) ); | ||
45 | return ar; | ||
46 | } | ||
47 | |||
48 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned short p) | ||
49 | { | ||
50 | ar.write( &p, sizeof(p) ); | ||
51 | return ar; | ||
52 | } | ||
53 | |||
54 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed int p) | ||
55 | { | ||
56 | ar.write( &p, sizeof(p) ); | ||
57 | return ar; | ||
58 | } | ||
59 | |||
60 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned int p) | ||
61 | { | ||
62 | ar.write( &p, sizeof(p) ); | ||
63 | return ar; | ||
64 | } | ||
65 | |||
66 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed long p) | ||
67 | { | ||
68 | ar.write( &p, sizeof(p) ); | ||
69 | return ar; | ||
70 | } | ||
71 | |||
72 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned long p) | ||
73 | { | ||
74 | ar.write( &p, sizeof(p) ); | ||
75 | return ar; | ||
76 | } | ||
77 | |||
78 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed long long p) | ||
79 | { | ||
80 | ar.write( &p, sizeof(p) ); | ||
81 | return ar; | ||
82 | } | ||
83 | |||
84 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned long long p) | ||
85 | { | ||
86 | ar.write( &p, sizeof(p) ); | ||
87 | return ar; | ||
88 | } | ||
89 | |||
90 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, float p) | ||
91 | { | ||
92 | ar.write( &p, sizeof(p) ); | ||
93 | return ar; | ||
94 | } | ||
95 | |||
96 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, double p) | ||
97 | { | ||
98 | ar.write( &p, sizeof(p) ); | ||
99 | return ar; | ||
100 | } | ||
101 | |||
102 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, long double p) | ||
103 | { | ||
104 | ar.write( &p, sizeof(p) ); | ||
105 | return ar; | ||
106 | } | ||
107 | |||
108 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, bool &p) | ||
109 | { | ||
110 | ar.read( &p, sizeof(p) ); | ||
111 | return ar; | ||
112 | } | ||
113 | |||
114 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, char &p) | ||
115 | { | ||
116 | ar.read( &p, sizeof(p) ); | ||
117 | return ar; | ||
118 | } | ||
119 | |||
120 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed char &p) | ||
121 | { | ||
122 | ar.read( &p, sizeof(p) ); | ||
123 | return ar; | ||
124 | } | ||
125 | |||
126 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned char &p) | ||
127 | { | ||
128 | ar.read( &p, sizeof(p) ); | ||
129 | return ar; | ||
130 | } | ||
131 | |||
132 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed short &p) | ||
133 | { | ||
134 | ar.read( &p, sizeof(p) ); | ||
135 | return ar; | ||
136 | } | ||
137 | |||
138 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned short &p) | ||
139 | { | ||
140 | ar.read( &p, sizeof(p) ); | ||
141 | return ar; | ||
142 | } | ||
143 | |||
144 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed int &p) | ||
145 | { | ||
146 | ar.read( &p, sizeof(p) ); | ||
147 | return ar; | ||
148 | } | ||
149 | |||
150 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned int &p) | ||
151 | { | ||
152 | ar.read( &p, sizeof(p) ); | ||
153 | return ar; | ||
154 | } | ||
155 | |||
156 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed long &p) | ||
157 | { | ||
158 | ar.read( &p, sizeof(p) ); | ||
159 | return ar; | ||
160 | } | ||
161 | |||
162 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned long &p) | ||
163 | { | ||
164 | ar.read( &p, sizeof(p) ); | ||
165 | return ar; | ||
166 | } | ||
167 | |||
168 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed long long &p) | ||
169 | { | ||
170 | ar.read( &p, sizeof(p) ); | ||
171 | return ar; | ||
172 | } | ||
173 | |||
174 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned long long &p) | ||
175 | { | ||
176 | ar.read( &p, sizeof(p) ); | ||
177 | return ar; | ||
178 | } | ||
179 | |||
180 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, float &p) | ||
181 | { | ||
182 | ar.read( &p, sizeof(p) ); | ||
183 | return ar; | ||
184 | } | ||
185 | |||
186 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, double &p) | ||
187 | { | ||
188 | ar.read( &p, sizeof(p) ); | ||
189 | return ar; | ||
190 | } | ||
191 | |||
192 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, long double &p) | ||
193 | { | ||
194 | ar.read( &p, sizeof(p) ); | ||
195 | return ar; | ||
196 | } | ||
197 | |||
diff --git a/src/stable/archivebase.h b/src/stable/archivebase.h deleted file mode 100644 index d846c27..0000000 --- a/src/stable/archivebase.h +++ /dev/null | |||
@@ -1,80 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2019 Xagasoft, All rights reserved. | ||
3 | * | ||
4 | * This file is part of the libbu++ library and is released under the | ||
5 | * terms of the license contained in the file LICENSE. | ||
6 | */ | ||
7 | |||
8 | #ifndef BU_ARCHIVE_BASE_H | ||
9 | #define BU_ARCHIVE_BASE_H | ||
10 | |||
11 | #include <stdint.h> | ||
12 | #include <unistd.h> | ||
13 | |||
14 | #include "bu/variant.h" | ||
15 | #include "bu/blob.h" | ||
16 | |||
17 | namespace Bu | ||
18 | { | ||
19 | class ArchiveBase | ||
20 | { | ||
21 | public: | ||
22 | ArchiveBase(); | ||
23 | virtual ~ArchiveBase(); | ||
24 | |||
25 | virtual void close()=0; | ||
26 | virtual void write( const void *pData, size_t iLength )=0; | ||
27 | virtual void read( void *pData, size_t iLength )=0; | ||
28 | virtual bool isLoading()=0; | ||
29 | |||
30 | virtual void setProperty( const Bu::Blob &rKey, | ||
31 | const Bu::Variant &rValue )=0; | ||
32 | virtual Bu::Variant getProperty( const Bu::Blob &rKey ) const=0; | ||
33 | }; | ||
34 | |||
35 | template<typename T> ArchiveBase &operator&&( ArchiveBase &ar, T &dat ) | ||
36 | { | ||
37 | if( ar.isLoading() ) | ||
38 | { | ||
39 | return ar >> dat; | ||
40 | } | ||
41 | else | ||
42 | { | ||
43 | return ar << dat; | ||
44 | } | ||
45 | } | ||
46 | |||
47 | ArchiveBase &operator<<( ArchiveBase &ar, bool p ); | ||
48 | ArchiveBase &operator<<( ArchiveBase &ar, char p ); | ||
49 | ArchiveBase &operator<<( ArchiveBase &ar, signed char p ); | ||
50 | ArchiveBase &operator<<( ArchiveBase &ar, unsigned char p ); | ||
51 | ArchiveBase &operator<<( ArchiveBase &ar, signed short p ); | ||
52 | ArchiveBase &operator<<( ArchiveBase &ar, unsigned short p ); | ||
53 | ArchiveBase &operator<<( ArchiveBase &ar, signed int p ); | ||
54 | ArchiveBase &operator<<( ArchiveBase &ar, unsigned int p ); | ||
55 | ArchiveBase &operator<<( ArchiveBase &ar, signed long p ); | ||
56 | ArchiveBase &operator<<( ArchiveBase &ar, unsigned long p ); | ||
57 | ArchiveBase &operator<<( ArchiveBase &ar, signed long long p ); | ||
58 | ArchiveBase &operator<<( ArchiveBase &ar, unsigned long long p ); | ||
59 | ArchiveBase &operator<<( ArchiveBase &ar, float p ); | ||
60 | ArchiveBase &operator<<( ArchiveBase &ar, double p ); | ||
61 | ArchiveBase &operator<<( ArchiveBase &ar, long double p ); | ||
62 | |||
63 | ArchiveBase &operator>>( ArchiveBase &ar, bool &p ); | ||
64 | ArchiveBase &operator>>( ArchiveBase &ar, char &p ); | ||
65 | ArchiveBase &operator>>( ArchiveBase &ar, signed char &p ); | ||
66 | ArchiveBase &operator>>( ArchiveBase &ar, unsigned char &p ); | ||
67 | ArchiveBase &operator>>( ArchiveBase &ar, signed short &p ); | ||
68 | ArchiveBase &operator>>( ArchiveBase &ar, unsigned short &p ); | ||
69 | ArchiveBase &operator>>( ArchiveBase &ar, signed int &p ); | ||
70 | ArchiveBase &operator>>( ArchiveBase &ar, unsigned int &p ); | ||
71 | ArchiveBase &operator>>( ArchiveBase &ar, signed long &p ); | ||
72 | ArchiveBase &operator>>( ArchiveBase &ar, unsigned long &p ); | ||
73 | ArchiveBase &operator>>( ArchiveBase &ar, signed long long &p ); | ||
74 | ArchiveBase &operator>>( ArchiveBase &ar, unsigned long long &p ); | ||
75 | ArchiveBase &operator>>( ArchiveBase &ar, float &p ); | ||
76 | ArchiveBase &operator>>( ArchiveBase &ar, double &p ); | ||
77 | ArchiveBase &operator>>( ArchiveBase &ar, long double &p ); | ||
78 | }; | ||
79 | |||
80 | #endif | ||
diff --git a/src/stable/archivebinary.cpp b/src/stable/archivebinary.cpp new file mode 100644 index 0000000..3f05947 --- /dev/null +++ b/src/stable/archivebinary.cpp | |||
@@ -0,0 +1,98 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2019 Xagasoft, All rights reserved. | ||
3 | * | ||
4 | * This file is part of the libbu++ library and is released under the | ||
5 | * terms of the license contained in the file LICENSE. | ||
6 | */ | ||
7 | |||
8 | #include "bu/archivebinary.h" | ||
9 | #include "bu/stream.h" | ||
10 | |||
11 | #include "bu/sio.h" | ||
12 | |||
13 | Bu::ArchiveBinary::ArchiveBinary( Stream &rStream, bool bLoading ) : | ||
14 | bLoading( bLoading ), | ||
15 | rStream( rStream ), | ||
16 | nNextID( 1 ) | ||
17 | { | ||
18 | } | ||
19 | |||
20 | Bu::ArchiveBinary::~ArchiveBinary() | ||
21 | { | ||
22 | } | ||
23 | |||
24 | void Bu::ArchiveBinary::write( const void *pData, size_t nSize ) | ||
25 | { | ||
26 | if( nSize == 0 || pData == NULL ) | ||
27 | return; | ||
28 | |||
29 | rStream.write( (const char *)pData, nSize ); | ||
30 | } | ||
31 | |||
32 | void Bu::ArchiveBinary::read( void *pData, size_t nSize ) | ||
33 | { | ||
34 | if( nSize == 0 || pData == NULL ) | ||
35 | return; | ||
36 | |||
37 | if( (size_t)rStream.read( (char *)pData, nSize ) < nSize ) | ||
38 | throw Bu::ExceptionBase("Insufficient data to unarchive object."); | ||
39 | } | ||
40 | |||
41 | void Bu::ArchiveBinary::close() | ||
42 | { | ||
43 | rStream.close(); | ||
44 | } | ||
45 | |||
46 | bool Bu::ArchiveBinary::isLoading() | ||
47 | { | ||
48 | return bLoading; | ||
49 | } | ||
50 | |||
51 | uint32_t Bu::ArchiveBinary::getID( const void *ptr ) | ||
52 | { | ||
53 | if( hPtrID.has( (ptrdiff_t)ptr ) ) | ||
54 | return hPtrID.get( (ptrdiff_t)ptr ); | ||
55 | hPtrID.insert( (ptrdiff_t)ptr, nNextID ); | ||
56 | return nNextID++; | ||
57 | } | ||
58 | |||
59 | void Bu::ArchiveBinary::assocPtrID( void **ptr, uint32_t id ) | ||
60 | { | ||
61 | if( hPtrID.has( id ) ) | ||
62 | { | ||
63 | *ptr = (void *)hPtrID.get( id ); | ||
64 | return; | ||
65 | } | ||
66 | |||
67 | if( !hPtrDest.has( id ) ) | ||
68 | hPtrDest.insert( id, List<void **>() ); | ||
69 | |||
70 | hPtrDest[id].getValue().append( ptr ); | ||
71 | } | ||
72 | |||
73 | void Bu::ArchiveBinary::readID( const void *ptr, uint32_t id ) | ||
74 | { | ||
75 | hPtrID.insert( id, (ptrdiff_t)ptr ); | ||
76 | |||
77 | if( hPtrDest.has( id ) ) | ||
78 | { | ||
79 | Bu::List<void **> &l = hPtrDest.get( id ); | ||
80 | for( Bu::List<void **>::iterator i = l.begin(); i != l.end(); i++ ) | ||
81 | { | ||
82 | *(*i) = (void *)ptr; | ||
83 | } | ||
84 | |||
85 | hPtrDest.erase( id ); | ||
86 | } | ||
87 | } | ||
88 | |||
89 | void Bu::ArchiveBinary::setProperty( const Bu::Blob &rKey, const Bu::Variant &rValue ) | ||
90 | { | ||
91 | hProps.insert( rKey, rValue ); | ||
92 | } | ||
93 | |||
94 | Bu::Variant Bu::ArchiveBinary::getProperty( const Bu::Blob &rKey ) const | ||
95 | { | ||
96 | return hProps.get( rKey ); | ||
97 | } | ||
98 | |||
diff --git a/src/stable/archivebinary.h b/src/stable/archivebinary.h new file mode 100644 index 0000000..4c12e02 --- /dev/null +++ b/src/stable/archivebinary.h | |||
@@ -0,0 +1,120 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2019 Xagasoft, All rights reserved. | ||
3 | * | ||
4 | * This file is part of the libbu++ library and is released under the | ||
5 | * terms of the license contained in the file LICENSE. | ||
6 | */ | ||
7 | |||
8 | #ifndef BU_ARCHIVE_BINARY_H | ||
9 | #define BU_ARCHIVE_BINARY_H | ||
10 | |||
11 | #include <stdint.h> | ||
12 | #include "bu/archive.h" | ||
13 | #include "bu/hash.h" | ||
14 | #include "bu/util.h" | ||
15 | #include "bu/variant.h" | ||
16 | #include "bu/blob.h" | ||
17 | |||
18 | namespace Bu | ||
19 | { | ||
20 | class Stream; | ||
21 | |||
22 | /** | ||
23 | * Provides a framework for serialization of objects and primitives. The | ||
24 | * archive will handle any basic primitive, a few special types, like char * | ||
25 | * strings, as well as STL classes and anything that inherits from the | ||
26 | * Archival class. Each ArchiveBinary operates on a Stream, so you can send the | ||
27 | * data using an ArchiveBinary almost anywhere. | ||
28 | * | ||
29 | * In order to use an ArchiveBinary to store something to a file, try something | ||
30 | * like: | ||
31 | *@code | ||
32 | * File sOut("output", "wb"); // This is a stream subclass | ||
33 | * ArchiveBinary ar( sOut, ArchiveBinary::save ); | ||
34 | * ar << myClass; | ||
35 | @endcode | ||
36 | * In this example myClass is any class that inherits from Archival. When | ||
37 | * the storage operator is called, the Archival::archive() function in the | ||
38 | * myClass object is called with a reference to the ArchiveBinary. This can be | ||
39 | * handled in one of two ways: | ||
40 | *@code | ||
41 | * void MyClass::archive( ArchiveBinary &ar ) | ||
42 | * { | ||
43 | * ar && sName && nAge && sJob; | ||
44 | * } | ||
45 | @endcode | ||
46 | * Here we don't worry about weather we're loading or saving by using the | ||
47 | * smart && operator. This allows us to write very consistent, very simple | ||
48 | * archive functions that really do a lot of work. If we wanted to do | ||
49 | * something different in the case of loading or saving we would do: | ||
50 | *@code | ||
51 | * void MyClass::archive( ArchiveBinary &ar ) | ||
52 | * { | ||
53 | * if( ar.isLoading() ) | ||
54 | * { | ||
55 | * ar >> sName >> nAge >> sJob; | ||
56 | * } else | ||
57 | * { | ||
58 | * ar << sName << nAge << sJob; | ||
59 | * } | ||
60 | * } | ||
61 | @endcode | ||
62 | * ArchiveBinary currently does not provide facility to make fully portable | ||
63 | * archives. For example, it will not convert between endianness for you, | ||
64 | * nor will it take into account differences between primitive sizes on | ||
65 | * different platforms. This, at the moment, is up to the user to ensure. | ||
66 | * One way of dealing with the latter problem is to make sure and use | ||
67 | * explicit primitive types from the stdint.h header, i.e. int32_t. | ||
68 | */ | ||
69 | class ArchiveBinary : public Archive | ||
70 | { | ||
71 | private: | ||
72 | bool bLoading; | ||
73 | public: | ||
74 | bool isLoading(); | ||
75 | |||
76 | ArchiveBinary( Stream &rStream, bool bLoading ); | ||
77 | virtual ~ArchiveBinary(); | ||
78 | virtual void close(); | ||
79 | |||
80 | virtual void write( const void *pData, size_t iSize ); | ||
81 | virtual void read( void *pData, size_t iSize ); | ||
82 | |||
83 | /** | ||
84 | * For storage, get an ID for the pointer to the object you're going to | ||
85 | * write. | ||
86 | */ | ||
87 | uint32_t getID( const void *ptr ); | ||
88 | |||
89 | /** | ||
90 | * For loading. Assosiates an empty pointer with an id. When you wind | ||
91 | * up loading an id reference to a pointer for an object that may or | ||
92 | * may not have loaded yet, call this with the id, if it has been loaded | ||
93 | * already, you'll immediately get a pointer, if not, it will write one | ||
94 | * for you when the time comes. | ||
95 | */ | ||
96 | void assocPtrID( void **ptr, uint32_t id ); | ||
97 | |||
98 | /** | ||
99 | * For loading. Call this when you load an object that other things may | ||
100 | * have pointers to. It will assosiate every pointer that's been | ||
101 | * registered with assocPtrID to the pointer passed in, and id passed | ||
102 | * in. It will also set things up so future calls to assocPtrID will | ||
103 | * automatically succeed immediately. | ||
104 | */ | ||
105 | void readID( const void *ptr, uint32_t id ); | ||
106 | |||
107 | virtual void setProperty( const Bu::Blob &rKey, | ||
108 | const Bu::Variant &rValue ); | ||
109 | virtual Bu::Variant getProperty( const Bu::Blob &rKey ) const; | ||
110 | |||
111 | private: | ||
112 | Stream &rStream; | ||
113 | uint32_t nNextID; | ||
114 | Hash<uint32_t,ptrdiff_t> hPtrID; | ||
115 | Hash<uint32_t,List<void **> > hPtrDest; | ||
116 | Hash<Bu::Blob, Variant> hProps; | ||
117 | }; | ||
118 | } | ||
119 | |||
120 | #endif | ||
diff --git a/src/stable/array.h b/src/stable/array.h index ca66213..6069832 100644 --- a/src/stable/array.h +++ b/src/stable/array.h | |||
@@ -10,7 +10,7 @@ | |||
10 | 10 | ||
11 | #include <memory> | 11 | #include <memory> |
12 | #include "bu/exceptionbase.h" | 12 | #include "bu/exceptionbase.h" |
13 | #include "bu/archivebase.h" | 13 | #include "bu/archive.h" |
14 | #include "bu/sharedcore.h" | 14 | #include "bu/sharedcore.h" |
15 | 15 | ||
16 | namespace Bu | 16 | namespace Bu |
@@ -761,7 +761,7 @@ namespace Bu | |||
761 | } | 761 | } |
762 | 762 | ||
763 | template<typename value, int inc, typename valuealloc> | 763 | template<typename value, int inc, typename valuealloc> |
764 | ArchiveBase &operator<<( ArchiveBase &ar, | 764 | Archive &operator<<( Archive &ar, |
765 | const Array<value, inc, valuealloc> &h ) | 765 | const Array<value, inc, valuealloc> &h ) |
766 | { | 766 | { |
767 | ar << h.getSize(); | 767 | ar << h.getSize(); |
@@ -775,7 +775,7 @@ namespace Bu | |||
775 | } | 775 | } |
776 | 776 | ||
777 | template<typename value, int inc, typename valuealloc> | 777 | template<typename value, int inc, typename valuealloc> |
778 | ArchiveBase &operator>>(ArchiveBase &ar, Array<value, inc, valuealloc> &h ) | 778 | Archive &operator>>(Archive &ar, Array<value, inc, valuealloc> &h ) |
779 | { | 779 | { |
780 | h.clear(); | 780 | h.clear(); |
781 | long nSize; | 781 | long nSize; |
diff --git a/src/stable/hash.h b/src/stable/hash.h index 0c5bd9e..e515088 100644 --- a/src/stable/hash.h +++ b/src/stable/hash.h | |||
@@ -12,7 +12,7 @@ | |||
12 | #include "bu/exceptionbase.h" | 12 | #include "bu/exceptionbase.h" |
13 | #include "bu/list.h" | 13 | #include "bu/list.h" |
14 | #include "bu/util.h" | 14 | #include "bu/util.h" |
15 | #include "bu/archivebase.h" | 15 | #include "bu/archive.h" |
16 | #include "bu/sharedcore.h" | 16 | #include "bu/sharedcore.h" |
17 | 17 | ||
18 | namespace Bu | 18 | namespace Bu |
@@ -1319,7 +1319,7 @@ namespace Bu | |||
1319 | 1319 | ||
1320 | template<typename key, typename value, typename a, typename b, | 1320 | template<typename key, typename value, typename a, typename b, |
1321 | typename c, typename d> | 1321 | typename c, typename d> |
1322 | ArchiveBase &operator<<( ArchiveBase &ar, const Hash<key,value,a,b,c,d> &h ) | 1322 | Archive &operator<<( Archive &ar, const Hash<key,value,a,b,c,d> &h ) |
1323 | { | 1323 | { |
1324 | long iSize = h.getSize(); | 1324 | long iSize = h.getSize(); |
1325 | ar << iSize; | 1325 | ar << iSize; |
@@ -1334,7 +1334,7 @@ namespace Bu | |||
1334 | 1334 | ||
1335 | template<typename key, typename value, typename a, typename b, | 1335 | template<typename key, typename value, typename a, typename b, |
1336 | typename c, typename d> | 1336 | typename c, typename d> |
1337 | ArchiveBase &operator>>( ArchiveBase &ar, Hash<key,value,a,b,c,d> &h ) | 1337 | Archive &operator>>( Archive &ar, Hash<key,value,a,b,c,d> &h ) |
1338 | { | 1338 | { |
1339 | h.clear(); | 1339 | h.clear(); |
1340 | long nSize; | 1340 | long nSize; |
diff --git a/src/stable/list.h b/src/stable/list.h index c1a5559..5ef7ce0 100644 --- a/src/stable/list.h +++ b/src/stable/list.h | |||
@@ -11,7 +11,7 @@ | |||
11 | #include <memory> | 11 | #include <memory> |
12 | #include "bu/exceptionbase.h" | 12 | #include "bu/exceptionbase.h" |
13 | #include "bu/sharedcore.h" | 13 | #include "bu/sharedcore.h" |
14 | #include "bu/archivebase.h" | 14 | #include "bu/archive.h" |
15 | #include "bu/heap.h" | 15 | #include "bu/heap.h" |
16 | 16 | ||
17 | namespace Bu | 17 | namespace Bu |
@@ -1042,7 +1042,7 @@ namespace Bu | |||
1042 | } | 1042 | } |
1043 | 1043 | ||
1044 | template<typename value, typename a, typename b> | 1044 | template<typename value, typename a, typename b> |
1045 | ArchiveBase &operator<<( ArchiveBase &ar, const List<value,a,b> &h ) | 1045 | Archive &operator<<( Archive &ar, const List<value,a,b> &h ) |
1046 | { | 1046 | { |
1047 | ar << h.getSize(); | 1047 | ar << h.getSize(); |
1048 | for( typename List<value>::const_iterator i = h.begin(); i != h.end(); i++ ) | 1048 | for( typename List<value>::const_iterator i = h.begin(); i != h.end(); i++ ) |
@@ -1054,7 +1054,7 @@ namespace Bu | |||
1054 | } | 1054 | } |
1055 | 1055 | ||
1056 | template<typename value, typename a, typename b> | 1056 | template<typename value, typename a, typename b> |
1057 | ArchiveBase &operator>>( ArchiveBase &ar, List<value,a,b> &h ) | 1057 | Archive &operator>>( Archive &ar, List<value,a,b> &h ) |
1058 | { | 1058 | { |
1059 | h.clear(); | 1059 | h.clear(); |
1060 | long nSize; | 1060 | long nSize; |
diff --git a/src/stable/string.cpp b/src/stable/string.cpp index ed4e58b..c36b768 100644 --- a/src/stable/string.cpp +++ b/src/stable/string.cpp | |||
@@ -1520,7 +1520,7 @@ Bu::String &Bu::operator<<( Bu::String &dst, const Bu::String &sIn ) | |||
1520 | return dst; | 1520 | return dst; |
1521 | } | 1521 | } |
1522 | 1522 | ||
1523 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, const Bu::String &s ) | 1523 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, const Bu::String &s ) |
1524 | { | 1524 | { |
1525 | long n = s.getSize(); | 1525 | long n = s.getSize(); |
1526 | ar << n; | 1526 | ar << n; |
@@ -1528,7 +1528,7 @@ Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, const Bu::String &s ) | |||
1528 | return ar; | 1528 | return ar; |
1529 | } | 1529 | } |
1530 | 1530 | ||
1531 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, Bu::String &s ) | 1531 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, Bu::String &s ) |
1532 | { | 1532 | { |
1533 | long n; | 1533 | long n; |
1534 | ar >> n; | 1534 | ar >> n; |
diff --git a/src/stable/string.h b/src/stable/string.h index c469580..b4768bb 100644 --- a/src/stable/string.h +++ b/src/stable/string.h | |||
@@ -14,7 +14,7 @@ | |||
14 | #include "bu/util.h" | 14 | #include "bu/util.h" |
15 | #include "bu/sharedcore.h" | 15 | #include "bu/sharedcore.h" |
16 | #include "bu/exceptionbase.h" | 16 | #include "bu/exceptionbase.h" |
17 | #include "bu/archivebase.h" | 17 | #include "bu/archive.h" |
18 | #include "bu/list.h" | 18 | #include "bu/list.h" |
19 | #include "bu/fmt.h" | 19 | #include "bu/fmt.h" |
20 | #include "bu/variant.h" | 20 | #include "bu/variant.h" |
@@ -1051,8 +1051,8 @@ namespace Bu | |||
1051 | return ret; | 1051 | return ret; |
1052 | } | 1052 | } |
1053 | 1053 | ||
1054 | ArchiveBase &operator<<( ArchiveBase &ar, const String &s ); | 1054 | Archive &operator<<( Archive &ar, const String &s ); |
1055 | ArchiveBase &operator>>( ArchiveBase &ar, String &s ); | 1055 | Archive &operator>>( Archive &ar, String &s ); |
1056 | 1056 | ||
1057 | template<typename T> | 1057 | template<typename T> |
1058 | uint32_t __calcHashCode( const T &k ); | 1058 | uint32_t __calcHashCode( const T &k ); |