From b7e40536df9bf9bbad3b2b7a59f33ebad25fc981 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Mon, 4 Jun 2007 23:49:26 +0000 Subject: Added rudimentary object tracking to Archive, and rearranged the hash and archive dependancies a little. I'll add docs for object tracking later... --- src/archive.cpp | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'src/archive.cpp') diff --git a/src/archive.cpp b/src/archive.cpp index c759477..7208bae 100644 --- a/src/archive.cpp +++ b/src/archive.cpp @@ -2,7 +2,8 @@ Bu::Archive::Archive( Stream &rStream, bool bLoading ) : bLoading( bLoading ), - rStream( rStream ) + rStream( rStream ), + nNextID( 1 ) { } @@ -345,3 +346,41 @@ Bu::Archive &Bu::operator>>( Bu::Archive &ar, std::string &s ) return ar; } +uint32_t Bu::Archive::getID( const void *ptr ) +{ + if( hPtrID.has( (int)ptr ) ) + return hPtrID.get( (int)ptr ); + hPtrID.insert( (int)ptr, nNextID ); + return nNextID++; +} + +void Bu::Archive::assocPtrID( void **ptr, uint32_t id ) +{ + if( hPtrID.has( id ) ) + { + *ptr = (void *)hPtrID.get( id ); + return; + } + + if( !hPtrDest.has( id ) ) + hPtrDest.insert( id, List() ); + + hPtrDest[id].value().append( ptr ); +} + +void Bu::Archive::readID( const void *ptr, uint32_t id ) +{ + hPtrID.insert( id, (int)ptr ); + + if( hPtrDest.has( id ) ) + { + Bu::List &l = hPtrDest.get( id ); + for( Bu::List::iterator i = l.begin(); i != l.end(); i++ ) + { + *(*i) = (void *)ptr; + } + + hPtrDest.erase( id ); + } +} + -- cgit v1.2.3