From: <vo...@us...> - 2008-01-20 18:10:44
|
Revision: 600 http://opde.svn.sourceforge.net/opde/?rev=600&view=rev Author: volca Date: 2008-01-20 10:10:49 -0800 (Sun, 20 Jan 2008) Log Message: ----------- no more const for getter - it uses cache now Modified Paths: -------------- trunk/src/base/dyntype/DTypeDef.h Modified: trunk/src/base/dyntype/DTypeDef.h =================================================================== --- trunk/src/base/dyntype/DTypeDef.h 2008-01-20 18:03:22 UTC (rev 599) +++ trunk/src/base/dyntype/DTypeDef.h 2008-01-20 18:10:49 UTC (rev 600) @@ -401,7 +401,7 @@ /** Value getter. * @see DTypeDef.get */ - DVariant get(const std::string& field) const { + DVariant get(const std::string& field) { if (mUseCache) { ValueCache::const_iterator it = mCache.find(field); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-04-16 16:55:15
|
Revision: 720 http://opde.svn.sourceforge.net/opde/?rev=720&view=rev Author: volca Date: 2008-04-16 09:54:39 -0700 (Wed, 16 Apr 2008) Log Message: ----------- A relic removed Modified Paths: -------------- trunk/src/base/dyntype/DTypeDef.h Modified: trunk/src/base/dyntype/DTypeDef.h =================================================================== --- trunk/src/base/dyntype/DTypeDef.h 2008-04-16 16:53:31 UTC (rev 719) +++ trunk/src/base/dyntype/DTypeDef.h 2008-04-16 16:54:39 UTC (rev 720) @@ -223,9 +223,6 @@ * @note The field name has to exist, and has to be a simple field (Not array/union/struct field) */ DTypeDef getFieldDef(const std::string& field); - /// Convert to a readable name from the internal field name @throws Exception if not found - std::string toLabel(const std::string& fname); - /** Field only - get the enumeration for the field */ const DEnumPtr getEnum(); @@ -358,6 +355,7 @@ * @param size The size of the data expected * @note for dynamic size types (variable length strings), the size should be the overall length of the data (32bits size + the data itself) */ DType(DTypeDefPtr type, FilePtr file, uint _size, bool useCache = false) : mType(type), mUseCache(useCache) { + /*// create enough room to hold the loaded data if (mType->size() < 0) { // dyn. size. we have to use the size // Size always has to be at least 4 bytes assert(_size >= sizeof(uint32_t)); @@ -380,7 +378,10 @@ assert(size() == _size); mData = mType->create(); file->read(mData, _size); - } + }*/ + mData = 0; + + read(file, _size); } /** Value setter. @@ -449,6 +450,36 @@ file->write(mData, size()); } + /** Deserializer. Reads the type data into this instance + * @param file The file pointer to read from */ + void read(FilePtr file, size_t _size) { + delete[] mData; + + if (mType->size() < 0) { // dyn. size. we have to use the size + // Size always has to be at least 4 bytes + assert(_size >= sizeof(uint32_t)); + + mData = new char[_size]; + + uint32_t size = 0; + + // Read the size + file->readElem(mData, sizeof(uint32_t)); + + size = *(reinterpret_cast<uint32_t*>(mData)); + + // inconsistency smells badly + assert(size == (_size - sizeof(uint32_t))); + + // Read the rest + file->read(&mData[sizeof(uint32_t)], size); + } else { + assert(size() == _size); + mData = mType->create(); + file->read(mData, _size); + } + } + /** Type getter. *@return Type pointer DTypeDefPtr. */ DTypeDefPtr type() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |