public static void write(adata.zero_copy_buffer stream, vec3 value) { UInt64 tag = 7; adata.stream.write(stream, tag); if (stream.error()) { return; } adata.stream.write(stream, size_of(value)); if (stream.error()) { return; } { adata.stream.write(stream, value.x); { if (stream.error()) { stream.trace_error("x", -1); return; } } } { adata.stream.write(stream, value.y); { if (stream.error()) { stream.trace_error("y", -1); return; } } } { adata.stream.write(stream, value.z); { if (stream.error()) { stream.trace_error("z", -1); return; } } } return; }
public static void write(adata.zero_copy_buffer stream, item value) { UInt64 tag = 7; adata.stream.write(stream, tag); if (stream.error()) { return; } adata.stream.write(stream, size_of(value)); if (stream.error()) { return; } { adata.stream.write(stream, value.id); { if (stream.error()) { stream.trace_error("id", -1); return; } } } { adata.stream.write(stream, value.type); { if (stream.error()) { stream.trace_error("type", -1); return; } } } { adata.stream.write(stream, value.level); { if (stream.error()) { stream.trace_error("level", -1); return; } } } return; }
public static void skip_read(adata.zero_copy_buffer stream, ref vec3 value) { int offset = stream.read_length(); UInt64 tag = 0; adata.stream.read(stream, ref tag); if (stream.error()) { return; } Int32 len_tag = 0; adata.stream.read(stream, ref len_tag); if (stream.error()) { return; } if ((tag & 1) > 0) { float dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error()) { stream.trace_error("x", -1); return; } } } if ((tag & 2) > 0) { float dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error()) { stream.trace_error("y", -1); return; } } } if ((tag & 4) > 0) { float dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error()) { stream.trace_error("z", -1); return; } } } if (len_tag >= 0) { UInt32 read_len = (UInt32)(stream.read_length() - offset); UInt32 len = (UInt32)len_tag; if (len > read_len) { stream.skip_read(len - read_len); } } }
public static void read(adata.zero_copy_buffer stream, ref item value) { int offset = stream.read_length(); UInt64 tag = 0; adata.stream.read(stream, ref tag); if (stream.error()) { return; } Int32 len_tag = 0; adata.stream.read(stream, ref len_tag); if (stream.error()) { return; } if ((tag & 1) > 0) { adata.stream.read(stream, ref value.id); { if (stream.error()) { stream.trace_error("id", -1); return; } } } if ((tag & 2) > 0) { adata.stream.read(stream, ref value.type); { if (stream.error()) { stream.trace_error("type", -1); return; } } } if ((tag & 4) > 0) { adata.stream.read(stream, ref value.level); { if (stream.error()) { stream.trace_error("level", -1); return; } } } if (len_tag >= 0) { UInt32 read_len = (UInt32)(stream.read_length() - offset); UInt32 len = (UInt32)len_tag; if (len > read_len) { stream.skip_read(len - read_len); } } }
public static void write(adata.zero_copy_buffer stream, quest value) { UInt64 tag = 1; if (value.name.Length > 0) { tag |= 2; } if (value.description.Length > 0) { tag |= 4; } adata.stream.write(stream, tag); if (stream.error()) { return; } adata.stream.write(stream, size_of(value)); if (stream.error()) { return; } { adata.stream.write(stream, value.id); { if (stream.error()) { stream.trace_error("id", -1); return; } } } if ((tag & 2) > 0) { UInt32 len3 = (UInt32)value.name.Length; adata.stream.write(stream, len3); adata.stream.write(stream, value.name, len3); { if (stream.error()) { stream.trace_error("name", -1); return; } } } if ((tag & 4) > 0) { UInt32 len3 = (UInt32)value.description.Length; adata.stream.write(stream, len3); adata.stream.write(stream, value.description, len3); { if (stream.error()) { stream.trace_error("description", -1); return; } } } return; }
public static void skip_read(adata.zero_copy_buffer stream, ref quest value) { int offset = stream.read_length(); UInt64 tag = 0; adata.stream.read(stream, ref tag); if (stream.error()) { return; } Int32 len_tag = 0; adata.stream.read(stream, ref len_tag); if (stream.error()) { return; } if ((tag & 1) > 0) { Int32 dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error()) { stream.trace_error("id", -1); return; } } } if ((tag & 2) > 0) { UInt32 len3 = adata.stream.check_read_size(stream); { if (stream.error()) { stream.trace_error("name", -1); return; } } stream.skip_read(len3); { if (stream.error()) { stream.trace_error("name", -1); return; } } } if ((tag & 4) > 0) { UInt32 len3 = adata.stream.check_read_size(stream); { if (stream.error()) { stream.trace_error("description", -1); return; } } stream.skip_read(len3); { if (stream.error()) { stream.trace_error("description", -1); return; } } } if (len_tag >= 0) { UInt32 read_len = (UInt32)(stream.read_length() - offset); UInt32 len = (UInt32)len_tag; if (len > read_len) { stream.skip_read(len - read_len); } } }
static void Main(string[] args) { PlayerComparer plyCmp = new PlayerComparer(); var pv1 = new my.game.player_v1(); pv1.id = 1; pv1.age = 22; pv1.factor = 2.0f; pv1.name = "pv1"; var itm = new my.game.item(); itm.id = 11; itm.level = 321110; itm.type = 3; pv1.inventory.Add(itm); itm = new my.game.item(); itm.id = 12; pv1.inventory.Add(itm); var qst = new my.game.quest(); qst.id = 50; qst.name = "quest1"; qst.description = "There are something unusual..."; pv1.quests.Add(qst); var bytes = new byte[4096]; var stream = new adata.zero_copy_buffer(bytes); Int32 buf_len = 0; // serialize buf_len = my.game.player_stream.size_of(pv1); my.game.player_stream.write(stream, pv1); Debug.Assert(!stream.error(), stream.get_error_msg()); var pv1_other = new my.game.player_v1(); // deserialize my.game.player_stream.read(stream, ref pv1_other); Debug.Assert(!stream.error(), stream.get_error_msg()); Debug.Assert(plyCmp.Equals(pv1, pv1_other)); stream.clear(); var pv2 = new my.game.player_v2(); // forward compat (old data, new struct) my.game.player_stream.read(stream, ref pv2); Debug.Assert(!stream.error(), stream.get_error_msg()); Debug.Assert(plyCmp.Equals(pv1, pv2)); stream.clear(); pv1 = new my.game.player_v1(); // backward compat (new data, old struct) pv2.id = 6543; pv2.name = "pv2"; pv2.friends.Add(2); pv2.friends.Add(100); buf_len = my.game.player_stream.size_of(pv2); my.game.player_stream.write(stream, pv2); Debug.Assert(!stream.error(), stream.get_error_msg()); my.game.player_stream.read(stream, ref pv1); Debug.Assert(!stream.error(), stream.get_error_msg()); Debug.Assert(plyCmp.Equals(pv1, pv2)); Console.WriteLine("done."); }
public static void write(adata.zero_copy_buffer stream, player_v2 value) { UInt64 tag = 9; if (value.name.Length > 0) { tag |= 2; } if (value.inventory.Count > 0) { tag |= 16; } if (value.quests.Count > 0) { tag |= 32; } if (value.friends.Count > 0) { tag |= 128; } adata.stream.write(stream, tag); if (stream.error()) { return; } adata.stream.write(stream, size_of(value)); if (stream.error()) { return; } { adata.stream.write(stream, value.id); { if (stream.error()) { stream.trace_error("id", -1); return; } } } if ((tag & 2) > 0) { UInt32 len3 = (UInt32)value.name.Length; adata.stream.write(stream, len3); adata.stream.write(stream, value.name, len3); { if (stream.error()) { stream.trace_error("name", -1); return; } } } //value.age deleted , skip write. { util.vec3_stream.write(stream, value.pos); { if (stream.error()) { stream.trace_error("pos", -1); return; } } } if ((tag & 16) > 0) { UInt32 len3 = (UInt32)value.inventory.Count; adata.stream.write(stream, len3); int count = 0; foreach (item i in value.inventory) { { write(stream, i); } { if (stream.error()) { stream.trace_error("inventory", count); return; } } ++count; } } if ((tag & 32) > 0) { UInt32 len3 = (UInt32)value.quests.Count; adata.stream.write(stream, len3); int count = 0; foreach (my.game.quest i in value.quests) { { my.game.quest_stream.write(stream, i); } { if (stream.error()) { stream.trace_error("quests", count); return; } } ++count; } } //value.factor deleted , skip write. if ((tag & 128) > 0) { UInt32 len3 = (UInt32)value.friends.Count; adata.stream.write(stream, len3); int count = 0; foreach (Int32 i in value.friends) { { adata.stream.write(stream, i); } { if (stream.error()) { stream.trace_error("friends", count); return; } } ++count; } } return; }
public static void skip_read(adata.zero_copy_buffer stream, ref player_v2 value) { int offset = stream.read_length(); UInt64 tag = 0; adata.stream.read(stream, ref tag); if (stream.error()) { return; } Int32 len_tag = 0; adata.stream.read(stream, ref len_tag); if (stream.error()) { return; } if ((tag & 1) > 0) { Int32 dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error()) { stream.trace_error("id", -1); return; } } } if ((tag & 2) > 0) { UInt32 len3 = adata.stream.check_read_size(stream, 30); { if (stream.error()) { stream.trace_error("name", -1); return; } } stream.skip_read(len3); { if (stream.error()) { stream.trace_error("name", -1); return; } } } if ((tag & 4) > 0) { Int32 dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error()) { stream.trace_error("age", -1); return; } } } if ((tag & 8) > 0) { util.vec3 dummy_value = null; util.vec3_stream.skip_read(stream, ref dummy_value); { if (stream.error()) { stream.trace_error("pos", -1); return; } } } if ((tag & 16) > 0) { UInt32 len3 = adata.stream.check_read_size(stream); { if (stream.error()) { stream.trace_error("inventory", -1); return; } } for (int i = 0; i < len3; ++i) { { item dummy_value = null; skip_read(stream, ref dummy_value); } { if (stream.error()) { stream.trace_error("inventory", (int)i); return; } } } } if ((tag & 32) > 0) { UInt32 len3 = adata.stream.check_read_size(stream); { if (stream.error()) { stream.trace_error("quests", -1); return; } } for (int i = 0; i < len3; ++i) { { my.game.quest dummy_value = null; my.game.quest_stream.skip_read(stream, ref dummy_value); } { if (stream.error()) { stream.trace_error("quests", (int)i); return; } } } } if ((tag & 64) > 0) { float dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error()) { stream.trace_error("factor", -1); return; } } } if ((tag & 128) > 0) { UInt32 len3 = adata.stream.check_read_size(stream); { if (stream.error()) { stream.trace_error("friends", -1); return; } } for (int i = 0; i < len3; ++i) { { Int32 dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); } { if (stream.error()) { stream.trace_error("friends", (int)i); return; } } } } if (len_tag >= 0) { UInt32 read_len = (UInt32)(stream.read_length() - offset); UInt32 len = (UInt32)len_tag; if (len > read_len) { stream.skip_read(len - read_len); } } }
public static void read(adata.zero_copy_buffer stream, ref player_v1 value) { int offset = stream.read_length(); UInt64 tag = 0; adata.stream.read(stream, ref tag); if (stream.error()) { return; } Int32 len_tag = 0; adata.stream.read(stream, ref len_tag); if (stream.error()) { return; } if ((tag & 1) > 0) { adata.stream.read(stream, ref value.id); { if (stream.error()) { stream.trace_error("id", -1); return; } } } if ((tag & 2) > 0) { UInt32 len3 = adata.stream.check_read_size(stream, 30); { if (stream.error()) { stream.trace_error("name", -1); return; } } adata.stream.read(stream, ref value.name, len3); { if (stream.error()) { stream.trace_error("name", -1); return; } } } if ((tag & 4) > 0) { adata.stream.read(stream, ref value.age); { if (stream.error()) { stream.trace_error("age", -1); return; } } } if ((tag & 8) > 0) { util.vec3_stream.read(stream, ref value.pos); { if (stream.error()) { stream.trace_error("pos", -1); return; } } } if ((tag & 16) > 0) { UInt32 len3 = adata.stream.check_read_size(stream); { if (stream.error()) { stream.trace_error("inventory", -1); return; } } for (int i = 0; i < len3; ++i) { item element = new item(); { read(stream, ref element); } value.inventory.Add(element); { if (stream.error()) { stream.trace_error("inventory", (int)i); return; } } } } if ((tag & 32) > 0) { UInt32 len3 = adata.stream.check_read_size(stream); { if (stream.error()) { stream.trace_error("quests", -1); return; } } for (int i = 0; i < len3; ++i) { my.game.quest element = new my.game.quest(); { my.game.quest_stream.read(stream, ref element); } value.quests.Add(element); { if (stream.error()) { stream.trace_error("quests", (int)i); return; } } } } if ((tag & 64) > 0) { adata.stream.read(stream, ref value.factor); { if (stream.error()) { stream.trace_error("factor", -1); return; } } } if (len_tag >= 0) { UInt32 read_len = (UInt32)(stream.read_length() - offset); UInt32 len = (UInt32)len_tag; if (len > read_len) { stream.skip_read(len - read_len); } } }