Exemple #1
0
 public static void AddKnownDescribed(Descriptor descriptor, CreateDescribed ctor)
 {
     lock (knownDescrided)
     {
         knownDescrided.Add(descriptor.Name, ctor);
         knownDescrided.Add(descriptor.Code, ctor);
     }
 }
Exemple #2
0
 /// <summary>
 /// Adds a factory for a custom described type, usually for decoding.
 /// </summary>
 /// <param name="descriptor">The descriptor of the type.</param>
 /// <param name="ctor">The delegate to invoke to create the object.</param>
 public static void AddKnownDescribed(Descriptor descriptor, CreateDescribed ctor)
 {
     lock (knownDescrided)
     {
         knownDescrided.Add(descriptor.Name, ctor);
         knownDescrided.Add(descriptor.Code, ctor);
     }
 }
Exemple #3
0
        public static object ReadDescribed(ByteBuffer buffer, byte formatCode)
        {
            Fx.Assert(formatCode == FormatCode.Described, "Format code must be described (0)");
            Described       described;
            object          descriptor = Encoder.ReadObject(buffer);
            CreateDescribed create     = null;

            if ((create = (CreateDescribed)knownDescrided[descriptor]) == null)
            {
                object value = Encoder.ReadObject(buffer);
                described = new DescribedValue(descriptor, value);
            }
            else
            {
                described = create();
                described.DecodeValue(buffer);
            }

            return(described);
        }