diff options
author | Mike Buland <eichlan@xagasoft.com> | 2009-11-12 17:05:30 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2009-11-12 17:05:30 +0000 |
commit | 509d136e9adb60c56369565b9545e613cac3678e (patch) | |
tree | f118d676edeae2d5e17f48b32b180d4761b60520 /src/fbasicstring.h | |
parent | 3166bd631a093f42ea44a4b0f4d914cf51518bd4 (diff) | |
download | libbu++-509d136e9adb60c56369565b9545e613cac3678e.tar.gz libbu++-509d136e9adb60c56369565b9545e613cac3678e.tar.bz2 libbu++-509d136e9adb60c56369565b9545e613cac3678e.tar.xz libbu++-509d136e9adb60c56369565b9545e613cac3678e.zip |
I've started my campaign to clean up all of the header files in libbu++ as far
as includes go. This required a little bit of reworking as far as archive goes,
but I've been planning on changing it aronud for a bit anyway.
The final result here is that you may need to add some more includes in your
own code, libbu++ doesn't include as many random things you didn't ask for
anymore, most of these seem to be bu/hash.h, unistd.h, and time.h.
Also, any Archive functions and operators should use ArchiveBase when they can
instead of Archive, archivebase.h is a much lighterweight include that will
be used everywhere in core that it can be, there are a few classes that actually
want a specific archiver to be used, they will use it (such as the nids storage
class).
So far, except for adding header files, nothing has changed in functionality,
and no other code changes should be required, although the above mentioned
archive changeover is reccomended.
Diffstat (limited to 'src/fbasicstring.h')
-rw-r--r-- | src/fbasicstring.h | 108 |
1 files changed, 31 insertions, 77 deletions
diff --git a/src/fbasicstring.h b/src/fbasicstring.h index 225bc80..0e63efe 100644 --- a/src/fbasicstring.h +++ b/src/fbasicstring.h | |||
@@ -15,10 +15,13 @@ | |||
15 | #include <wordexp.h> | 15 | #include <wordexp.h> |
16 | #endif | 16 | #endif |
17 | 17 | ||
18 | #include "bu/archival.h" | ||
19 | #include "bu/archive.h" | ||
20 | #include "bu/util.h" | 18 | #include "bu/util.h" |
21 | #include "bu/sharedcore.h" | 19 | #include "bu/sharedcore.h" |
20 | #include "bu/exceptionbase.h" | ||
21 | #include "bu/archivebase.h" | ||
22 | #include "bu/list.h" | ||
23 | |||
24 | #include <string.h> | ||
22 | 25 | ||
23 | namespace Bu | 26 | namespace Bu |
24 | { | 27 | { |
@@ -30,21 +33,8 @@ namespace Bu | |||
30 | FStringChunk *pNext; | 33 | FStringChunk *pNext; |
31 | }; | 34 | }; |
32 | 35 | ||
33 | #ifndef VALTEST | 36 | #define cpy( dest, src, size ) Bu::memcpy( dest, src, size*sizeof(chr) ) |
34 | #define cpy( dest, src, size ) memcpy( dest, src, size*sizeof(chr) ) | ||
35 | #endif | ||
36 | 37 | ||
37 | #ifdef VALTEST | ||
38 | void cpy( chr *dest, const chr *src, long count ) const | ||
39 | { | ||
40 | for( int j = 0; j < count; j++ ) | ||
41 | { | ||
42 | *dest = *src; | ||
43 | dest++; | ||
44 | src++; | ||
45 | } | ||
46 | } | ||
47 | #endif | ||
48 | template<typename chr, int nMinSize, typename chralloc, typename chunkalloc> | 38 | template<typename chr, int nMinSize, typename chralloc, typename chunkalloc> |
49 | struct FStringCore | 39 | struct FStringCore |
50 | { | 40 | { |
@@ -185,7 +175,7 @@ namespace Bu | |||
185 | *@param chunkalloc (typename) Memory Allocator for chr chunks | 175 | *@param chunkalloc (typename) Memory Allocator for chr chunks |
186 | */ | 176 | */ |
187 | template< typename chr, int nMinSize=256, typename chralloc=std::allocator<chr>, typename chunkalloc=std::allocator<struct FStringChunk<chr> > > | 177 | template< typename chr, int nMinSize=256, typename chralloc=std::allocator<chr>, typename chunkalloc=std::allocator<struct FStringChunk<chr> > > |
188 | class FBasicString : public SharedCore< FStringCore<chr, nMinSize, chralloc, chunkalloc> >, public Archival | 178 | class FBasicString : public SharedCore< FStringCore<chr, nMinSize, chralloc, chunkalloc> > |
189 | { | 179 | { |
190 | protected: | 180 | protected: |
191 | typedef struct FStringChunk<chr> Chunk; | 181 | typedef struct FStringChunk<chr> Chunk; |
@@ -211,8 +201,7 @@ namespace Bu | |||
211 | } | 201 | } |
212 | 202 | ||
213 | FBasicString( const MyType &rSrc ) : | 203 | FBasicString( const MyType &rSrc ) : |
214 | SharedCore<Core>( rSrc ), | 204 | SharedCore<Core>( rSrc ) |
215 | Archival() | ||
216 | { | 205 | { |
217 | } | 206 | } |
218 | 207 | ||
@@ -1284,13 +1273,6 @@ namespace Bu | |||
1284 | return (*this); | 1273 | return (*this); |
1285 | } | 1274 | } |
1286 | 1275 | ||
1287 | MyType &operator=( const std::basic_string<chr> &rData ) | ||
1288 | { | ||
1289 | set( rData.c_str(), rData.size() ); | ||
1290 | |||
1291 | return (*this); | ||
1292 | } | ||
1293 | |||
1294 | MyType operator+( const MyType &rRight ) const | 1276 | MyType operator+( const MyType &rRight ) const |
1295 | { | 1277 | { |
1296 | MyType ret( *this ); | 1278 | MyType ret( *this ); |
@@ -1505,8 +1487,8 @@ namespace Bu | |||
1505 | flatten(); | 1487 | flatten(); |
1506 | pData.flatten(); | 1488 | pData.flatten(); |
1507 | 1489 | ||
1508 | const chr *a = pData.core->pFirst->pData; | 1490 | const chr *a = core->pFirst->pData; |
1509 | chr *b = core->pFirst->pData; | 1491 | chr *b = pData.core->pFirst->pData; |
1510 | for( long j = 0; j < core->nLength; j++, a++, b++ ) | 1492 | for( long j = 0; j < core->nLength; j++, a++, b++ ) |
1511 | { | 1493 | { |
1512 | if( *a != *b ) | 1494 | if( *a != *b ) |
@@ -1521,8 +1503,8 @@ namespace Bu | |||
1521 | flatten(); | 1503 | flatten(); |
1522 | pData.flatten(); | 1504 | pData.flatten(); |
1523 | 1505 | ||
1524 | const chr *a = pData.core->pFirst->pData; | 1506 | const chr *a = core->pFirst->pData; |
1525 | chr *b = core->pFirst->pData; | 1507 | chr *b = pData.core->pFirst->pData; |
1526 | for( long j = 0; j < core->nLength; j++, a++, b++ ) | 1508 | for( long j = 0; j < core->nLength; j++, a++, b++ ) |
1527 | { | 1509 | { |
1528 | if( *a != *b ) | 1510 | if( *a != *b ) |
@@ -1902,51 +1884,6 @@ namespace Bu | |||
1902 | va_end( ap ); | 1884 | va_end( ap ); |
1903 | } | 1885 | } |
1904 | 1886 | ||
1905 | /** | ||
1906 | * Function the archiver calls to archive your FString. | ||
1907 | *@param ar (Archive) The archive which is archiving your FString. | ||
1908 | */ | ||
1909 | void archive( class Archive &ar ) | ||
1910 | { | ||
1911 | if( ar.isLoading() ) | ||
1912 | { | ||
1913 | _hardCopy(); | ||
1914 | core->clear(); | ||
1915 | long nLen; | ||
1916 | ar >> nLen; | ||
1917 | |||
1918 | if( nLen > 0 ) | ||
1919 | { | ||
1920 | Chunk *pNew = core->newChunk( nLen ); | ||
1921 | ar.read( pNew->pData, nLen*sizeof(chr) ); | ||
1922 | core->appendChunk( pNew ); | ||
1923 | } | ||
1924 | } | ||
1925 | else | ||
1926 | { | ||
1927 | flatten(); | ||
1928 | |||
1929 | ar << core->nLength; | ||
1930 | if( core->nLength ) | ||
1931 | ar.write( core->pFirst->pData, core->nLength*sizeof(chr) ); | ||
1932 | } | ||
1933 | } | ||
1934 | /* | ||
1935 | void archive( class Archive &ar ) const | ||
1936 | { | ||
1937 | if( ar.isLoading() ) | ||
1938 | { | ||
1939 | } | ||
1940 | else | ||
1941 | { | ||
1942 | flatten(); | ||
1943 | |||
1944 | ar << core->nLength; | ||
1945 | if( core->nLength ) | ||
1946 | ar.write( core->pFirst->pData, core->nLength*sizeof(chr) ); | ||
1947 | } | ||
1948 | }*/ | ||
1949 | |||
1950 | iterator begin() | 1887 | iterator begin() |
1951 | { | 1888 | { |
1952 | if( core->nLength == 0 ) | 1889 | if( core->nLength == 0 ) |
@@ -2016,10 +1953,27 @@ namespace Bu | |||
2016 | ret.append( rRight ); | 1953 | ret.append( rRight ); |
2017 | return ret; | 1954 | return ret; |
2018 | } | 1955 | } |
1956 | |||
1957 | template<class chr, int b, class c, class d> | ||
1958 | ArchiveBase &operator<<( ArchiveBase &ar, const FBasicString<chr, b, c, d> &s ) | ||
1959 | { | ||
1960 | long n = s.getSize(); | ||
1961 | ar << n; | ||
1962 | ar.write( s.getConstStr(), n ); | ||
1963 | return ar; | ||
1964 | } | ||
1965 | |||
1966 | template<class chr, int b, class c, class d> | ||
1967 | ArchiveBase &operator>>( ArchiveBase &ar, FBasicString<chr, b, c, d> &s ) | ||
1968 | { | ||
1969 | long n; | ||
1970 | ar >> n; | ||
1971 | s.setSize( n ); | ||
1972 | ar.read( s.getStr(), n ); | ||
1973 | return ar; | ||
1974 | } | ||
2019 | } | 1975 | } |
2020 | 1976 | ||
2021 | #ifndef VALTEST | ||
2022 | #undef cpy | 1977 | #undef cpy |
2023 | #endif | ||
2024 | 1978 | ||
2025 | #endif | 1979 | #endif |