public CKTrait ReadCKTrait() { var stateT = TraitPool.TryRead(out var t); if (!stateT.Success) { var stateC = TraitContextPool.TryRead(out var ctx); if (!stateC.Success) { stateC.SetReadResult(ctx = CKTraitContext.Read(Reader)); } stateT.SetReadResult(t = ctx.FindOrCreate(Reader.ReadSharedString())); } return(t); }
/// <summary> /// Reads a <see cref="CKTraitContext"/> that has been previously written by <see cref="Write"/>. /// </summary> /// <param name="r">The binary reader to use.</param> public static CKTraitContext Read(ICKBinaryReader r) { byte vS = r.ReadByte(); bool shared = (vS & 128) != 0; bool withTags = (vS & 64) != 0; var name = shared ? r.ReadSharedString() : r.ReadString(); var sep = r.ReadChar(); var tagReader = withTags ? r : null; return(shared ? Bind(name, sep, tagReader) : new CKTraitContext(name, sep, false, tagReader)); }