CEL

Public API Reference

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 
00031 struct iCelPropertyClass;
00032 struct iCelEntity;
00033 struct iFile;
00034 struct celData;
00035 
00059 enum celPersistenceType
00060 {
00061   CEL_PERSIST_TYPE_UNDEF = 0,
00062   CEL_PERSIST_TYPE_RECORD,
00063   CEL_PERSIST_TYPE_RECORD_FIRST_PASS,
00064   CEL_PERSIST_TYPE_SERVER_CONTROL,
00065   CEL_PERSIST_TYPE_CLIENT_CONTROL,
00066   CEL_PERSIST_TYPE_SERVER_FORCING
00067 };
00068 
00084 enum celPersistenceResult
00085 {
00086   CEL_PERSIST_RESULT_UNDEF = 0,
00087   CEL_PERSIST_RESULT_OK,
00088   CEL_PERSIST_RESULT_CHEAT_SUSPICIOUS,
00089   CEL_PERSIST_RESULT_CHEAT_CLEAR,
00090   CEL_PERSIST_RESULT_ERROR,
00091   CEL_PERSIST_RESULT_UNKNOWN_PC
00092 };
00093 
00094 SCF_VERSION (iCelDataBuffer, 0, 0, 2);
00095 
00099 struct iCelDataBuffer : public iBase
00100 {
00106   virtual long GetSerialNumber () const = 0;
00107 
00111   virtual size_t GetDataCount () const = 0;
00112 
00116   virtual void Reset () = 0;
00117 
00121   virtual celData* GetData () = 0;
00122 
00126   virtual celData* GetData (size_t idx) = 0;
00127 
00131   virtual celData* AddData () = 0;
00132 
00134   virtual void Add (bool v) { AddData ()->Set (v); }
00135   virtual void Add (int8 v) { AddData ()->Set (v); }
00136   virtual void Add (int16 v) { AddData ()->Set (v); }
00137   virtual void Add (int32 v) { AddData ()->Set (v); }
00138   virtual void Add (uint8 v) { AddData ()->Set (v); }
00139   virtual void Add (uint16 v) { AddData ()->Set (v); }
00140   virtual void Add (uint32 v) { AddData ()->Set (v); }
00141   virtual void Add (float v) { AddData ()->Set (v); }
00142   virtual void Add (const csVector2& v) { AddData ()->Set (v); }
00143   virtual void Add (const csVector3& v) { AddData ()->Set (v); }
00144   virtual void Add (const csColor& v) { AddData ()->Set (v); }
00145   virtual void Add (const char* v) { AddData ()->Set (v); }
00146   virtual void Add (iCelPropertyClass* v) { AddData ()->Set (v); }
00147   virtual void Add (iCelEntity* v) { AddData ()->Set (v); }
00148   virtual void AddAction (const char* v) { AddData ()->SetAction (v); }
00149   virtual void AddIBase (iBase* v) { AddData ()->SetIBase (v); }
00150 
00152   virtual bool GetBool ()
00153   {
00154     celData* cd = GetData ();
00155     return (cd && cd->type == CEL_DATA_BOOL) ? cd->value.bo : false;
00156   }
00157   virtual int8 GetInt8 ()
00158   {
00159     celData* cd = GetData ();
00160     return (cd && cd->type == CEL_DATA_BYTE) ? cd->value.b : 0;
00161   }
00162   virtual uint8 GetUInt8 ()
00163   {
00164     celData* cd = GetData ();
00165     return (cd && cd->type == CEL_DATA_UBYTE) ? cd->value.ub : 0;
00166   }
00167   virtual int16 GetInt16 ()
00168   {
00169     celData* cd = GetData ();
00170     return (cd && cd->type == CEL_DATA_WORD) ? cd->value.w : 0;
00171   }
00172   virtual uint16 GetUInt16 ()
00173   {
00174     celData* cd = GetData ();
00175     return (cd && cd->type == CEL_DATA_UWORD) ? cd->value.uw : 0;
00176   }
00177   virtual int32 GetInt32 ()
00178   {
00179     celData* cd = GetData ();
00180     return (cd && cd->type == CEL_DATA_LONG) ? cd->value.l : 0;
00181   }
00182   virtual uint32 GetUInt32 ()
00183   {
00184     celData* cd = GetData ();
00185     return (cd && cd->type == CEL_DATA_ULONG) ? cd->value.ul : 0;
00186   }
00187   virtual float GetFloat ()
00188   {
00189     celData* cd = GetData ();
00190     return (cd && cd->type == CEL_DATA_FLOAT) ? cd->value.f : 0.0f;
00191   }
00192   virtual iString* GetString ()
00193   {
00194     celData* cd = GetData ();
00195     return (cd && cd->type == CEL_DATA_STRING) ? cd->value.s : (iString*)0;
00196   }
00197   virtual void GetVector2 (csVector2& v)
00198   {
00199     celData* cd = GetData ();
00200     if (cd && cd->type == CEL_DATA_VECTOR2)
00201     { v.x = cd->value.v.x; v.y = cd->value.v.y; }
00202     else v.x = v.y = 0;
00203   }
00204   virtual void GetVector3 (csVector3& v)
00205   {
00206     celData* cd = GetData ();
00207     if (cd && cd->type == CEL_DATA_VECTOR3)
00208     { v.x = cd->value.v.x; v.y = cd->value.v.y; v.z = cd->value.v.z; }
00209     else v.x = v.y = v.z = 0;
00210   }
00211   virtual void GetColor (csColor& v)
00212   {
00213     celData* cd = GetData ();
00214     if (cd && cd->type == CEL_DATA_COLOR)
00215     {
00216       v.red = cd->value.col.red;
00217       v.green = cd->value.col.green;
00218       v.blue = cd->value.col.blue;
00219     }
00220     else v.red = v.green= v.blue = 0;
00221   }
00222   virtual iCelPropertyClass* GetPC ()
00223   {
00224     celData* cd = GetData ();
00225     return (cd && cd->type == CEL_DATA_PCLASS)
00226         ? cd->value.pc
00227         : (iCelPropertyClass*)0;
00228   }
00229   virtual iCelEntity* GetEntity ()
00230   {
00231     celData* cd = GetData ();
00232     return (cd && cd->type == CEL_DATA_ENTITY)
00233         ? cd->value.ent
00234         : (iCelEntity*)0;
00235   }
00236   virtual iBase* GetIBase ()
00237   {
00238     celData* cd = GetData ();
00239     return (cd && cd->type == CEL_DATA_IBASE) ? cd->value.ibase : (iBase*)0;
00240   }
00241   virtual csString GetDebugInfo ()
00242   {
00243     if (GetDataCount () == 0) return "Data buffer: empty\n";
00244 
00245     csString txt = "Data buffer:\n";
00246     size_t i = 0, count = GetDataCount ();
00247     for ( ; i < count; i++)
00248       txt.AppendFmt("\t%s\n", GetData (i)->GetDebugInfo ().GetData ());
00249 
00250     return txt;
00251   }
00252 };
00253 
00254 SCF_VERSION (iCelPersistentDataList, 0, 0, 1);
00255 
00262 struct iCelPersistentDataList : public iBase
00263 {
00267   virtual size_t GetCount () const = 0;
00268 
00278   virtual bool GetPersistentData (size_t idx, csRef<iCelDataBuffer>& databuf, 
00279         csString& pc_name, csString& pc_tag) const = 0;
00280 
00290   virtual void AddPersistentData (csRef<iCelDataBuffer>& databuf, 
00291         csString& pc_name, csString& pc_tag) = 0;
00292 };
00293 
00294 SCF_VERSION (iCelLocalEntitySet, 0, 0, 1);
00295 
00303 struct iCelLocalEntitySet : public iBase
00304 {
00306   virtual size_t GetEntityCount () const = 0;
00307   
00309   virtual iCelEntity* GetEntity (size_t idx) const = 0;
00310 
00312   virtual void AddEntity (iCelEntity* entity) = 0;
00313 
00315   virtual bool IsLocal (iCelEntity* entity) = 0;
00317   virtual bool IsLocal (iCelPropertyClass* pc) = 0;
00318 
00324   virtual csPtr<iCelDataBuffer> SaveExternalEntity (iCelEntity* entity) = 0;
00325 
00331   virtual iCelEntity* FindExternalEntity (iCelDataBuffer* databuf) = 0;
00332 
00338   virtual csPtr<iCelDataBuffer> SaveExternalPC (iCelPropertyClass* pc) = 0;
00339 
00345   virtual iCelPropertyClass* FindExternalPC (iCelDataBuffer* databuf) = 0;
00346 };
00347 
00348 SCF_VERSION (iCelPersistence, 0, 1, 1);
00349 
00354 struct iCelPersistence : public iBase
00355 {
00365   virtual bool Load (iCelLocalEntitySet* set, const char* name) = 0;
00366 
00375   virtual bool Save (iCelLocalEntitySet* set, const char* name) = 0;
00376 
00384   virtual bool Load (iCelLocalEntitySet* set, iFile* file) = 0;
00385 
00392   virtual bool Save (iCelLocalEntitySet* set, iFile* file) = 0;
00393 };
00394 
00395 #endif // __CEL_PL_PERSIST__

Generated for CEL: Crystal Entity Layer by doxygen 1.4.7