Changeset 330 for trunk/src/mesh
- Timestamp:
- Mar 12, 2006 8:25:02 PM (18 years ago)
- Location:
- trunk/src/mesh
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/mesh/serializer.cc
r321 r330 15 15 // add object entry to reference count table 16 16 m_refCount[key] = 0; 17 18 /* 19 // handle mesh object embedded in field 20 if (obj->objectType() == RpObjectTypes[FIELD] ) { 21 addObject(((RpField*)obj)->getMeshId(), 22 ((RpField*)obj)->getMeshObj()); 23 printf("addObject: 24 } 25 */ 26 17 27 #ifdef DEBUG 18 28 printf("RpSerializer::addObject: obj name=%s, ptr=%x\n", key, (unsigned int)obj); … … 21 31 } 22 32 23 // 24 // Input: 25 // a byte stream of a serialized object 26 // RV-A-<object-type><numBytes>..... 27 // 28 /* 29 void 30 RpSerializer::addObject(const char* buf) 31 { 32 } 33 */ 33 void 34 RpSerializer::addObject(const char* key, RpSerializable* ptr) 35 { 36 37 m_objMap[key] = ptr; 38 m_refCount[key] = 0; 39 } 34 40 35 41 // … … 42 48 { 43 49 typeObjMap::iterator iter = m_objMap.find(name); 50 if (iter == m_objMap.end()) 51 // does not exist 52 return; 53 54 RpSerializable* obj = (*iter).second; 55 56 // handle RpField - update mesh ref count 57 if (obj->objectType() == RpObjectTypes[FIELD]) { 58 deleteObject( ((RpField*)obj)->getMeshId() ); 59 } 60 61 // decrement object's reference count 62 // if reference count is zero, free memory and remove entry in obj map 63 if ( (--(m_refCount[name])) == 0) { 64 delete obj; // free obj memory 65 m_objMap.erase(name); // erase entry in object map 66 m_refCount.erase(name); // erase entry in object map 67 } 68 69 return; 70 } 71 72 void 73 RpSerializer::deleteObject(RpSerializable* obj) 74 { 75 const char* name = obj->objectName(); 76 typeObjMap::iterator iter = m_objMap.find(name); 77 44 78 if (iter == m_objMap.end()) 45 79 // does not exist … … 60 94 61 95 void 62 RpSerializer::deleteObject(RpSerializable* obj)63 {64 const char* name = obj->objectName();65 typeObjMap::iterator iter = m_objMap.find(name);66 67 if (iter == m_objMap.end())68 // does not exist69 return;70 71 RpSerializable* obj_ptr = (*iter).second;72 73 // decrement object's reference count74 // if reference count is zero, free memory and remove entry in obj map75 if ( (--(m_refCount[name])) == 0) {76 delete obj_ptr; // free obj memory77 m_objMap.erase(name); // erase entry in object map78 m_refCount.erase(name); // erase entry in object map79 }80 81 return;82 }83 84 void85 96 RpSerializer::deleteAllObjects() 86 97 { … … 93 104 m_objMap.clear(); 94 105 m_refCount.clear(); 95 m_numObjects = 0;96 106 } 97 107 … … 100 110 { 101 111 deleteAllObjects(); 112 113 delete [] m_buf; 114 m_buf = 0; 102 115 } 103 116 … … 118 131 // object found, increment ref count 119 132 ++(m_refCount[objectName]); 133 134 // special handling of field object with link to mesh 135 RpSerializable* ptmp = (*iter).second; 136 if ( (ptmp->objectType() == RpObjectTypes[FIELD]) ) { 137 138 RpField* ftmp = (RpField*)ptmp; 139 140 // find mesh obj ptr in serializer 141 typeObjMap::iterator it = m_objMap.find(ftmp->getMeshId()); 142 if (it != m_objMap.end()) { //found mesh obj 143 ftmp->setMeshObj( ((*it).second) ); 144 ++(m_refCount[ftmp->getMeshId()]); 145 } 146 else { 147 RpAppendErr("RpSerializer::getObject: field without mesh data\n"); 148 RpPrintErr(); 149 } 150 } 120 151 121 152 // return pointer to object … … 155 186 156 187 // allocate memory 157 char* buf = new char[nbytes]; 158 if (buf == NULL) { 159 printf("RpSerializer::serialize(): failed to allocate mem\n"); 160 return buf; 161 } 162 163 writeHeader(buf, nbytes, "NO", "NO"); 188 if (m_buf) { 189 delete [] m_buf; 190 } 191 192 m_buf = new char[nbytes]; 193 if (m_buf == NULL) { 194 RpAppendErr("RpSerializer::serialize(): failed to allocate mem\n"); 195 RpPrintErr(); 196 return m_buf; 197 } 198 199 writeHeader(m_buf, nbytes, "NO", "NO"); 164 200 165 201 // call each object to serialize itself 166 char* ptr = buf + headerSize();202 char* ptr = m_buf + headerSize(); 167 203 168 204 typeObjMap::iterator iter; … … 176 212 177 213 // return pointer to buffer 178 return buf;214 return m_buf; 179 215 } 180 216 … … 330 366 331 367 } 368 -
trunk/src/mesh/serializer.h
r321 r330 5 5 #include <map> 6 6 #include <string> 7 #include "serializable.h" 7 8 #include "field.h" 8 #include " serializable.h"9 #include "util.h" 9 10 10 11 // … … 14 15 public: 15 16 16 RpSerializer() { };17 RpSerializer() { m_buf = 0; }; 17 18 18 19 // remove all objects, reset ref counts to zero. 20 // delete buffer memory so the caller does not need to 19 21 void clear(); 20 22 21 23 void addObject(RpSerializable* obj); 22 //void addObject(const char* buf);24 void addObject(const char* key, RpSerializable* obj); 23 25 24 26 void deleteObject(RpSerializable* obj); … … 78 80 typeRefCount m_refCount; 79 81 80 unsigned int m_numObjects; //? can get from map.size()82 char* m_buf; // tmp buffer for serialization 81 83 }; 82 84
Note: See TracChangeset
for help on using the changeset viewer.