Add new demos to cmake: SerializeDemo and InternalEdgeDemo

Fix in btShapeHull for previous commit
Add support to serialize name for objects
Updated serialization structures.
This commit is contained in:
erwin.coumans
2010-02-04 01:07:07 +00:00
parent 43d82fc20c
commit 58c5630d7f
13 changed files with 481 additions and 420 deletions

View File

@@ -33,6 +33,20 @@ extern int sBulletDNAlen;
extern unsigned char sBulletDNAstr64[];
extern int sBulletDNAlen64;
SIMD_FORCE_INLINE int btStrLen(const char* str)
{
if (!str)
return(0);
int len = 0;
while (*str != 0)
{
str++;
len++;
}
return len;
}
class btChunk
@@ -64,6 +78,12 @@ public:
virtual void finishSerialization() = 0;
virtual const char* findNameForPointer(const void* ptr) const = 0;
virtual void registerNameForPointer(const void* ptr, const char* name) = 0;
virtual void serializeName(const char* ptr) = 0;
};
@@ -96,6 +116,9 @@ class btDefaultSerializer : public btSerializer
btHashMap<btHashPtr,void*> m_chunkP;
btHashMap<btHashPtr,const char*> m_nameMap;
int m_totalSize;
unsigned char* m_buffer;
@@ -446,9 +469,44 @@ public:
return chunk;
}
virtual const char* findNameForPointer(const void* ptr) const
{
const char*const * namePtr = m_nameMap.find(ptr);
if (namePtr && *namePtr)
return *namePtr;
return 0;
}
virtual void registerNameForPointer(const void* ptr, const char* name)
{
m_nameMap.insert(ptr,name);
}
virtual void serializeName(const char* name)
{
if (name)
{
int len = btStrLen(name);
if (len)
{
int newLen = len+1;
int padding = ((newLen+3)&~3)-newLen;
newLen += padding;
//serialize name string now
btChunk* chunk = allocate(sizeof(char),newLen);
char* destinationName = (char*)chunk->m_oldPtr;
for (int i=0;i<len;i++)
{
destinationName[i] = name[i];
}
destinationName[len] = 0;
finalizeChunk(chunk,"char",BT_ARRAY_CODE,(void*)name);
}
}
}
};