/// <summary> /// Constructor. /// </summary> /// <param name="type">Type.</param> /// <param name="typeId">Type ID.</param> /// <param name="typeName">Type name.</param> /// <param name="userType">User type flag.</param> /// <param name="nameConverter">Name converter.</param> /// <param name="mapper">Mapper.</param> /// <param name="serializer">Serializer.</param> /// <param name="metaEnabled">Metadata enabled flag.</param> /// <param name="keepDeserialized">Whether to cache deserialized value in IPortableObject</param> /// <param name="affKeyFieldName">Affinity field key name.</param> /// <param name="typedHandler">Typed handler.</param> /// <param name="untypedHandler">Untyped handler.</param> public PortableFullTypeDescriptor( Type type, int typeId, string typeName, bool userType, IPortableNameMapper nameConverter, IPortableIdMapper mapper, IPortableSerializer serializer, bool metaEnabled, bool keepDeserialized, string affKeyFieldName, object typedHandler, PortableSystemWriteDelegate untypedHandler) { _type = type; _typeId = typeId; _typeName = typeName; _userType = userType; _nameConverter = nameConverter; _mapper = mapper; _serializer = serializer; _metaEnabled = metaEnabled; _keepDeserialized = keepDeserialized; _affKeyFieldName = affKeyFieldName; _typedHandler = typedHandler; _untypedHandler = untypedHandler; }
/// <summary> /// Write field. /// </summary> /// <param name="fieldName">Field name.</param> /// <param name="typeId">Type ID.</param> /// <param name="val">Value.</param> /// <param name="handler">Handler.</param> private void WriteField(string fieldName, byte typeId, object val, PortableSystemWriteDelegate handler) { int fieldId = PortableUtils.FieldId(_curTypeId, fieldName, _curConverter, _curMapper); WriteField(fieldId, val, handler); if (_curMetaHnd != null) { _curMetaHnd.OnFieldWrite(fieldId, fieldName, typeId); } }
/// <summary> /// Write field. /// </summary> /// <param name="fieldId">Field ID.</param> /// <param name="val">Value.</param> /// <param name="handler">Handler.</param> private void WriteField(int fieldId, object val, PortableSystemWriteDelegate handler) { CheckNotRaw(); _stream.WriteInt(fieldId); int pos = _stream.Position; _stream.Seek(4, SeekOrigin.Current); Write(val, handler); WriteFieldLength(_stream, pos); }
/** * <summary>Constructor.</summary> * <param name="flag0">Flag.</param> * <param name="writeHnd0">Write handler.</param> * <param name="writeMthd0">Generic write method.</param> * <param name="readMthd0">Generic read method.</param> */ private PortableCollectionInfo(byte flag0, PortableSystemWriteDelegate writeHnd0, MethodInfo writeMthd0, MethodInfo readMthd0) { _flag = flag0; _writeHnd = writeHnd0; if (writeMthd0 != null) { _writeFunc = DelegateConverter.CompileFunc <Action <object, PortableWriterImpl> >(null, writeMthd0, null, new[] { true, false, false }); } if (readMthd0 != null) { _readFunc = DelegateConverter.CompileFunc <Func <PortableReaderImpl, object, object> >(null, readMthd0, null, new[] { false, true, false }); } }
/// <summary> /// Try invoking predefined handler on object. /// </summary> /// <param name="typedHandler">Handler</param> /// <param name="untypedHandler">Not typed handler.</param> /// <param name="obj">Object.</param> /// <returns>True if handler was called.</returns> private bool InvokeHandler <T>(object typedHandler, PortableSystemWriteDelegate untypedHandler, T obj) { var typedHandler0 = typedHandler as PortableSystemTypedWriteDelegate <T>; if (typedHandler0 != null) { typedHandler0.Invoke(_stream, obj); return(true); } if (untypedHandler != null) { untypedHandler.Invoke(this, obj); return(true); } return(false); }
/// <summary> /// Add type. /// </summary> /// <param name="type">Type.</param> /// <param name="typeId">Type ID.</param> /// <param name="typeName">Type name.</param> /// <param name="userType">User type flag.</param> /// <param name="metaEnabled">Metadata enabled flag.</param> /// <param name="keepDeserialized">Whether to cache deserialized value in IPortableObject</param> /// <param name="nameMapper">Name mapper.</param> /// <param name="idMapper">ID mapper.</param> /// <param name="serializer">Serializer.</param> /// <param name="affKeyFieldName">Affinity key field name.</param> /// <param name="typedHandler">Typed handler.</param> /// <param name="untypedHandler">Untyped handler.</param> private void AddType(Type type, int typeId, string typeName, bool userType, bool metaEnabled, bool keepDeserialized, IPortableNameMapper nameMapper, IPortableIdMapper idMapper, IPortableSerializer serializer, string affKeyFieldName, object typedHandler, PortableSystemWriteDelegate untypedHandler) { long typeKey = PortableUtils.TypeKey(userType, typeId); if (_idToDesc.ContainsKey(typeKey)) { string type1 = _idToDesc[typeKey].Type != null ? _idToDesc[typeKey].Type.AssemblyQualifiedName : null; string type2 = type != null ? type.AssemblyQualifiedName : null; throw new PortableException("Conflicting type IDs [type1=" + type1 + ", type2=" + type2 + ", typeId=" + typeId + ']'); } if (userType && _typeNameToDesc.ContainsKey(typeName)) { throw new PortableException("Conflicting type name: " + typeName); } IPortableTypeDescriptor descriptor = new PortableFullTypeDescriptor(type, typeId, typeName, userType, nameMapper, idMapper, serializer, metaEnabled, keepDeserialized, affKeyFieldName, typedHandler, untypedHandler); if (type != null) { _typeToDesc[type] = descriptor; } if (userType) { _typeNameToDesc[typeName] = descriptor; } _idToDesc[typeKey] = descriptor; }
/** * <summary>Constructor.</summary> * <param name="flag0">Flag.</param> * <param name="writeHnd0">Write handler.</param> * <param name="writeMthd0">Generic write method.</param> * <param name="readMthd0">Generic read method.</param> */ private PortableCollectionInfo(byte flag0, PortableSystemWriteDelegate writeHnd0, MethodInfo writeMthd0, MethodInfo readMthd0) { _flag = flag0; _writeHnd = writeHnd0; if (writeMthd0 != null) _writeFunc = DelegateConverter.CompileFunc<Action<object, PortableWriterImpl>>(null, writeMthd0, null, new[] {true, false, false}); if (readMthd0 != null) _readFunc = DelegateConverter.CompileFunc<Func<PortableReaderImpl, object, object>>(null, readMthd0, null, new[] {false, true, false}); }
/// <summary> /// Add predefined type. /// </summary> /// <param name="type">Type.</param> /// <param name="typeId">Type ID.</param> /// <param name="typedHandler">Typed handler.</param> /// <param name="untypedHandler">Untyped handler.</param> private void AddPredefinedType(Type type, int typeId, object typedHandler, PortableSystemWriteDelegate untypedHandler) { AddType(type, typeId, GetTypeName(type), false, false, false, null, null, null, null, typedHandler, untypedHandler); }