more work on serialization, work-in-progress

This commit is contained in:
erwin.coumans
2010-01-23 00:04:58 +00:00
parent 76eccc39fc
commit 0f707603f1
18 changed files with 700 additions and 344 deletions

View File

@@ -12,58 +12,57 @@ unsigned char sBulletDNAstr[]= {
109,95,108,111,99,97,108,83,99,97,108,105,110,103,0,109,95,105,109,112,
108,105,99,105,116,83,104,97,112,101,68,105,109,101,110,115,105,111,110,115,
0,109,95,99,111,108,108,105,115,105,111,110,77,97,114,103,105,110,0,109,
95,99,111,110,118,101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,
68,97,116,97,0,42,109,95,108,111,99,97,108,80,111,115,105,116,105,111,
110,65,114,114,97,121,80,116,114,0,42,109,95,114,97,100,105,65,114,114,
97,121,80,116,114,0,109,95,108,111,99,97,108,80,111,115,105,116,105,111,
110,65,114,114,97,121,83,105,122,101,0,109,95,114,97,100,105,65,114,114,
97,121,83,105,122,101,0,109,95,119,111,114,108,100,84,114,97,110,115,102,
111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,116,105,111,110,87,
111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,95,105,110,116,101,
114,112,111,108,97,116,105,111,110,76,105,110,101,97,114,86,101,108,111,99,
105,116,121,0,109,95,105,110,116,101,114,112,111,108,97,116,105,111,110,65,
110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,97,110,105,
115,111,116,114,111,112,105,99,70,114,105,99,116,105,111,110,0,109,95,104,
97,115,65,110,105,115,111,116,114,111,112,105,99,70,114,105,99,116,105,111,
110,0,109,95,99,111,110,116,97,99,116,80,114,111,99,101,115,115,105,110,
103,84,104,114,101,115,104,111,108,100,0,42,109,95,98,114,111,97,100,112,
104,97,115,101,72,97,110,100,108,101,0,42,109,95,99,111,108,108,105,115,
105,111,110,83,104,97,112,101,0,42,109,95,114,111,111,116,67,111,108,108,
105,115,105,111,110,83,104,97,112,101,0,109,95,99,111,108,108,105,115,105,
111,110,70,108,97,103,115,0,109,95,105,115,108,97,110,100,84,97,103,49,
0,109,95,99,111,109,112,97,110,105,111,110,73,100,0,109,95,97,99,116,
105,118,97,116,105,111,110,83,116,97,116,101,49,0,109,95,100,101,97,99,
116,105,118,97,116,105,111,110,84,105,109,101,0,109,95,102,114,105,99,116,
105,111,110,0,109,95,114,101,115,116,105,116,117,116,105,111,110,0,109,95,
105,110,116,101,114,110,97,108,84,121,112,101,0,42,109,95,117,115,101,114,
79,98,106,101,99,116,80,111,105,110,116,101,114,0,109,95,104,105,116,70,
114,97,99,116,105,111,110,0,109,95,99,99,100,83,119,101,112,116,83,112,
104,101,114,101,82,97,100,105,117,115,0,109,95,99,99,100,77,111,116,105,
111,110,84,104,114,101,115,104,111,108,100,0,109,95,99,104,101,99,107,67,
111,108,108,105,100,101,87,105,116,104,0,109,95,99,111,108,108,105,115,105,
111,110,79,98,106,101,99,116,68,97,116,97,0,109,95,105,110,118,73,110,
101,114,116,105,97,84,101,110,115,111,114,87,111,114,108,100,0,109,95,108,
105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,95,97,110,103,117,
108,97,114,86,101,108,111,99,105,116,121,0,109,95,105,110,118,101,114,115,
101,77,97,115,115,0,109,95,97,110,103,117,108,97,114,70,97,99,116,111,
114,0,109,95,108,105,110,101,97,114,70,97,99,116,111,114,0,109,95,103,
114,97,118,105,116,121,0,109,95,103,114,97,118,105,116,121,95,97,99,99,
101,108,101,114,97,116,105,111,110,0,109,95,105,110,118,73,110,101,114,116,
105,97,76,111,99,97,108,0,109,95,116,111,116,97,108,70,111,114,99,101,
0,109,95,116,111,116,97,108,84,111,114,113,117,101,0,109,95,108,105,110,
101,97,114,68,97,109,112,105,110,103,0,109,95,97,110,103,117,108,97,114,
68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111,110,97,108,
68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111,110,97,108,
68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95,97,100,100,105,
116,105,111,110,97,108,76,105,110,101,97,114,68,97,109,112,105,110,103,84,
104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,116,105,
111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,84,104,
114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,116,105,111,
110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,70,97,99,
116,111,114,0,109,95,108,105,110,101,97,114,83,108,101,101,112,105,110,103,
84,104,114,101,115,104,111,108,100,0,109,95,97,110,103,117,108,97,114,83,
108,101,101,112,105,110,103,84,104,114,101,115,104,111,108,100,0,0,0,0,
84,89,80,69,22,0,0,0,99,104,97,114,0,117,99,104,97,114,0,115,
95,112,111,115,0,109,95,114,97,100,105,117,115,0,109,95,99,111,110,118,
101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,68,97,116,97,0,
42,109,95,108,111,99,97,108,80,111,115,105,116,105,111,110,65,114,114,97,
121,80,116,114,0,109,95,108,111,99,97,108,80,111,115,105,116,105,111,110,
65,114,114,97,121,83,105,122,101,0,109,95,119,111,114,108,100,84,114,97,
110,115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,116,105,
111,110,87,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,95,105,
110,116,101,114,112,111,108,97,116,105,111,110,76,105,110,101,97,114,86,101,
108,111,99,105,116,121,0,109,95,105,110,116,101,114,112,111,108,97,116,105,
111,110,65,110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,
97,110,105,115,111,116,114,111,112,105,99,70,114,105,99,116,105,111,110,0,
109,95,104,97,115,65,110,105,115,111,116,114,111,112,105,99,70,114,105,99,
116,105,111,110,0,109,95,99,111,110,116,97,99,116,80,114,111,99,101,115,
115,105,110,103,84,104,114,101,115,104,111,108,100,0,42,109,95,98,114,111,
97,100,112,104,97,115,101,72,97,110,100,108,101,0,42,109,95,99,111,108,
108,105,115,105,111,110,83,104,97,112,101,0,42,109,95,114,111,111,116,67,
111,108,108,105,115,105,111,110,83,104,97,112,101,0,109,95,99,111,108,108,
105,115,105,111,110,70,108,97,103,115,0,109,95,105,115,108,97,110,100,84,
97,103,49,0,109,95,99,111,109,112,97,110,105,111,110,73,100,0,109,95,
97,99,116,105,118,97,116,105,111,110,83,116,97,116,101,49,0,109,95,100,
101,97,99,116,105,118,97,116,105,111,110,84,105,109,101,0,109,95,102,114,
105,99,116,105,111,110,0,109,95,114,101,115,116,105,116,117,116,105,111,110,
0,109,95,105,110,116,101,114,110,97,108,84,121,112,101,0,42,109,95,117,
115,101,114,79,98,106,101,99,116,80,111,105,110,116,101,114,0,109,95,104,
105,116,70,114,97,99,116,105,111,110,0,109,95,99,99,100,83,119,101,112,
116,83,112,104,101,114,101,82,97,100,105,117,115,0,109,95,99,99,100,77,
111,116,105,111,110,84,104,114,101,115,104,111,108,100,0,109,95,99,104,101,
99,107,67,111,108,108,105,100,101,87,105,116,104,0,109,95,99,111,108,108,
105,115,105,111,110,79,98,106,101,99,116,68,97,116,97,0,109,95,105,110,
118,73,110,101,114,116,105,97,84,101,110,115,111,114,87,111,114,108,100,0,
109,95,108,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,95,97,
110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,105,110,118,
101,114,115,101,77,97,115,115,0,109,95,97,110,103,117,108,97,114,70,97,
99,116,111,114,0,109,95,108,105,110,101,97,114,70,97,99,116,111,114,0,
109,95,103,114,97,118,105,116,121,0,109,95,103,114,97,118,105,116,121,95,
97,99,99,101,108,101,114,97,116,105,111,110,0,109,95,105,110,118,73,110,
101,114,116,105,97,76,111,99,97,108,0,109,95,116,111,116,97,108,70,111,
114,99,101,0,109,95,116,111,116,97,108,84,111,114,113,117,101,0,109,95,
108,105,110,101,97,114,68,97,109,112,105,110,103,0,109,95,97,110,103,117,
108,97,114,68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111,
110,97,108,68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111,
110,97,108,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95,97,
100,100,105,116,105,111,110,97,108,76,105,110,101,97,114,68,97,109,112,105,
110,103,84,104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,
105,116,105,111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,
103,84,104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,
116,105,111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,
70,97,99,116,111,114,0,109,95,108,105,110,101,97,114,83,108,101,101,112,
105,110,103,84,104,114,101,115,104,111,108,100,0,109,95,97,110,103,117,108,
97,114,83,108,101,101,112,105,110,103,84,104,114,101,115,104,111,108,100,0,
84,89,80,69,23,0,0,0,99,104,97,114,0,117,99,104,97,114,0,115,
104,111,114,116,0,117,115,104,111,114,116,0,105,110,116,0,108,111,110,103,
0,117,108,111,110,103,0,102,108,111,97,116,0,100,111,117,98,108,101,0,
118,111,105,100,0,98,116,83,99,97,108,97,114,0,80,111,105,110,116,101,
@@ -73,27 +72,28 @@ unsigned char sBulletDNAstr[]= {
97,0,98,116,84,114,97,110,115,102,111,114,109,68,97,116,97,0,98,116,
67,111,108,108,105,115,105,111,110,83,104,97,112,101,68,97,116,97,0,98,
116,67,111,110,118,101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,
68,97,116,97,0,98,116,77,117,108,116,105,83,112,104,101,114,101,83,104,
68,97,116,97,0,98,116,80,111,115,105,116,105,111,110,65,110,100,82,97,
100,105,117,115,0,98,116,77,117,108,116,105,83,112,104,101,114,101,83,104,
97,112,101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111,110,79,
98,106,101,99,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100,
121,68,97,116,97,0,0,0,84,76,69,78,1,0,1,0,2,0,2,0,
4,0,4,0,4,0,4,0,8,0,0,0,4,0,12,0,36,0,8,0,
16,0,48,0,64,0,12,0,52,0,68,0,-8,0,-32,1,83,84,82,67,
11,0,0,0,11,0,3,0,4,0,0,0,4,0,1,0,9,0,2,0,
12,0,3,0,11,0,3,0,11,0,4,0,11,0,5,0,13,0,2,0,
9,0,6,0,9,0,7,0,14,0,1,0,10,0,8,0,15,0,1,0,
14,0,9,0,16,0,2,0,15,0,10,0,14,0,11,0,17,0,3,0,
9,0,12,0,4,0,13,0,0,0,14,0,18,0,5,0,17,0,15,0,
14,0,16,0,14,0,17,0,10,0,18,0,0,0,14,0,19,0,5,0,
18,0,19,0,14,0,20,0,10,0,21,0,4,0,22,0,4,0,23,0,
20,0,23,0,16,0,24,0,16,0,25,0,14,0,26,0,14,0,27,0,
14,0,28,0,4,0,29,0,10,0,30,0,9,0,31,0,9,0,32,0,
17,0,33,0,4,0,34,0,4,0,35,0,4,0,36,0,4,0,37,0,
10,0,38,0,10,0,39,0,10,0,40,0,4,0,41,0,9,0,42,0,
10,0,43,0,10,0,44,0,10,0,45,0,4,0,46,0,21,0,21,0,
20,0,47,0,15,0,48,0,14,0,49,0,14,0,50,0,10,0,51,0,
14,0,52,0,14,0,53,0,14,0,54,0,14,0,55,0,14,0,56,0,
14,0,57,0,14,0,58,0,10,0,59,0,10,0,60,0,4,0,61,0,
10,0,62,0,10,0,63,0,10,0,64,0,10,0,65,0,10,0,66,0,
10,0,67,0,};
16,0,48,0,64,0,12,0,52,0,20,0,64,0,-8,0,-32,1,0,0,
83,84,82,67,12,0,0,0,11,0,3,0,4,0,0,0,4,0,1,0,
9,0,2,0,12,0,3,0,11,0,3,0,11,0,4,0,11,0,5,0,
13,0,2,0,9,0,6,0,9,0,7,0,14,0,1,0,10,0,8,0,
15,0,1,0,14,0,9,0,16,0,2,0,15,0,10,0,14,0,11,0,
17,0,3,0,9,0,12,0,4,0,13,0,0,0,14,0,18,0,5,0,
17,0,15,0,14,0,16,0,14,0,17,0,10,0,18,0,0,0,14,0,
19,0,2,0,14,0,19,0,10,0,20,0,20,0,4,0,18,0,21,0,
19,0,22,0,4,0,23,0,0,0,14,0,21,0,23,0,16,0,24,0,
16,0,25,0,14,0,26,0,14,0,27,0,14,0,28,0,4,0,29,0,
10,0,30,0,9,0,31,0,9,0,32,0,17,0,33,0,4,0,34,0,
4,0,35,0,4,0,36,0,4,0,37,0,10,0,38,0,10,0,39,0,
10,0,40,0,4,0,41,0,9,0,42,0,10,0,43,0,10,0,44,0,
10,0,45,0,4,0,46,0,22,0,21,0,21,0,47,0,15,0,48,0,
14,0,49,0,14,0,50,0,10,0,51,0,14,0,52,0,14,0,53,0,
14,0,54,0,14,0,55,0,14,0,56,0,14,0,57,0,14,0,58,0,
10,0,59,0,10,0,60,0,4,0,61,0,10,0,62,0,10,0,63,0,
10,0,64,0,10,0,65,0,10,0,66,0,10,0,67,0,};
int sBulletDNAlen= sizeof(sBulletDNAstr);

