void SerializeData(MegaloScriptModel model, IO.BitStream s, Proto.MegaloScriptValueType valueType) { var base_type = valueType.BaseType; switch (base_type) { case Proto.MegaloScriptValueBaseType.Int: s.Stream(ref Data, valueType.BitLength, signExtend: true); break; case Proto.MegaloScriptValueBaseType.UInt: case Proto.MegaloScriptValueBaseType.Var: s.Stream(ref Data, valueType.BitLength); break; case Proto.MegaloScriptValueBaseType.Enum: MegaloScriptEnumValue.SerializeValue(model, s, valueType, ref Data); break; case Proto.MegaloScriptValueBaseType.Index: MegaloScriptIndexValue.SerializeValue(model, s, valueType, ref Data); break; default: throw new KSoft.Debug.UnreachableException(base_type.ToString()); } }
void SerializeData <TDoc, TCursor>(MegaloScriptModel model, IO.TagElementStream <TDoc, TCursor, string> s, Proto.MegaloScriptValueType valueType) where TDoc : class where TCursor : class { var base_type = valueType.BaseType; switch (base_type) { case Proto.MegaloScriptValueBaseType.Int: case Proto.MegaloScriptValueBaseType.UInt: s.StreamCursor(ref Data); break; case Proto.MegaloScriptValueBaseType.Var: if ((model.TagElementStreamSerializeFlags & MegaloScriptModelTagElementStreamFlags.UseIndexNames) != 0) { var resolving_ctxt = new MegaloScriptModelVariableSet.IndexNameResolvingContext(model, valueType); s.StreamCursorIdAsString(ref Data, resolving_ctxt, MegaloScriptModelVariableSet.IndexNameResolvingContext.IdResolver, MegaloScriptModelVariableSet.IndexNameResolvingContext.NameResolver); } else { s.StreamCursor(ref Data); } break; case Proto.MegaloScriptValueBaseType.Enum: MegaloScriptEnumValue.SerializeValue(model, s, valueType, ref Data, IO.TagElementNodeType.Text); break; case Proto.MegaloScriptValueBaseType.Index: MegaloScriptIndexValue.SerializeValue(model, s, valueType, ref Data, IO.TagElementNodeType.Text); break; default: throw new KSoft.Debug.UnreachableException(base_type.ToString()); } }