physicallayer/persist.h
00001 /* 00002 Crystal Space Entity Layer 00003 Copyright (C) 2001 by Jorrit Tyberghein 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License as published by the Free Software Foundation; either 00008 version 2 of the License, or (at your option) any later version. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public 00016 License along with this library; if not, write to the Free 00017 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, 00018 MA 02111-1307, USA. 00019 */ 00020 00021 #ifndef __CEL_PL_PERSIST__ 00022 #define __CEL_PL_PERSIST__ 00023 00024 #include "cstypes.h" 00025 #include "csutil/scf.h" 00026 #include "csutil/util.h" 00027 #include "csutil/array.h" 00028 00029 #include "physicallayer/datatype.h" 00030 #include "celtool/stdparams.h" 00031 00032 struct iCelPropertyClass; 00033 struct iCelEntity; 00034 struct iFile; 00035 struct celData; 00036 00058 enum celPersistenceType 00059 { 00060 CEL_PERSIST_TYPE_UNDEF = 0, 00061 CEL_PERSIST_TYPE_RECORD, 00062 CEL_PERSIST_TYPE_RECORD_FIRST_PASS, 00063 CEL_PERSIST_TYPE_SERVER_CONTROL, 00064 CEL_PERSIST_TYPE_CLIENT_CONTROL, 00065 CEL_PERSIST_TYPE_SERVER_FORCING 00066 }; 00067 00081 enum celPersistenceResult 00082 { 00083 CEL_PERSIST_RESULT_UNDEF = 0, 00084 CEL_PERSIST_RESULT_OK, 00085 CEL_PERSIST_RESULT_CHEAT_SUSPICIOUS, 00086 CEL_PERSIST_RESULT_CHEAT_CLEAR, 00087 CEL_PERSIST_RESULT_ERROR, 00088 CEL_PERSIST_RESULT_UNKNOWN_PC 00089 }; 00090 00094 struct iCelDataBuffer : public virtual iBase 00095 { 00096 SCF_INTERFACE (iCelDataBuffer, 0, 0, 2); 00097 00103 virtual long GetSerialNumber () const = 0; 00104 00108 virtual size_t GetDataCount () const = 0; 00109 00113 virtual void Reset () = 0; 00114 00118 virtual celData* GetData () = 0; 00119 00123 virtual celData* GetData (size_t idx) = 0; 00124 00128 virtual celData* AddData () = 0; 00129 00131 virtual void Add (bool v) { AddData ()->Set (v); } 00132 virtual void Add (int8 v) { AddData ()->Set (v); } 00133 virtual void Add (int16 v) { AddData ()->Set (v); } 00134 virtual void Add (int32 v) { AddData ()->Set (v); } 00135 virtual void Add (uint8 v) { AddData ()->Set (v); } 00136 virtual void Add (uint16 v) { AddData ()->Set (v); } 00137 virtual void Add (uint32 v) { AddData ()->Set (v); } 00138 virtual void Add (float v) { AddData ()->Set (v); } 00139 virtual void Add (const csVector2& v) { AddData ()->Set (v); } 00140 virtual void Add (const csVector3& v) { AddData ()->Set (v); } 00141 virtual void Add (const csColor& v) { AddData ()->Set (v); } 00142 virtual void Add (const char* v) { AddData ()->Set (v); } 00143 virtual void Add (iCelPropertyClass* v) { AddData ()->Set (v); } 00144 virtual void Add (iCelEntity* v) { AddData ()->Set (v); } 00145 virtual void AddAction (const char* v) { AddData ()->SetAction (v); } 00146 virtual void AddIBase (iBase* v) { AddData ()->SetIBase (v); } 00147 00149 virtual bool GetBool () 00150 { 00151 celData* cd = GetData (); 00152 return (cd && cd->type == CEL_DATA_BOOL) ? cd->value.bo : false; 00153 } 00154 virtual int8 GetInt8 () 00155 { 00156 celData* cd = GetData (); 00157 return (cd && cd->type == CEL_DATA_BYTE) ? cd->value.b : 0; 00158 } 00159 virtual uint8 GetUInt8 () 00160 { 00161 celData* cd = GetData (); 00162 return (cd && cd->type == CEL_DATA_UBYTE) ? cd->value.ub : 0; 00163 } 00164 virtual int16 GetInt16 () 00165 { 00166 celData* cd = GetData (); 00167 return (cd && cd->type == CEL_DATA_WORD) ? cd->value.w : 0; 00168 } 00169 virtual uint16 GetUInt16 () 00170 { 00171 celData* cd = GetData (); 00172 return (cd && cd->type == CEL_DATA_UWORD) ? cd->value.uw : 0; 00173 } 00174 virtual int32 GetInt32 () 00175 { 00176 celData* cd = GetData (); 00177 return (cd && cd->type == CEL_DATA_LONG) ? cd->value.l : 0; 00178 } 00179 virtual uint32 GetUInt32 () 00180 { 00181 celData* cd = GetData (); 00182 return (cd && cd->type == CEL_DATA_ULONG) ? cd->value.ul : 0; 00183 } 00184 virtual float GetFloat () 00185 { 00186 celData* cd = GetData (); 00187 return (cd && cd->type == CEL_DATA_FLOAT) ? cd->value.f : 0.0f; 00188 } 00189 virtual iString* GetString () 00190 { 00191 celData* cd = GetData (); 00192 return (cd && cd->type == CEL_DATA_STRING) ? cd->value.s : (iString*)0; 00193 } 00194 virtual void GetVector2 (csVector2& v) 00195 { 00196 celData* cd = GetData (); 00197 if (cd && cd->type == CEL_DATA_VECTOR2) 00198 { v.x = cd->value.v.x; v.y = cd->value.v.y; } 00199 else v.x = v.y = 0; 00200 } 00201 virtual void GetVector3 (csVector3& v) 00202 { 00203 celData* cd = GetData (); 00204 if (cd && cd->type == CEL_DATA_VECTOR3) 00205 { v.x = cd->value.v.x; v.y = cd->value.v.y; v.z = cd->value.v.z; } 00206 else v.x = v.y = v.z = 0; 00207 } 00208 virtual void GetColor (csColor& v) 00209 { 00210 celData* cd = GetData (); 00211 if (cd && cd->type == CEL_DATA_COLOR) 00212 { 00213 v.red = cd->value.col.red; 00214 v.green = cd->value.col.green; 00215 v.blue = cd->value.col.blue; 00216 } 00217 else v.red = v.green= v.blue = 0; 00218 } 00219 virtual iCelPropertyClass* GetPC () 00220 { 00221 celData* cd = GetData (); 00222 return (cd && cd->type == CEL_DATA_PCLASS) 00223 ? cd->value.pc 00224 : (iCelPropertyClass*)0; 00225 } 00226 virtual iCelEntity* GetEntity () 00227 { 00228 celData* cd = GetData (); 00229 return (cd && cd->type == CEL_DATA_ENTITY) 00230 ? cd->value.ent 00231 : (iCelEntity*)0; 00232 } 00233 virtual iBase* GetIBase () 00234 { 00235 celData* cd = GetData (); 00236 return (cd && cd->type == CEL_DATA_IBASE) ? cd->value.ibase : (iBase*)0; 00237 } 00238 virtual csString GetDebugInfo () 00239 { 00240 if (GetDataCount () == 0) return "Data buffer: empty\n"; 00241 00242 csString txt = "Data buffer:\n"; 00243 size_t i = 0, count = GetDataCount (); 00244 for ( ; i < count; i++) 00245 txt.AppendFmt("\t%s\n", celParameterTools::GetDebugData (GetData (i)).GetData ()); 00246 00247 return txt; 00248 } 00249 }; 00250 00261 struct iCelCompactDataBufferWriter : public virtual iBase 00262 { 00263 SCF_INTERFACE (iCelCompactDataBufferWriter, 0, 0, 1); 00264 00265 virtual void AddBool (bool v) = 0; 00266 virtual void AddInt8 (int8 v) = 0; 00267 virtual void AddInt16 (int16 v) = 0; 00268 virtual void AddInt32 (int32 v) = 0; 00269 virtual void AddUInt8 (uint8 v) = 0; 00270 virtual void AddUInt16 (uint16 v) = 0; 00271 virtual void AddUInt32 (uint32 v) = 0; 00272 virtual void AddID (csStringID v) = 0; 00273 virtual void AddFloat (float v) = 0; 00274 virtual void AddVector2 (const csVector2& v) = 0; 00275 virtual void AddVector3 (const csVector3& v) = 0; 00276 virtual void AddVector4 (const csVector4& v) = 0; 00277 virtual void AddColor (const csColor& v) = 0; 00278 virtual void AddColor4 (const csColor4& v) = 0; 00279 // A string which is limited to 255 length. 00280 virtual void AddString8 (const char* s) = 0; 00281 // A string which is limited to 65535 length. 00282 virtual void AddString16 (const char* s) = 0; 00283 // An unlimited string. 00284 virtual void AddString32 (const char* s) = 0; 00285 00289 virtual const char* GetData () const = 0; 00293 virtual size_t GetSize () const = 0; 00294 }; 00295 00306 struct iCelCompactDataBufferReader : public virtual iBase 00307 { 00308 SCF_INTERFACE (iCelCompactDataBufferReader, 0, 0, 1); 00309 00310 virtual bool GetBool () = 0; 00311 virtual int8 GetInt8 () = 0; 00312 virtual int16 GetInt16 () = 0; 00313 virtual int32 GetInt32 () = 0; 00314 virtual uint8 GetUInt8 () = 0; 00315 virtual uint16 GetUInt16 () = 0; 00316 virtual uint32 GetUInt32 () = 0; 00317 virtual csStringID GetID () = 0; 00318 virtual float GetFloat () = 0; 00319 virtual void GetVector2 (csVector2& v) = 0; 00320 virtual void GetVector3 (csVector3& v) = 0; 00321 virtual void GetVector4 (csVector4& v) = 0; 00322 virtual void GetColor (csColor& v) = 0; 00323 virtual void GetColor (csColor4& v) = 0; 00325 virtual const char* GetString8 () = 0; 00326 virtual const char* GetString16 () = 0; 00327 virtual const char* GetString32 () = 0; 00328 }; 00329 00336 struct iCelPersistentDataList : public virtual iBase 00337 { 00338 SCF_INTERFACE (iCelPersistentDataList, 0, 0, 1); 00339 00343 virtual size_t GetCount () const = 0; 00344 00354 virtual bool GetPersistentData (size_t idx, csRef<iCelDataBuffer>& databuf, 00355 csString& pc_name, csString& pc_tag) const = 0; 00356 00366 virtual void AddPersistentData (csRef<iCelDataBuffer>& databuf, 00367 csString& pc_name, csString& pc_tag) = 0; 00368 }; 00369 00377 struct iCelLocalEntitySet : public virtual iBase 00378 { 00379 SCF_INTERFACE (iCelLocalEntitySet, 0, 0, 1); 00380 00382 virtual size_t GetEntityCount () const = 0; 00383 00385 virtual iCelEntity* GetEntity (size_t idx) const = 0; 00386 00388 virtual void AddEntity (iCelEntity* entity) = 0; 00389 00391 virtual bool IsLocal (iCelEntity* entity) = 0; 00393 virtual bool IsLocal (iCelPropertyClass* pc) = 0; 00394 00400 virtual csPtr<iCelDataBuffer> SaveExternalEntity (iCelEntity* entity) = 0; 00401 00407 virtual iCelEntity* FindExternalEntity (iCelDataBuffer* databuf) = 0; 00408 00414 virtual csPtr<iCelDataBuffer> SaveExternalPC (iCelPropertyClass* pc) = 0; 00415 00421 virtual iCelPropertyClass* FindExternalPC (iCelDataBuffer* databuf) = 0; 00422 }; 00423 00428 struct iCelPersistence : public virtual iBase 00429 { 00430 SCF_INTERFACE (iCelPersistence, 0, 1, 1); 00431 00441 virtual bool Load (iCelLocalEntitySet* set, const char* name) = 0; 00442 00451 virtual bool Save (iCelLocalEntitySet* set, const char* name) = 0; 00452 00460 virtual bool Load (iCelLocalEntitySet* set, iFile* file) = 0; 00461 00468 virtual bool Save (iCelLocalEntitySet* set, iFile* file) = 0; 00469 }; 00470 00471 #endif // __CEL_PL_PERSIST__
Generated for CEL: Crystal Entity Layer 2.1 by doxygen 1.6.1
