aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <mbuland@penny-arcade.com>2022-04-20 11:14:47 -0700
committerMike Buland <mbuland@penny-arcade.com>2022-04-20 11:14:47 -0700
commitd10e6a5ca0905f0ef2836cd98aebfb48e7f1e8a3 (patch)
tree0235e978cc5ffa94d790a4e26b5cf1e5492cab2b
parent819ff3d27012b4ec4a0a21c150c112a4dd28b14d (diff)
downloadlibbu++-d10e6a5ca0905f0ef2836cd98aebfb48e7f1e8a3.tar.gz
libbu++-d10e6a5ca0905f0ef2836cd98aebfb48e7f1e8a3.tar.bz2
libbu++-d10e6a5ca0905f0ef2836cd98aebfb48e7f1e8a3.tar.xz
libbu++-d10e6a5ca0905f0ef2836cd98aebfb48e7f1e8a3.zip
ArchiveBase/Archive renamed. More to come.
-rw-r--r--src/stable/archival.cpp35
-rw-r--r--src/stable/archival.h52
-rw-r--r--src/stable/archive.cpp200
-rw-r--r--src/stable/archive.h159
-rw-r--r--src/stable/archivebase.cpp197
-rw-r--r--src/stable/archivebase.h80
-rw-r--r--src/stable/archivebinary.cpp98
-rw-r--r--src/stable/archivebinary.h120
-rw-r--r--src/stable/array.h6
-rw-r--r--src/stable/hash.h6
-rw-r--r--src/stable/list.h6
-rw-r--r--src/stable/string.cpp4
-rw-r--r--src/stable/string.h6
-rw-r--r--src/tests/cache.cpp28
-rw-r--r--src/tests/cachedel.cpp28
-rw-r--r--src/unit/archive.unit20
-rw-r--r--src/unit/myriad.unit16
-rw-r--r--src/unstable/archivestream.cpp2
-rw-r--r--src/unstable/archivestream.h6
-rw-r--r--src/unstable/cachebase.h6
-rw-r--r--src/unstable/myriadcache.h4
-rw-r--r--src/unstable/uuid.cpp4
-rw-r--r--src/unstable/uuid.h8
23 files changed, 501 insertions, 590 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
10Bu::Archival::Archival()
11{
12}
13
14Bu::Archival::~Archival()
15{
16}
17
18Bu::ArchiveBase &Bu::operator<<(Bu::ArchiveBase &s, const Bu::Archival &p)
19{
20 const_cast<Bu::Archival &>(p).archive( s );
21 return s;
22}
23
24Bu::ArchiveBase &Bu::operator<<(Bu::ArchiveBase &s, Bu::Archival &p)
25{
26 p.archive( s );
27 return s;
28}
29
30Bu::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
13namespace 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" 10Bu::Archive::Archive()
13
14Bu::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
25void Bu::Archive::write( const void *pData, size_t nSize ) 18Bu::Archive &Bu::operator<<( Bu::Archive &ar, bool p)
19{
20 ar.write( &p, sizeof(p) );
21 return ar;
22}
23
24Bu::Archive &Bu::operator<<( Bu::Archive &ar, char p)
25{
26 ar.write( &p, sizeof(p) );
27 return ar;
28}
29
30Bu::Archive &Bu::operator<<( Bu::Archive &ar, signed char p)
31{
32 ar.write( &p, sizeof(p) );
33 return ar;
34}
35
36Bu::Archive &Bu::operator<<( Bu::Archive &ar, unsigned char p)
37{
38 ar.write( &p, sizeof(p) );
39 return ar;
40}
41
42Bu::Archive &Bu::operator<<( Bu::Archive &ar, signed short p)
43{
44 ar.write( &p, sizeof(p) );
45 return ar;
46}
47
48Bu::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 ); 54Bu::Archive &Bu::operator<<( Bu::Archive &ar, signed int p)
55{
56 ar.write( &p, sizeof(p) );
57 return ar;
31} 58}
32 59
33void Bu::Archive::read( void *pData, size_t nSize ) 60Bu::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 ) 66Bu::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
42void Bu::Archive::close() 72Bu::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
47bool Bu::Archive::isLoading() 78Bu::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
52uint32_t Bu::Archive::getID( const void *ptr ) 84Bu::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
60void Bu::Archive::assocPtrID( void **ptr, uint32_t id ) 90Bu::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 ) ) 96Bu::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
74void Bu::Archive::readID( const void *ptr, uint32_t id ) 102Bu::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 ) ) 108Bu::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 ); 114Bu::Archive &Bu::operator>>( Bu::Archive &ar, char &p)
87 } 115{
116 ar.read( &p, sizeof(p) );
117 return ar;
118}
119
120Bu::Archive &Bu::operator>>( Bu::Archive &ar, signed char &p)
121{
122 ar.read( &p, sizeof(p) );
123 return ar;
124}
125
126Bu::Archive &Bu::operator>>( Bu::Archive &ar, unsigned char &p)
127{
128 ar.read( &p, sizeof(p) );
129 return ar;
130}
131
132Bu::Archive &Bu::operator>>( Bu::Archive &ar, signed short &p)
133{
134 ar.read( &p, sizeof(p) );
135 return ar;
136}
137
138Bu::Archive &Bu::operator>>( Bu::Archive &ar, unsigned short &p)
139{
140 ar.read( &p, sizeof(p) );
141 return ar;
142}
143
144Bu::Archive &Bu::operator>>( Bu::Archive &ar, signed int &p)
145{
146 ar.read( &p, sizeof(p) );
147 return ar;
148}
149
150Bu::Archive &Bu::operator>>( Bu::Archive &ar, unsigned int &p)
151{
152 ar.read( &p, sizeof(p) );
153 return ar;
154}
155
156Bu::Archive &Bu::operator>>( Bu::Archive &ar, signed long &p)
157{
158 ar.read( &p, sizeof(p) );
159 return ar;
160}
161
162Bu::Archive &Bu::operator>>( Bu::Archive &ar, unsigned long &p)
163{
164 ar.read( &p, sizeof(p) );
165 return ar;
166}
167
168Bu::Archive &Bu::operator>>( Bu::Archive &ar, signed long long &p)
169{
170 ar.read( &p, sizeof(p) );
171 return ar;
172}
173
174Bu::Archive &Bu::operator>>( Bu::Archive &ar, unsigned long long &p)
175{
176 ar.read( &p, sizeof(p) );
177 return ar;
178}
179
180Bu::Archive &Bu::operator>>( Bu::Archive &ar, float &p)
181{
182 ar.read( &p, sizeof(p) );
183 return ar;
88} 184}
89 185
90void Bu::Archive::setProperty( const Bu::Blob &rKey, const Bu::Variant &rValue ) 186Bu::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
95Bu::Variant Bu::Archive::getProperty( const Bu::Blob &rKey ) const 192Bu::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
18namespace Bu 17namespace 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
10Bu::ArchiveBase::ArchiveBase()
11{
12}
13
14Bu::ArchiveBase::~ArchiveBase()
15{
16}
17
18Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, bool p)
19{
20 ar.write( &p, sizeof(p) );
21 return ar;
22}
23
24Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, char p)
25{
26 ar.write( &p, sizeof(p) );
27 return ar;
28}
29
30Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed char p)
31{
32 ar.write( &p, sizeof(p) );
33 return ar;
34}
35
36Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned char p)
37{
38 ar.write( &p, sizeof(p) );
39 return ar;
40}
41
42Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed short p)
43{
44 ar.write( &p, sizeof(p) );
45 return ar;
46}
47
48Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned short p)
49{
50 ar.write( &p, sizeof(p) );
51 return ar;
52}
53
54Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed int p)
55{
56 ar.write( &p, sizeof(p) );
57 return ar;
58}
59
60Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned int p)
61{
62 ar.write( &p, sizeof(p) );
63 return ar;
64}
65
66Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed long p)
67{
68 ar.write( &p, sizeof(p) );
69 return ar;
70}
71
72Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned long p)
73{
74 ar.write( &p, sizeof(p) );
75 return ar;
76}
77
78Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed long long p)
79{
80 ar.write( &p, sizeof(p) );
81 return ar;
82}
83
84Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned long long p)
85{
86 ar.write( &p, sizeof(p) );
87 return ar;
88}
89
90Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, float p)
91{
92 ar.write( &p, sizeof(p) );
93 return ar;
94}
95
96Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, double p)
97{
98 ar.write( &p, sizeof(p) );
99 return ar;
100}
101
102Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, long double p)
103{
104 ar.write( &p, sizeof(p) );
105 return ar;
106}
107
108Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, bool &p)
109{
110 ar.read( &p, sizeof(p) );
111 return ar;
112}
113
114Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, char &p)
115{
116 ar.read( &p, sizeof(p) );
117 return ar;
118}
119
120Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed char &p)
121{
122 ar.read( &p, sizeof(p) );
123 return ar;
124}
125
126Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned char &p)
127{
128 ar.read( &p, sizeof(p) );
129 return ar;
130}
131
132Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed short &p)
133{
134 ar.read( &p, sizeof(p) );
135 return ar;
136}
137
138Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned short &p)
139{
140 ar.read( &p, sizeof(p) );
141 return ar;
142}
143
144Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed int &p)
145{
146 ar.read( &p, sizeof(p) );
147 return ar;
148}
149
150Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned int &p)
151{
152 ar.read( &p, sizeof(p) );
153 return ar;
154}
155
156Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed long &p)
157{
158 ar.read( &p, sizeof(p) );
159 return ar;
160}
161
162Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned long &p)
163{
164 ar.read( &p, sizeof(p) );
165 return ar;
166}
167
168Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed long long &p)
169{
170 ar.read( &p, sizeof(p) );
171 return ar;
172}
173
174Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned long long &p)
175{
176 ar.read( &p, sizeof(p) );
177 return ar;
178}
179
180Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, float &p)
181{
182 ar.read( &p, sizeof(p) );
183 return ar;
184}
185
186Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, double &p)
187{
188 ar.read( &p, sizeof(p) );
189 return ar;
190}
191
192Bu::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
17namespace 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
13Bu::ArchiveBinary::ArchiveBinary( Stream &rStream, bool bLoading ) :
14 bLoading( bLoading ),
15 rStream( rStream ),
16 nNextID( 1 )
17{
18}
19
20Bu::ArchiveBinary::~ArchiveBinary()
21{
22}
23
24void 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
32void 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
41void Bu::ArchiveBinary::close()
42{
43 rStream.close();
44}
45
46bool Bu::ArchiveBinary::isLoading()
47{
48 return bLoading;
49}
50
51uint32_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
59void 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
73void 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
89void Bu::ArchiveBinary::setProperty( const Bu::Blob &rKey, const Bu::Variant &rValue )
90{
91 hProps.insert( rKey, rValue );
92}
93
94Bu::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
18namespace 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
16namespace Bu 16namespace 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
18namespace Bu 18namespace 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
17namespace Bu 17namespace 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
1523Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, const Bu::String &s ) 1523Bu::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
1531Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, Bu::String &s ) 1531Bu::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 );
diff --git a/src/tests/cache.cpp b/src/tests/cache.cpp
index 4751559..3b32daf 100644
--- a/src/tests/cache.cpp
+++ b/src/tests/cache.cpp
@@ -5,8 +5,8 @@
5 5
6class Something : public Bu::CacheObject<Bu::Uuid, Something> 6class Something : public Bu::CacheObject<Bu::Uuid, Something>
7{ 7{
8friend Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Something &s ); 8friend Bu::Archive &operator>>( Bu::Archive &ar, Something &s );
9friend Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Something &s ); 9friend Bu::Archive &operator<<( Bu::Archive &ar, const Something &s );
10public: 10public:
11 Something() 11 Something()
12 { 12 {
@@ -47,8 +47,8 @@ private:
47 47
48class SubSomethingA : public Something 48class SubSomethingA : public Something
49{ 49{
50friend Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, SubSomethingA &s ); 50friend Bu::Archive &operator>>( Bu::Archive &ar, SubSomethingA &s );
51friend Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const SubSomethingA &s ); 51friend Bu::Archive &operator<<( Bu::Archive &ar, const SubSomethingA &s );
52public: 52public:
53 SubSomethingA() 53 SubSomethingA()
54 { 54 {
@@ -71,8 +71,8 @@ private:
71 71
72class SubSomethingB : public Something 72class SubSomethingB : public Something
73{ 73{
74friend Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, SubSomethingB &s ); 74friend Bu::Archive &operator>>( Bu::Archive &ar, SubSomethingB &s );
75friend Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const SubSomethingB &s ); 75friend Bu::Archive &operator<<( Bu::Archive &ar, const SubSomethingB &s );
76public: 76public:
77 SubSomethingB() 77 SubSomethingB()
78 { 78 {
@@ -93,32 +93,32 @@ private:
93 Bu::String sString; 93 Bu::String sString;
94}; 94};
95 95
96Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Something &s ) 96Bu::Archive &operator>>( Bu::Archive &ar, Something &s )
97{ 97{
98 return ar >> s.uId >> s.sName; 98 return ar >> s.uId >> s.sName;
99} 99}
100 100
101Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Something &s ) 101Bu::Archive &operator<<( Bu::Archive &ar, const Something &s )
102{ 102{
103 return ar << s.uId << s.sName; 103 return ar << s.uId << s.sName;
104} 104}
105 105
106Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, SubSomethingA &s ) 106Bu::Archive &operator>>( Bu::Archive &ar, SubSomethingA &s )
107{ 107{
108 return ar >> (Something &)s >> s.iNumber; 108 return ar >> (Something &)s >> s.iNumber;
109} 109}
110 110
111Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const SubSomethingA &s ) 111Bu::Archive &operator<<( Bu::Archive &ar, const SubSomethingA &s )
112{ 112{
113 return ar << (Something &)s << s.iNumber; 113 return ar << (Something &)s << s.iNumber;
114} 114}
115 115
116Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, SubSomethingB &s ) 116Bu::Archive &operator>>( Bu::Archive &ar, SubSomethingB &s )
117{ 117{
118 return ar >> (Something &)s >> s.sString; 118 return ar >> (Something &)s >> s.sString;
119} 119}
120 120
121Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const SubSomethingB &s ) 121Bu::Archive &operator<<( Bu::Archive &ar, const SubSomethingB &s )
122{ 122{
123 return ar << (Something &)s << s.sString; 123 return ar << (Something &)s << s.sString;
124} 124}
@@ -128,7 +128,7 @@ namespace Bu
128 template<> 128 template<>
129 void _cacheObjectSave<const Something>( Bu::Stream &s, const Something *pObject ) 129 void _cacheObjectSave<const Something>( Bu::Stream &s, const Something *pObject )
130 { 130 {
131 Bu::Archive ar( s, Bu::Archive::save ); 131 Bu::ArchiveBinary ar( s, Bu::ArchiveBinary::save );
132 if( typeid(*pObject) == typeid(SubSomethingA) ) 132 if( typeid(*pObject) == typeid(SubSomethingA) )
133 { 133 {
134 ar << (uint8_t)1 << (SubSomethingA &)*pObject; 134 ar << (uint8_t)1 << (SubSomethingA &)*pObject;
@@ -147,7 +147,7 @@ namespace Bu
147 template<> 147 template<>
148 Something *_cacheObjectLoad<Bu::Uuid, Something>( Bu::CacheObject<Bu::Uuid, Something>::Initializer &initObj, const Bu::Uuid &rKey, Bu::Stream &s ) 148 Something *_cacheObjectLoad<Bu::Uuid, Something>( Bu::CacheObject<Bu::Uuid, Something>::Initializer &initObj, const Bu::Uuid &rKey, Bu::Stream &s )
149 { 149 {
150 Bu::Archive ar( s, Bu::Archive::load ); 150 Bu::ArchiveBinary ar( s, Bu::ArchiveBinary::load );
151 uint8_t uType; 151 uint8_t uType;
152 ar >> uType; 152 ar >> uType;
153 switch( uType ) 153 switch( uType )
diff --git a/src/tests/cachedel.cpp b/src/tests/cachedel.cpp
index 817757c..fd40994 100644
--- a/src/tests/cachedel.cpp
+++ b/src/tests/cachedel.cpp
@@ -6,8 +6,8 @@
6 6
7class Something : public Bu::CacheObject<Bu::Uuid, Something> 7class Something : public Bu::CacheObject<Bu::Uuid, Something>
8{ 8{
9friend Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Something &s ); 9friend Bu::Archive &operator>>( Bu::Archive &ar, Something &s );
10friend Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Something &s ); 10friend Bu::Archive &operator<<( Bu::Archive &ar, const Something &s );
11public: 11public:
12 Something() 12 Something()
13 { 13 {
@@ -48,8 +48,8 @@ private:
48 48
49class SubSomethingA : public Something 49class SubSomethingA : public Something
50{ 50{
51friend Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, SubSomethingA &s ); 51friend Bu::Archive &operator>>( Bu::Archive &ar, SubSomethingA &s );
52friend Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const SubSomethingA &s ); 52friend Bu::Archive &operator<<( Bu::Archive &ar, const SubSomethingA &s );
53public: 53public:
54 SubSomethingA() 54 SubSomethingA()
55 { 55 {
@@ -72,8 +72,8 @@ private:
72 72
73class SubSomethingB : public Something 73class SubSomethingB : public Something
74{ 74{
75friend Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, SubSomethingB &s ); 75friend Bu::Archive &operator>>( Bu::Archive &ar, SubSomethingB &s );
76friend Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const SubSomethingB &s ); 76friend Bu::Archive &operator<<( Bu::Archive &ar, const SubSomethingB &s );
77public: 77public:
78 SubSomethingB() 78 SubSomethingB()
79 { 79 {
@@ -94,32 +94,32 @@ private:
94 Bu::String sString; 94 Bu::String sString;
95}; 95};
96 96
97Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Something &s ) 97Bu::Archive &operator>>( Bu::Archive &ar, Something &s )
98{ 98{
99 return ar >> s.uId >> s.sName; 99 return ar >> s.uId >> s.sName;
100} 100}
101 101
102Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Something &s ) 102Bu::Archive &operator<<( Bu::Archive &ar, const Something &s )
103{ 103{
104 return ar << s.uId << s.sName; 104 return ar << s.uId << s.sName;
105} 105}
106 106
107Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, SubSomethingA &s ) 107Bu::Archive &operator>>( Bu::Archive &ar, SubSomethingA &s )
108{ 108{
109 return ar >> (Something &)s >> s.iNumber; 109 return ar >> (Something &)s >> s.iNumber;
110} 110}
111 111
112Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const SubSomethingA &s ) 112Bu::Archive &operator<<( Bu::Archive &ar, const SubSomethingA &s )
113{ 113{
114 return ar << (Something &)s << s.iNumber; 114 return ar << (Something &)s << s.iNumber;
115} 115}
116 116
117Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, SubSomethingB &s ) 117Bu::Archive &operator>>( Bu::Archive &ar, SubSomethingB &s )
118{ 118{
119 return ar >> (Something &)s >> s.sString; 119 return ar >> (Something &)s >> s.sString;
120} 120}
121 121
122Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const SubSomethingB &s ) 122Bu::Archive &operator<<( Bu::Archive &ar, const SubSomethingB &s )
123{ 123{
124 return ar << (Something &)s << s.sString; 124 return ar << (Something &)s << s.sString;
125} 125}
@@ -129,7 +129,7 @@ namespace Bu
129 template<> 129 template<>
130 void _cacheObjectSave<const Something>( Bu::Stream &s, const Something *pObject ) 130 void _cacheObjectSave<const Something>( Bu::Stream &s, const Something *pObject )
131 { 131 {
132 Bu::Archive ar( s, Bu::Archive::save ); 132 Bu::ArchiveBinary ar( s, Bu::ArchiveBinary::save );
133 if( typeid(*pObject) == typeid(SubSomethingA) ) 133 if( typeid(*pObject) == typeid(SubSomethingA) )
134 { 134 {
135 ar << (uint8_t)1 << (SubSomethingA &)*pObject; 135 ar << (uint8_t)1 << (SubSomethingA &)*pObject;
@@ -148,7 +148,7 @@ namespace Bu
148 template<> 148 template<>
149 Something *_cacheObjectLoad<Bu::Uuid, Something>( Bu::CacheObject<Bu::Uuid, Something>::Initializer &initObj, const Bu::Uuid &rKey, Bu::Stream &s ) 149 Something *_cacheObjectLoad<Bu::Uuid, Something>( Bu::CacheObject<Bu::Uuid, Something>::Initializer &initObj, const Bu::Uuid &rKey, Bu::Stream &s )
150 { 150 {
151 Bu::Archive ar( s, Bu::Archive::load ); 151 Bu::ArchiveBinary ar( s, Bu::ArchiveBinary::load );
152 uint8_t uType; 152 uint8_t uType;
153 ar >> uType; 153 ar >> uType;
154 switch( uType ) 154 switch( uType )
diff --git a/src/unit/archive.unit b/src/unit/archive.unit
index 58f7d2b..6b975ac 100644
--- a/src/unit/archive.unit
+++ b/src/unit/archive.unit
@@ -8,17 +8,17 @@
8 8
9#include "bu/membuf.h" 9#include "bu/membuf.h"
10#include "bu/array.h" 10#include "bu/array.h"
11#include "bu/archive.h" 11#include "bu/archivebinary.h"
12 12
13using namespace Bu; 13using namespace Bu;
14 14
15suite Archive 15suite ArchiveBinary
16{ 16{
17 test primitives 17 test primitives
18 { 18 {
19 MemBuf mb; 19 MemBuf mb;
20 { 20 {
21 Archive ar( mb, Archive::save ); 21 ArchiveBinary ar( mb, ArchiveBinary::save );
22 ar << (int8_t)1; 22 ar << (int8_t)1;
23 ar << (uint8_t)2; 23 ar << (uint8_t)2;
24 ar << (int16_t)3; 24 ar << (int16_t)3;
@@ -41,7 +41,7 @@ suite Archive
41 } 41 }
42 mb.setPos( 0 ); 42 mb.setPos( 0 );
43 { 43 {
44 Archive ar( mb, Archive::load ); 44 ArchiveBinary ar( mb, ArchiveBinary::load );
45 int8_t p1; 45 int8_t p1;
46 uint8_t p2; 46 uint8_t p2;
47 int16_t p3; 47 int16_t p3;
@@ -104,7 +104,7 @@ suite Archive
104 { 104 {
105 MemBuf mb; 105 MemBuf mb;
106 { 106 {
107 Archive ar( mb, Archive::save ); 107 ArchiveBinary ar( mb, ArchiveBinary::save );
108 String sStr("This is a test string."); 108 String sStr("This is a test string.");
109 List<int> lList; 109 List<int> lList;
110 lList.append( 10 ); 110 lList.append( 10 );
@@ -117,7 +117,7 @@ suite Archive
117 } 117 }
118 mb.setPos( 0 ); 118 mb.setPos( 0 );
119 { 119 {
120 Archive ar( mb, Archive::load ); 120 ArchiveBinary ar( mb, ArchiveBinary::load );
121 String sStr; 121 String sStr;
122 List<int> lList; 122 List<int> lList;
123 ar >> sStr; 123 ar >> sStr;
@@ -137,7 +137,7 @@ suite Archive
137 { 137 {
138 MemBuf mb; 138 MemBuf mb;
139 { 139 {
140 Archive ar( mb, Archive::save ); 140 ArchiveBinary ar( mb, ArchiveBinary::save );
141 String sStr("This is a test string."); 141 String sStr("This is a test string.");
142 Array<int> lArray; 142 Array<int> lArray;
143 lArray.append( 10 ); 143 lArray.append( 10 );
@@ -150,7 +150,7 @@ suite Archive
150 } 150 }
151 mb.setPos( 0 ); 151 mb.setPos( 0 );
152 { 152 {
153 Archive ar( mb, Archive::load ); 153 ArchiveBinary ar( mb, ArchiveBinary::load );
154 String sStr; 154 String sStr;
155 Array<int> lArray; 155 Array<int> lArray;
156 ar >> sStr; 156 ar >> sStr;
@@ -170,7 +170,7 @@ suite Archive
170 { 170 {
171 MemBuf mb; 171 MemBuf mb;
172 { 172 {
173 Archive ar( mb, Archive::save ); 173 ArchiveBinary ar( mb, ArchiveBinary::save );
174 Array<String> lArray; 174 Array<String> lArray;
175 lArray.append( "10" ); 175 lArray.append( "10" );
176 lArray.append( "20" ); 176 lArray.append( "20" );
@@ -181,7 +181,7 @@ suite Archive
181 } 181 }
182 mb.setPos( 0 ); 182 mb.setPos( 0 );
183 { 183 {
184 Archive ar( mb, Archive::load ); 184 ArchiveBinary ar( mb, ArchiveBinary::load );
185 Array<String> lArray; 185 Array<String> lArray;
186 ar >> lArray; 186 ar >> lArray;
187 unitTest( lArray.getSize() == 4 ); 187 unitTest( lArray.getSize() == 4 );
diff --git a/src/unit/myriad.unit b/src/unit/myriad.unit
index 91a89c9..09d92a3 100644
--- a/src/unit/myriad.unit
+++ b/src/unit/myriad.unit
@@ -13,7 +13,7 @@
13#include "bu/array.h" 13#include "bu/array.h"
14 14
15#include "bu/sio.h" 15#include "bu/sio.h"
16#include "bu/archive.h" 16#include "bu/archivebinary.h"
17#include "bu/md5.h" 17#include "bu/md5.h"
18#include "bu/unitsuite.h" 18#include "bu/unitsuite.h"
19 19
@@ -23,8 +23,8 @@ using namespace Bu;
23 23
24class VerifyObject 24class VerifyObject
25{ 25{
26friend Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const VerifyObject &vo ); 26friend Bu::Archive &operator<<( Bu::Archive &ar, const VerifyObject &vo );
27friend Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, VerifyObject &vo ); 27friend Bu::Archive &operator>>( Bu::Archive &ar, VerifyObject &vo );
28public: 28public:
29 VerifyObject( int iUnits ) : 29 VerifyObject( int iUnits ) :
30 iUnits( iUnits ), 30 iUnits( iUnits ),
@@ -46,7 +46,7 @@ private:
46 mutable int iBytesWritten; 46 mutable int iBytesWritten;
47}; 47};
48 48
49Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const VerifyObject &vo ) 49Bu::Archive &operator<<( Bu::Archive &ar, const VerifyObject &vo )
50{ 50{
51 Md5 sum; 51 Md5 sum;
52 ar << vo.iUnits; 52 ar << vo.iUnits;
@@ -70,7 +70,7 @@ Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const VerifyObject &vo )
70 return ar; 70 return ar;
71} 71}
72 72
73Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, VerifyObject &vo ) 73Bu::Archive &operator>>( Bu::Archive &ar, VerifyObject &vo )
74{ 74{
75 Md5 sum; 75 Md5 sum;
76 ar >> vo.iUnits; 76 ar >> vo.iUnits;
@@ -347,7 +347,7 @@ suite Myriad
347 VerifyObject vo( random()%1024 ); 347 VerifyObject vo( random()%1024 );
348 { 348 {
349 MyriadStream ms = m.openStream( iStream ); 349 MyriadStream ms = m.openStream( iStream );
350 Archive ar( ms, Archive::save ); 350 ArchiveBinary ar( ms, ArchiveBinary::save );
351 ar << vo; 351 ar << vo;
352 unitTest( ms.tell() == vo.getBytesWritten() ); 352 unitTest( ms.tell() == vo.getBytesWritten() );
353 ms.setSize( ms.tell() ); 353 ms.setSize( ms.tell() );
@@ -366,12 +366,12 @@ suite Myriad
366 VerifyObject vo( random()%1024 ); 366 VerifyObject vo( random()%1024 );
367 { 367 {
368 MyriadStream ms = m.openStream( *i ); 368 MyriadStream ms = m.openStream( *i );
369 Archive ar( ms, Archive::load ); 369 ArchiveBinary ar( ms, ArchiveBinary::load );
370 ar >> vo; 370 ar >> vo;
371 } 371 }
372 { 372 {
373 MyriadStream ms = m.openStream( *i ); 373 MyriadStream ms = m.openStream( *i );
374 Archive ar( ms, Archive::save ); 374 ArchiveBinary ar( ms, ArchiveBinary::save );
375 ar << vo; 375 ar << vo;
376 unitTest( ms.tell() == vo.getBytesWritten() ); 376 unitTest( ms.tell() == vo.getBytesWritten() );
377 ms.setSize( ms.tell() ); 377 ms.setSize( ms.tell() );
diff --git a/src/unstable/archivestream.cpp b/src/unstable/archivestream.cpp
index 437c183..90a9599 100644
--- a/src/unstable/archivestream.cpp
+++ b/src/unstable/archivestream.cpp
@@ -7,7 +7,7 @@
7 7
8#include "bu/archivestream.h" 8#include "bu/archivestream.h"
9 9
10Bu::ArchiveStream::ArchiveStream( Bu::ArchiveBase &ar ) : 10Bu::ArchiveStream::ArchiveStream( Bu::Archive &ar ) :
11 ar( ar ), 11 ar( ar ),
12 iPos( 0 ) 12 iPos( 0 )
13{ 13{
diff --git a/src/unstable/archivestream.h b/src/unstable/archivestream.h
index c694037..da6c6b0 100644
--- a/src/unstable/archivestream.h
+++ b/src/unstable/archivestream.h
@@ -7,7 +7,7 @@
7#ifndef BU_ARCHIVE_STREAM_H 7#ifndef BU_ARCHIVE_STREAM_H
8#define BU_ARCHIVE_STREAM_H 8#define BU_ARCHIVE_STREAM_H
9 9
10#include "bu/archivebase.h" 10#include "bu/archive.h"
11#include "bu/stream.h" 11#include "bu/stream.h"
12 12
13namespace Bu 13namespace Bu
@@ -15,7 +15,7 @@ namespace Bu
15 class ArchiveStream : public Stream 15 class ArchiveStream : public Stream
16 { 16 {
17 public: 17 public:
18 ArchiveStream( Bu::ArchiveBase &ar ); 18 ArchiveStream( Bu::Archive &ar );
19 virtual ~ArchiveStream(); 19 virtual ~ArchiveStream();
20 20
21 virtual void close(); 21 virtual void close();
@@ -41,7 +41,7 @@ namespace Bu
41 virtual Bu::String getLocation() const; 41 virtual Bu::String getLocation() const;
42 42
43 private: 43 private:
44 Bu::ArchiveBase &ar; 44 Bu::Archive &ar;
45 size iPos; 45 size iPos;
46 }; 46 };
47} 47}
diff --git a/src/unstable/cachebase.h b/src/unstable/cachebase.h
index 7a54465..f986a89 100644
--- a/src/unstable/cachebase.h
+++ b/src/unstable/cachebase.h
@@ -9,7 +9,7 @@
9#define BU_CACHE_BASE_H 9#define BU_CACHE_BASE_H
10 10
11#include "bu/string.h" 11#include "bu/string.h"
12#include "bu/archive.h" 12#include "bu/archivebinary.h"
13#include "bu/hash.h" 13#include "bu/hash.h"
14#include "bu/readwritemutex.h" 14#include "bu/readwritemutex.h"
15#include "bu/mutexlocker.h" 15#include "bu/mutexlocker.h"
@@ -659,7 +659,7 @@ namespace Bu
659 template<typename obtype> 659 template<typename obtype>
660 void _cacheObjectSave( Bu::Stream &s, obtype *pObject ) 660 void _cacheObjectSave( Bu::Stream &s, obtype *pObject )
661 { 661 {
662 Bu::Archive ar( s, Bu::Archive::save ); 662 Bu::ArchiveBinary ar( s, Bu::Archive::save );
663 ar << *pObject; 663 ar << *pObject;
664 } 664 }
665 665
@@ -670,7 +670,7 @@ namespace Bu
670 Bu::Stream &s 670 Bu::Stream &s
671 ) 671 )
672 { 672 {
673 Bu::Archive ar( s, Bu::Archive::load ); 673 Bu::ArchiveBinary ar( s, Bu::Archive::load );
674 obtype *ret = initObject(new obtype()); 674 obtype *ret = initObject(new obtype());
675 ar >> *ret; 675 ar >> *ret;
676 return ret; 676 return ret;
diff --git a/src/unstable/myriadcache.h b/src/unstable/myriadcache.h
index 7bba93b..8a1f9db 100644
--- a/src/unstable/myriadcache.h
+++ b/src/unstable/myriadcache.h
@@ -29,7 +29,7 @@ namespace Bu
29 { 29 {
30 Bu::ReadWriteMutex::ReadLocker l( rwStore ); 30 Bu::ReadWriteMutex::ReadLocker l( rwStore );
31 Bu::MyriadStream ms = mStore.openStream( 1 ); 31 Bu::MyriadStream ms = mStore.openStream( 1 );
32 Bu::Archive ar( ms, Bu::Archive::load ); 32 Bu::ArchiveBinary ar( ms, Bu::ArchiveBinary::load );
33 uint8_t uVer; 33 uint8_t uVer;
34 ar >> uVer; 34 ar >> uVer;
35 switch( uVer ) 35 switch( uVer )
@@ -118,7 +118,7 @@ namespace Bu
118 return; 118 return;
119 119
120 Bu::MyriadStream ms = mStore.openStream( 1 ); 120 Bu::MyriadStream ms = mStore.openStream( 1 );
121 Bu::Archive ar( ms, Bu::Archive::save ); 121 Bu::ArchiveBinary ar( ms, Bu::ArchiveBinary::save );
122 ar << (uint8_t)0 << hIndex; 122 ar << (uint8_t)0 << hIndex;
123 ar.close(); 123 ar.close();
124 ms.setSize( ms.tell() ); 124 ms.setSize( ms.tell() );
diff --git a/src/unstable/uuid.cpp b/src/unstable/uuid.cpp
index c5ff943..6642d75 100644
--- a/src/unstable/uuid.cpp
+++ b/src/unstable/uuid.cpp
@@ -170,13 +170,13 @@ template<> bool Bu::__cmpHashKeys<Bu::Uuid>( const Bu::Uuid &a, const Bu::Uuid &
170 return a == b; 170 return a == b;
171} 171}
172 172
173Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, Bu::Uuid &u ) 173Bu::Archive &Bu::operator>>( Bu::Archive &ar, Bu::Uuid &u )
174{ 174{
175 ar.read( u.data, 16 ); 175 ar.read( u.data, 16 );
176 return ar; 176 return ar;
177} 177}
178 178
179Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, const Bu::Uuid &u ) 179Bu::Archive &Bu::operator<<( Bu::Archive &ar, const Bu::Uuid &u )
180{ 180{
181 ar.write( u.data, 16 ); 181 ar.write( u.data, 16 );
182 return ar; 182 return ar;
diff --git a/src/unstable/uuid.h b/src/unstable/uuid.h
index 07ec333..d61a928 100644
--- a/src/unstable/uuid.h
+++ b/src/unstable/uuid.h
@@ -15,8 +15,8 @@ namespace Bu
15{ 15{
16 class Uuid 16 class Uuid
17 { 17 {
18 friend Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Uuid &u ); 18 friend Bu::Archive &operator>>( Bu::Archive &ar, Uuid &u );
19 friend Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Uuid &u ); 19 friend Bu::Archive &operator<<( Bu::Archive &ar, const Uuid &u );
20 public: 20 public:
21 Uuid(); 21 Uuid();
22 Uuid( const Uuid &src ); 22 Uuid( const Uuid &src );
@@ -65,8 +65,8 @@ namespace Bu
65 const Uuid &a, const Uuid &b ); 65 const Uuid &a, const Uuid &b );
66 66
67 class Formatter; 67 class Formatter;
68 Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Uuid &u ); 68 Bu::Archive &operator>>( Bu::Archive &ar, Uuid &u );
69 Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Uuid &u ); 69 Bu::Archive &operator<<( Bu::Archive &ar, const Uuid &u );
70 Bu::Formatter &operator<<( Bu::Formatter &f, const Uuid &u ); 70 Bu::Formatter &operator<<( Bu::Formatter &f, const Uuid &u );
71}; 71};
72 72