public static void Serialize <TDoc, TCursor>(TagElementStream <TDoc, TCursor, string> s, ref Values.GroupTagData32 value) where TDoc : class where TCursor : class { bool reading = s.IsReading; var group_tag = reading ? null : value.TagString; var name = reading ? null : value.Name; var guid = reading ? Values.KGuid.Empty : value.Uuid; s.StreamAttribute("tag", ref group_tag); s.StreamAttributeOpt("guid", ref guid, Predicates.IsNotEmpty); s.StreamAttribute("name", ref name); if (reading) { value = new Values.GroupTagData32(group_tag, name, guid); } }
public BlobChunkHeader(Values.GroupTagData32 signature, int version, int dataSize = TypeExtensions.kNone, int flags = kFlagIsInitialized) { Signature = signature.ID; Size = kSizeOf; if (dataSize.IsNotNone()) { Size += dataSize; } Version = (short)version; Flags = (short)flags; }
static void StreamElements <TDoc, TCursor>(TagElementStream <TDoc, TCursor, string> s, ref Values.GroupTagData32[] tags) where TDoc : class where TCursor : class { const string k_element_name = "Group"; if (s.IsReading) { var list = new List <Values.GroupTagData32>(); foreach (var node in s.ElementsByName(k_element_name)) { using (s.EnterCursorBookmark(node)) { Values.GroupTagData32 data = null; Serialize(s, ref data); list.Add(data); } } tags = list.ToArray(); } else if (s.IsWriting) { foreach (Values.GroupTagData32 data in tags) { using (s.EnterCursorBookmark(k_element_name)) { var temp = data; // can't pass a foreach value by ref Serialize(s, ref temp); } } } }