using System; using System.Collections; using System.Collections.Generic; using ProtoBuf.Meta; namespace ProtoBuf { public abstract class Extensible : IExtensible { private IExtension extensionObject; IExtension IExtensible.GetExtensionObject(bool createIfMissing) { return this.GetExtensionObject(createIfMissing); } protected virtual IExtension GetExtensionObject(bool createIfMissing) { return Extensible.GetExtensionObject(ref this.extensionObject, createIfMissing); } public static IExtension GetExtensionObject(ref IExtension extensionObject, bool createIfMissing) { bool flag = createIfMissing && extensionObject == null; if (flag) { extensionObject = new BufferExtension(); } return extensionObject; } public static void AppendValue(IExtensible instance, int tag, TValue value) { Extensible.AppendValue(instance, tag, DataFormat.Default, value); } public static void AppendValue(IExtensible instance, int tag, DataFormat format, TValue value) { ExtensibleUtil.AppendExtendValue(RuntimeTypeModel.Default, instance, tag, format, value); } public static TValue GetValue(IExtensible instance, int tag) { return Extensible.GetValue(instance, tag, DataFormat.Default); } public static TValue GetValue(IExtensible instance, int tag, DataFormat format) { TValue result; Extensible.TryGetValue(instance, tag, format, out result); return result; } public static bool TryGetValue(IExtensible instance, int tag, out TValue value) { return Extensible.TryGetValue(instance, tag, DataFormat.Default, out value); } public static bool TryGetValue(IExtensible instance, int tag, DataFormat format, out TValue value) { return Extensible.TryGetValue(instance, tag, format, false, out value); } public static bool TryGetValue(IExtensible instance, int tag, DataFormat format, bool allowDefinedTag, out TValue value) { value = default(TValue); bool result = false; foreach (TValue tvalue in ExtensibleUtil.GetExtendedValues(instance, tag, format, true, allowDefinedTag)) { value = tvalue; result = true; } return result; } public static IEnumerable GetValues(IExtensible instance, int tag) { return ExtensibleUtil.GetExtendedValues(instance, tag, DataFormat.Default, false, false); } public static IEnumerable GetValues(IExtensible instance, int tag, DataFormat format) { return ExtensibleUtil.GetExtendedValues(instance, tag, format, false, false); } public static bool TryGetValue(TypeModel model, Type type, IExtensible instance, int tag, DataFormat format, bool allowDefinedTag, out object value) { value = null; bool result = false; foreach (object obj in ExtensibleUtil.GetExtendedValues(model, type, instance, tag, format, true, allowDefinedTag)) { value = obj; result = true; } return result; } public static IEnumerable GetValues(TypeModel model, Type type, IExtensible instance, int tag, DataFormat format) { return ExtensibleUtil.GetExtendedValues(model, type, instance, tag, format, false, false); } public static void AppendValue(TypeModel model, IExtensible instance, int tag, DataFormat format, object value) { ExtensibleUtil.AppendExtendValue(model, instance, tag, format, value); } } }