View File

@@ -37,6 +37,25 @@ public:
int m_number;
};
class btSerializer
{
public:
virtual const unsigned char* getBufferPointer() const = 0;
virtual int getCurrentBufferSize() const = 0;
virtual btChunk* allocate(size_t size, int numElements) = 0;
virtual void finalizeChunk(btChunk* chunk, const char* structType, int chunkCode,void* oldPtr) const = 0;
virtual void startSerialization() = 0;
virtual void finishSerialization() = 0;
};
#define BT_HEADER_LENGTH 12
@@ -50,11 +69,11 @@ public:
#define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y')
#define BT_BOXSHAPE_CODE MAKE_ID('B','O','X','S')
#define BT_SHAPE_CODE MAKE_ID('S','H','A','P')
#define BT_VECTOR3_CODE MAKE_ID('V','E','C','3')
#define BT_ARRAY_CODE MAKE_ID('A','R','A','Y')
class btDefaultSerializer
class btDefaultSerializer : public btSerializer
{
public:
btAlignedObjectArray<char*> mTypes;
btAlignedObjectArray<short*> mStructs;
@@ -68,52 +87,13 @@ public:
unsigned char* m_buffer;
int m_currentSize;
protected:
void* m_dna;
int m_dnaLength;
btDefaultSerializer(int totalSize)
:m_totalSize(totalSize),
m_currentSize(0),
m_dna(0),
m_dnaLength(0)
void writeDNA()
{
m_buffer = (unsigned char*)btAlignedAlloc(16,totalSize);
m_currentSize += BT_HEADER_LENGTH;
memcpy(m_buffer, "BULLET ", 7);
int endian= 1;
endian= ((char*)&endian)[0];
if (endian)
{
m_buffer[7] = '_';
} else
{
m_buffer[7] = '-';
}
if (sizeof(void*)==8)
{
m_buffer[8]='V';
} else
{
m_buffer[8]='v';
}
m_buffer[9] = '2';
m_buffer[10] = '7';
m_buffer[11] = '5';
}
virtual ~btDefaultSerializer()
{
btAlignedFree(m_buffer);
unsigned char* dnaTarget = m_buffer+m_currentSize;
memcpy(dnaTarget,m_dna,m_dnaLength);
m_currentSize += m_dnaLength;
}
int getReverseType(const char *type) const
@@ -127,33 +107,6 @@ public:
return -1;
}
void writeDNA()
{
unsigned char* dnaTarget = m_buffer+m_currentSize;
memcpy(dnaTarget,m_dna,m_dnaLength);
m_currentSize += m_dnaLength;
}
virtual btChunk* allocate(size_t size, int numElements)
{
unsigned char* ptr = m_buffer+m_currentSize;
m_currentSize += size*numElements+sizeof(btChunk);
unsigned char* data = ptr + sizeof(btChunk);
btChunk* chunk = (btChunk*)ptr;
chunk->m_chunkCode = 0;
chunk->m_oldPtr = data;
chunk->m_length = size*numElements;
chunk->m_number = numElements;
m_chunkPtrs.push_back(chunk);
return chunk;
}
void initDNA(const char* bdna,int dnalen)
{
///was already initialized
@@ -291,6 +244,119 @@ public:
}
}
public:
void* m_dna;
int m_dnaLength;
btDefaultSerializer(int totalSize)
:m_totalSize(totalSize),
m_currentSize(0),
m_dna(0),
m_dnaLength(0)
{
m_buffer = (unsigned char*)btAlignedAlloc(16,totalSize);
const bool VOID_IS_8 = ((sizeof(void*)==8));
if (VOID_IS_8)
{
//64bit not yet supported (soon)
btAssert(0);
return;
} else
{
initDNA((const char*)sBulletDNAstr,sBulletDNAlen);
}
}
virtual ~btDefaultSerializer()
{
btAlignedFree(m_buffer);
}
virtual void startSerialization()
{
m_currentSize = BT_HEADER_LENGTH;
memcpy(m_buffer, "BULLET ", 7);
int endian= 1;
endian= ((char*)&endian)[0];
if (endian)
{
m_buffer[7] = '_';
} else
{
m_buffer[7] = '-';
}
if (sizeof(void*)==8)
{
m_buffer[8]='V';
} else
{
m_buffer[8]='v';
}
m_buffer[9] = '2';
m_buffer[10] = '7';
m_buffer[11] = '5';
}
virtual void finishSerialization()
{
writeDNA();
}
virtual const unsigned char* getBufferPointer() const
{
return m_buffer;
}
virtual int getCurrentBufferSize() const
{
return m_currentSize;
}
virtual void finalizeChunk(btChunk* chunk, const char* structType, int chunkCode,void* oldPtr) const
{
chunk->m_dna_nr = getReverseType(structType);
chunk->m_chunkCode = chunkCode;
chunk->m_oldPtr = oldPtr;
}
virtual btChunk* allocate(size_t size, int numElements)
{
unsigned char* ptr = m_buffer+m_currentSize;
m_currentSize += size*numElements+sizeof(btChunk);
unsigned char* data = ptr + sizeof(btChunk);
btChunk* chunk = (btChunk*)ptr;
chunk->m_chunkCode = 0;
chunk->m_oldPtr = data;
chunk->m_length = size*numElements;
chunk->m_number = numElements;
m_chunkPtrs.push_back(chunk);
return chunk;
}
};