//----------------------------------------------------------------------------- /** \brief Serialization general interface. Serializer API works with: - primitive types: int, float, string, bool, vector - dynamic containers: array, set, map - static arrays - complex types: classes \note Serializer provides deep serialization (it serialize class memebers and their members etc). To avoid serialization of certain class variable, use NonSerialized attribute. \par usage: @code class MyData { int m_id; autoptr map m_values; [NonSerialized()] string m_dbg; // I don't want to serialize this variable } void Serialize(Serializer s) { int statArray[4] = {6,9,2,3}; array dynArray = {8,5,6,4}; autoptr MyData data = new MyData(); data.m_id = 965; data.m_values = map; data.m_values.Insert("value1", 5.98); data.m_values.Insert("value2", 4.36); s.Write(10); s.Write("Hello"); s.Write(statArray); s.Write(dynArray); s.Write(data); } void Deserialize(Serializer s) { int statArray[4]; array dynArray; MyData data; int someInt; string someString; s.Read(someInt); s.Read(someString); s.Read(statArray); s.Read(dynArray); s.Read(data); } @endcode */ class Serializer: Managed { proto bool Write(void value_out); proto bool Read(void value_in); proto native bool CanWrite(); proto native bool CanRead(); protected void Serializer() {} protected void ~Serializer() {} }; /** \brief Serializer API implementation for File IO. See Serializer for more info. \n usage: @code void TestSave() { FileSerializer file = new FileSerializer(); string names[3] = {"alpha", "beta", "gama"}; if (file.Open("test.save", FileMode.WRITE)) { file.Write(10); file.Write("lalala"); file.Write(name); file.Close(); } } void TestLoad() { FileSerializer file = new FileSerializer(); int intVal; string stringVal; string names[3]; if (file.Open("test.save", FileMode.READ)) { file.Read(intVal); file.Read(stringVal); file.Read(names); file.Close(); } } @endcode */ class FileSerializer: Serializer { void FileSerializer() {} void ~FileSerializer() {} proto native bool Open(string path, FileMode mode = FileMode.READ); proto native bool IsOpen(); proto native void Close(); }