public Database(string dbName) { name = dbName; version = Global.Version.VERSION_LATEST; }
public Database() { name = ""; version = Global.Version.VERSION_INVALID; }
public Database(string dbName, Global.Version ver) { name = dbName; version = ver; }
public void Read(ref Buffer buffer) { version = (Global.Version)buffer.ReadBytesShort(); if (version == Global.Version.VERSION_INVALID) { throw new ArgumentOutOfRangeException("version", "Invalid database version!"); } if (version > Global.Version.VERSION_LATEST) { throw new ArgumentOutOfRangeException("version", "Unsupported version!"); } switch (version) { case Global.Version.VERSION_1_0: name = buffer.ReadBytesString(); buffer.AddOffset(sizeof(uint)); //we skip the size (don't need it) ushort objectCount = (ushort)buffer.ReadBytesShort(); for (ushort i = 0; i < objectCount; i++) { Object obj = new Object(); obj.Read(ref buffer); AddObject(obj); } break; case Global.Version.VERSION_2_0: name = buffer.ReadBytesString(); uint checksum = (uint)buffer.ReadBytesInt32(); uint p = buffer.Position; uint size = (uint)buffer.ReadBytesInt32() - sizeof(short) - sizeof(short) - (uint)name.Length - sizeof(uint); if (crc32(buffer.Data, p, size) != checksum) { throw new ArgumentOutOfRangeException("crc32", "Checksum mismatch!"); } // objectCount already defined in case VERSION_1_0 objectCount = (ushort)buffer.ReadBytesShort(); for (ushort i = 0; i < objectCount; i++) { Object obj = new Object(); obj.Read(ref buffer); AddObject(obj); } break; default: throw new ArgumentOutOfRangeException("version", "Invalid database version!"); } }