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);
        }
Exemple #2
0
        /// <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));
        }