public static void AddKnownDescribed(Descriptor descriptor, CreateDescribed ctor) { lock (knownDescrided) { knownDescrided.Add(descriptor.Name, ctor); knownDescrided.Add(descriptor.Code, ctor); } }
/// <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); } }
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); }