Bullet Collision Detection & Physics Library
bFile.h
Go to the documentation of this file.
1 /*
2 bParse
3 Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
4 
5 This software is provided 'as-is', without any express or implied warranty.
6 In no event will the authors be held liable for any damages arising from the use of this software.
7 Permission is granted to anyone to use this software for any purpose,
8 including commercial applications, and to alter it and redistribute it freely,
9 subject to the following restrictions:
10 
11 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
12 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
13 3. This notice may not be removed or altered from any source distribution.
14 */
15 
16 #ifndef __BFILE_H__
17 #define __BFILE_H__
18 
19 #include "bCommon.h"
20 #include "bChunk.h"
21 #include <stdio.h>
22 
23 namespace bParse {
24 
25  // ----------------------------------------------------- //
27  {
29  FD_OK =1,
38  };
39 
41  {
46  };
47  // ----------------------------------------------------- //
48  class bFile
49  {
50  protected:
51 
52  char m_headerString[7];
53 
55  char* mFileBuffer;
56  int mFileLen;
57  int mVersion;
58 
59 
61 
65 
68 
71 
72  //
73 
75 
76 
77  int mFlags;
78 
79  // ////////////////////////////////////////////////////////////////////////////
80 
81  // buffer offset util
82  int getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags);
83  void safeSwapPtr(char *dst, const char *src);
84 
85  virtual void parseHeader();
86 
87  virtual void parseData() = 0;
88 
90  void resolvePointersChunk(const bChunkInd& dataChunk, int verboseMode);
91 
92  int resolvePointersStructRecursive(char *strcPtr, int old_dna, int verboseMode, int recursion);
93  //void swapPtr(char *dst, char *src);
94 
95  void parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers);
96  void getMatchingFileDNA(short* old, const char* lookupName, const char* lookupType, char *strcData, char *data, bool fixupPointers);
97  char* getFileElement(short *firstStruct, char *lookupName, char *lookupType, char *data, short **foundPos);
98 
99 
100  void swap(char *head, class bChunkInd& ch, bool ignoreEndianFlag);
101  void swapData(char *data, short type, int arraySize, bool ignoreEndianFlag);
102  void swapStruct(int dna_nr, char *data, bool ignoreEndianFlag);
103  void swapLen(char *dataPtr);
104  void swapDNA(char* ptr);
105 
106 
107  char* readStruct(char *head, class bChunkInd& chunk);
108  char *getAsString(int code);
109 
110  virtual void parseInternal(int verboseMode, char* memDna,int memDnaLength);
111 
112  public:
113  bFile(const char *filename, const char headerString[7]);
114 
115  //todo: make memoryBuffer const char
116  //bFile( const char *memoryBuffer, int len);
117  bFile( char *memoryBuffer, int len, const char headerString[7]);
118  virtual ~bFile();
119 
121  {
122  return mFileDNA;
123  }
124 
125  virtual void addDataBlock(char* dataBlock) = 0;
126 
127  int getFlags() const
128  {
129  return mFlags;
130  }
131 
133  {
134  mFlags |= FD_FILEDNA_IS_MEMDNA;
135  }
136 
138  {
139  return mLibPointers;
140  }
141 
142  void* findLibPointer(void *ptr);
143 
144  bool ok();
145 
146  virtual void parse(int verboseMode) = 0;
147 
148  virtual int write(const char* fileName, bool fixupPointers=false) = 0;
149 
150  virtual void writeChunks(FILE* fp, bool fixupPointers );
151 
152  virtual void writeDNA(FILE* fp) = 0;
153 
154  void updateOldPointers();
155  void resolvePointers(int verboseMode);
156 
157  void dumpChunks(bDNA* dna);
158 
159  virtual void setFileDNA(int verboseMode, char* buffer, int len);
160 
161  int getVersion() const
162  {
163  return mVersion;
164  }
165  //pre-swap the endianness, so that data loaded on a target with different endianness doesn't need to be swapped
166  void preSwap();
167  void writeFile(const char* fileName);
168 
169 
170 
171  };
172 }
173 
174 
175 #endif//__BFILE_H__
int getVersion() const
Definition: bFile.h:161
virtual void writeDNA(FILE *fp)=0
void resolvePointersChunk(const bChunkInd &dataChunk, int verboseMode)
this loop only works fine if the Blender DNA structure of the file matches the headerfiles ...
Definition: bFile.cpp:1245
btAlignedObjectArray< char * > m_pointerPtrFixupArray
Definition: bFile.h:67
int getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags)
Definition: bFile.cpp:1657
bDNA * mMemoryDNA
Definition: bFile.h:64
char * readStruct(char *head, class bChunkInd &chunk)
Definition: bFile.cpp:673
virtual void parseData()=0
virtual void parseInternal(int verboseMode, char *memDna, int memDnaLength)
Definition: bFile.cpp:202
virtual int write(const char *fileName, bool fixupPointers=false)=0
virtual void addDataBlock(char *dataBlock)=0
char * mFileBuffer
Definition: bFile.h:55
void swapDNA(char *ptr)
Definition: bFile.cpp:405
void dumpChunks(bDNA *dna)
Definition: bFile.cpp:1546
bFileFlags
Definition: bFile.h:26
int resolvePointersStructRecursive(char *strcPtr, int old_dna, int verboseMode, int recursion)
Definition: bFile.cpp:1262
bFile(const char *filename, const char headerString[7])
Definition: bFile.cpp:55
bDNA * getFileDNA()
Definition: bFile.h:120
void swapLen(char *dataPtr)
Definition: bFile.cpp:355
void setFileDNAisMemoryDNA()
Definition: bFile.h:132
void preSwap()
Definition: bFile.cpp:590
btAlignedObjectArray< char * > m_pointerFixupArray
Definition: bFile.h:66
void resolvePointers(int verboseMode)
Resolve pointers replaces the original pointers in structures, and linked lists by the new in-memory ...
Definition: bFile.cpp:1474
void swapStruct(int dna_nr, char *data, bool ignoreEndianFlag)
Definition: bFile.cpp:1130
void parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers)
Definition: bFile.cpp:798
bFileVerboseMode
Definition: bFile.h:40
int mFlags
Definition: bFile.h:77
void safeSwapPtr(char *dst, const char *src)
Definition: bFile.cpp:955
virtual void parseHeader()
Definition: bFile.cpp:130
void writeFile(const char *fileName)
Definition: bFile.cpp:583
int mFileLen
Definition: bFile.h:56
virtual void parse(int verboseMode)=0
virtual ~bFile()
Definition: bFile.cpp:112
char * getAsString(int code)
int mDataStart
Definition: bFile.h:62
bPtrMap mDataPointers
Definition: bFile.h:74
bPtrMap & getLibPointers()
Definition: bFile.h:137
int mVersion
Definition: bFile.h:57
btAlignedObjectArray< bChunkInd > m_chunks
Definition: bFile.h:69
virtual void setFileDNA(int verboseMode, char *buffer, int len)
Definition: bFile.cpp:190
void getMatchingFileDNA(short *old, const char *lookupName, const char *lookupType, char *strcData, char *data, bool fixupPointers)
Definition: bFile.cpp:1014
virtual void writeChunks(FILE *fp, bool fixupPointers)
Definition: bFile.cpp:1593
void * findLibPointer(void *ptr)
Definition: bFile.cpp:1526
void swapData(char *data, short type, int arraySize, bool ignoreEndianFlag)
Definition: bFile.cpp:922
char m_headerString[7]
Definition: bFile.h:52
char * getFileElement(short *firstStruct, char *lookupName, char *lookupType, char *data, short **foundPos)
Definition: bFile.cpp:1101
bDNA * mFileDNA
Definition: bFile.h:63
void swap(char *head, class bChunkInd &ch, bool ignoreEndianFlag)
Definition: bFile.cpp:326
int getFlags() const
Definition: bFile.h:127
bPtrMap mLibPointers
Definition: bFile.h:60
bool ok()
Definition: bFile.cpp:185
void updateOldPointers()
Definition: bFile.cpp:1536
btHashMap< btHashPtr, bChunkInd > m_chunkPtrPtrMap
Definition: bFile.h:70
bool mOwnsBuffer
Definition: bFile.h:54
void resolvePointersMismatch()
Definition: bFile.cpp:1177