diff options
author | Mike Buland <eichlan@xagasoft.com> | 2022-04-18 21:58:01 -0700 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2022-04-18 21:58:01 -0700 |
commit | 819ff3d27012b4ec4a0a21c150c112a4dd28b14d (patch) | |
tree | 6d38a56cada17155a6d495d50925f91144eff025 /src | |
parent | 48dc740f752bca80ee761df75422aff5f0d6b075 (diff) | |
download | libbu++-819ff3d27012b4ec4a0a21c150c112a4dd28b14d.tar.gz libbu++-819ff3d27012b4ec4a0a21c150c112a4dd28b14d.tar.bz2 libbu++-819ff3d27012b4ec4a0a21c150c112a4dd28b14d.tar.xz libbu++-819ff3d27012b4ec4a0a21c150c112a4dd28b14d.zip |
ArchiveBase has getProperty and setProperty.
I kind of want to re-engineer the entire archive system...The root
should be able to track a stateful stack of containers such as arrays
and dictionaries as well as support non-binary reads and writes in a
more robust way.
It also still bothers me that it's the only thing in the system with
base in the base class name. I should just change it...it's going to
impact many programs, though.
Diffstat (limited to 'src')
-rw-r--r-- | src/stable/archive.cpp | 10 | ||||
-rw-r--r-- | src/stable/archive.h | 21 | ||||
-rw-r--r-- | src/stable/archivebase.h | 9 |
3 files changed, 22 insertions, 18 deletions
diff --git a/src/stable/archive.cpp b/src/stable/archive.cpp index 31a4ba7..69447fb 100644 --- a/src/stable/archive.cpp +++ b/src/stable/archive.cpp | |||
@@ -87,3 +87,13 @@ void Bu::Archive::readID( const void *ptr, uint32_t id ) | |||
87 | } | 87 | } |
88 | } | 88 | } |
89 | 89 | ||
90 | void Bu::Archive::setProperty( const Bu::Blob &rKey, const Bu::Variant &rValue ) | ||
91 | { | ||
92 | hProps.insert( rKey, rValue ); | ||
93 | } | ||
94 | |||
95 | Bu::Variant Bu::Archive::getProperty( const Bu::Blob &rKey ) const | ||
96 | { | ||
97 | return hProps.get( rKey ); | ||
98 | } | ||
99 | |||
diff --git a/src/stable/archive.h b/src/stable/archive.h index 7f988eb..b6cc2a9 100644 --- a/src/stable/archive.h +++ b/src/stable/archive.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #include "bu/hash.h" | 13 | #include "bu/hash.h" |
14 | #include "bu/util.h" | 14 | #include "bu/util.h" |
15 | #include "bu/variant.h" | 15 | #include "bu/variant.h" |
16 | #include "bu/blob.h" | ||
16 | 17 | ||
17 | namespace Bu | 18 | namespace Bu |
18 | { | 19 | { |
@@ -110,28 +111,16 @@ namespace Bu | |||
110 | */ | 111 | */ |
111 | void readID( const void *ptr, uint32_t id ); | 112 | void readID( const void *ptr, uint32_t id ); |
112 | 113 | ||
113 | template<typename t> | 114 | virtual void setProperty( const Bu::Blob &rKey, |
114 | void setProp( const Bu::String &sId, const t &val ) | 115 | const Bu::Variant &rValue ); |
115 | { | 116 | virtual Bu::Variant getProperty( const Bu::Blob &rKey ) const; |
116 | if( !hProps.has( sId ) ) | ||
117 | { | ||
118 | hProps.insert( sId, Variant() ); | ||
119 | } | ||
120 | hProps.get( sId ) = val; | ||
121 | } | ||
122 | |||
123 | template<typename t> | ||
124 | t getProp( const Bu::String &sId ) | ||
125 | { | ||
126 | return hProps.get( sId ); | ||
127 | } | ||
128 | 117 | ||
129 | private: | 118 | private: |
130 | Stream &rStream; | 119 | Stream &rStream; |
131 | uint32_t nNextID; | 120 | uint32_t nNextID; |
132 | Hash<uint32_t,ptrdiff_t> hPtrID; | 121 | Hash<uint32_t,ptrdiff_t> hPtrID; |
133 | Hash<uint32_t,List<void **> > hPtrDest; | 122 | Hash<uint32_t,List<void **> > hPtrDest; |
134 | Hash<Bu::String, Variant> hProps; | 123 | Hash<Bu::Blob, Variant> hProps; |
135 | }; | 124 | }; |
136 | } | 125 | } |
137 | 126 | ||
diff --git a/src/stable/archivebase.h b/src/stable/archivebase.h index e3d2b60..d846c27 100644 --- a/src/stable/archivebase.h +++ b/src/stable/archivebase.h | |||
@@ -11,6 +11,9 @@ | |||
11 | #include <stdint.h> | 11 | #include <stdint.h> |
12 | #include <unistd.h> | 12 | #include <unistd.h> |
13 | 13 | ||
14 | #include "bu/variant.h" | ||
15 | #include "bu/blob.h" | ||
16 | |||
14 | namespace Bu | 17 | namespace Bu |
15 | { | 18 | { |
16 | class ArchiveBase | 19 | class ArchiveBase |
@@ -23,6 +26,10 @@ namespace Bu | |||
23 | virtual void write( const void *pData, size_t iLength )=0; | 26 | virtual void write( const void *pData, size_t iLength )=0; |
24 | virtual void read( void *pData, size_t iLength )=0; | 27 | virtual void read( void *pData, size_t iLength )=0; |
25 | virtual bool isLoading()=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; | ||
26 | }; | 33 | }; |
27 | 34 | ||
28 | template<typename T> ArchiveBase &operator&&( ArchiveBase &ar, T &dat ) | 35 | template<typename T> ArchiveBase &operator&&( ArchiveBase &ar, T &dat ) |
@@ -68,8 +75,6 @@ namespace Bu | |||
68 | ArchiveBase &operator>>( ArchiveBase &ar, float &p ); | 75 | ArchiveBase &operator>>( ArchiveBase &ar, float &p ); |
69 | ArchiveBase &operator>>( ArchiveBase &ar, double &p ); | 76 | ArchiveBase &operator>>( ArchiveBase &ar, double &p ); |
70 | ArchiveBase &operator>>( ArchiveBase &ar, long double &p ); | 77 | ArchiveBase &operator>>( ArchiveBase &ar, long double &p ); |
71 | |||
72 | |||
73 | }; | 78 | }; |
74 | 79 | ||
75 | #endif | 80 | #endif |