static MarshalType() { IsIntPtr = typeof(T) == typeof(IntPtr); RealType = typeof(T); if (RealType.IsEnum) { RealType = RealType.GetEnumUnderlyingType(); } TypeCode = Type.GetTypeCode(RealType); Size = TypeCode == TypeCode.Boolean ? 1 : Marshal.SizeOf(RealType); CanBeStoredInRegisters = IsIntPtr || TypeCode == TypeCode.Boolean || TypeCode == TypeCode.Byte || TypeCode == TypeCode.Char || TypeCode == TypeCode.Int16 || TypeCode == TypeCode.Int32 || TypeCode == TypeCode.Int64 || TypeCode == TypeCode.Single || TypeCode == TypeCode.UInt16 || TypeCode == TypeCode.UInt32 || TypeCode == TypeCode.UInt64 || TypeCode == TypeCode.SByte; }
public void FauxTypeTest() { var testProp = new Dictionary <String, Type>() { { "test", typeof(bool) } }; var propType = new PropretySpecType(testProp); var propMembers = propType.GetMemberNames(); Expect(propMembers, Contains("test")); var realType = new RealType(typeof(ISimpeleClassProps)); var realMembers = realType.GetMemberNames(); Expect(realMembers, Contains("Prop2")); var aggrType = new AggreType(propType, realType); var aggrMembers = aggrType.GetMemberNames(); Expect(aggrMembers, Contains("Prop2")); Expect(aggrMembers, Contains("test")); }
public void Can_Serialize_bytes_as_Hex() { JsConfig <byte[]> .SerializeFn = BitConverter.ToString; JsConfig <byte[]> .DeSerializeFn = hex => { hex = hex.Replace("-", ""); return(Enumerable.Range(0, hex.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) .ToArray()); }; var dto = new RealType { Name = "Red", Data = new byte[] { 255, 0, 0 } }; var json = dto.ToJson(); Assert.That(json, Is.StringContaining("FF-00-00")); var fromJson = json.FromJson <RealType>(); Assert.That(fromJson.Data, Is.EquivalentTo(dto.Data)); JsConfig <byte[]> .SerializeFn = null; JsConfig <byte[]> .DeSerializeFn = null; JsConfig.Reset(); json = dto.ToJson(); json.Print(); fromJson = json.FromJson <RealType>(); Assert.That(fromJson.Data, Is.EquivalentTo(dto.Data)); }
public void Can_Serialize_bytes_as_Hex() { JsConfig<byte[]>.SerializeFn = BitConverter.ToString; JsConfig<byte[]>.DeSerializeFn = hex => { hex = hex.Replace("-", ""); return Enumerable.Range(0, hex.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) .ToArray(); }; var dto = new RealType { Name = "Red", Data = new byte[] { 255, 0, 0 } }; var json = dto.ToJson(); Assert.That(json, Is.StringContaining("FF-00-00")); var fromJson = json.FromJson<RealType>(); Assert.That(fromJson.Data, Is.EquivalentTo(dto.Data)); JsConfig<byte[]>.SerializeFn = null; JsConfig<byte[]>.DeSerializeFn = null; JsConfig.Reset(); json = dto.ToJson(); json.Print(); fromJson = json.FromJson<RealType>(); Assert.That(fromJson.Data, Is.EquivalentTo(dto.Data)); }
public TypeParameterSymbolInfo(Type type) : base(type) { Ordinal = type.GenericParameterPosition; HasReferenceTypeConstraint = (type.GenericParameterAttributes & GenericParameterAttributes.ReferenceTypeConstraint) == GenericParameterAttributes.ReferenceTypeConstraint; HasValueTypeConstraint = (type.GenericParameterAttributes & GenericParameterAttributes.NotNullableValueTypeConstraint) == GenericParameterAttributes.NotNullableValueTypeConstraint; HasConstructorConstraint = (type.GenericParameterAttributes & GenericParameterAttributes.DefaultConstructorConstraint) == GenericParameterAttributes.DefaultConstructorConstraint; RefKind = type.GenericParameterAttributes.ConvertToStructure(); ConstraintTypes = EnumerableExtensions.CreateLazyImmutableArray(() => RealType.GetGenericParameterConstraints().Where(i => i != typeof(ValueType)).Select(i => i.GetSymbolInfo())); }
static public object Parse(this RealType item, string input) { switch (item) { case RealType.Float: return(input.ParseFloat()); case RealType.Double: return(input.ParseDouble()); case RealType.Decimal: return(input.ParseDecimal()); } throw new UnaccountedBranchException("item", item); }
/// <summary> /// /// </summary> public object GetInstance() { var constructors = RealType.GetConstructors(); var parasInfos = constructors[0].GetParameters(); var paras = new List <object>(); foreach (var parasInfo in parasInfos) { var obj = GetParameterInstance(parasInfo.ParameterType); paras.Add(obj); } return(constructors[0].Invoke(paras.ToArray())); }
public TypeInspector(Type type) { Type = type; RealType = Nullable.GetUnderlyingType(Type) ?? Type; _typeInfo = type.GetTypeInfo(); _realTypeInfo = RealType.GetTypeInfo(); if (type.IsArray) { _elementTypeInspector = type.GetElementType().Inspector(); } TypeFlags = BuildTypeFlags(); }
public void Can_Serialize_TypeProperties_WithCustomFunction() { var test = new RealType { Name = "Test", Data = new byte[] { 1, 2, 3, 4, 5 } }; // Act: now we set a custom function for byte[] JsConfig<byte[]>.RawSerializeFn = c => { var temp = new int[c.Length]; Array.Copy(c, temp, c.Length); return JsonSerializer.SerializeToString(temp); }; var json = JsonSerializer.SerializeToString(test); // Assert: Assert.That(json, Is.EquivalentTo("{\"Name\":\"Test\",\"Data\":[1,2,3,4,5]}")); }
public object GetInstance() { //取得Type的构造函数, 这里为了简便,默认使用最后一个,实际的Autofac默认会使用参数最长的一个 var constructors = RealType.GetConstructors(); var paramsInfos = constructors[constructors.Length - 1].GetParameters(); List <object> objParams = new List <object>(); foreach (var parameterInfo in paramsInfos) { var tempPara = GetParameterInstance(parameterInfo.ParameterType); objParams.Add(tempPara); } //调用构造函数构造对象 return(constructors[0].Invoke(objParams.ToArray())); }
public void Can_Serialize_TypeProperties_WithCustomFunction() { var test = new RealType { Name = "Test", Data = new byte[] { 1, 2, 3, 4, 5 } }; // Act: now we set a custom function for byte[] JsConfig <byte[]> .RawSerializeFn = c => { var temp = new int[c.Length]; Array.Copy(c, temp, c.Length); return(JsonSerializer.SerializeToString(temp)); }; var json = JsonSerializer.SerializeToString(test); // Assert: Assert.That(json, Is.EquivalentTo("{\"Name\":\"Test\",\"Data\":[1,2,3,4,5]}")); }
public object GetInstance() { //取得Type的构造函数, 这里为了简便,默认使用最后一个,实际的Autofac默认会使用参数最长的一个 var constructors = RealType.GetConstructors(); var paramsInfos = constructors[constructors.Length - 1].GetParameters(); //准备构造函数的参数 var @params = new List <object>(); foreach (var parameterInfo in paramsInfos) { //根据类型,取的参数的实例。本人注:这里根据type自动匹配注册的类型,然后利用委托循环调用,类似递归 var tempPara = GetParameterInstance(parameterInfo.ParameterType); @params.Add(tempPara); } //调用构造函数构造对象 return(constructors[0].Invoke(@params.ToArray())); }
public DataTable ImportRulesAsDataTable() { var dt = new DataTable(); dt.Locale = CultureInfo.InvariantCulture; // add the columns foreach (var property in RealType.GetProperties()) { dt.Columns.Add(property.Name, Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType); } // add the rows foreach (var row in ImportRules) { object[] values = RealType.GetProperties().Select(f => f.GetValue(row)).ToArray(); dt.Rows.Add(values); } return(dt); }
public IType GetSemiResolvedType(ISessionFactoryImplementor factory) { return(RealType.GetSemiResolvedType(factory)); }
public virtual T Visit(RealType node) { return(Visit((ScalarType)node)); }
public void SetToXMLNode(XmlNode node, object value, ISessionFactoryImplementor factory) { RealType.SetToXMLNode(node, value, factory); }
public override bool Visit(RealType node) { Visit((ScalarType)node); return(true); }
public object SemiResolve(object value, ISessionImplementor session, object owner) { return(RealType.SemiResolve(value, session, owner)); }
public bool[] ToColumnNullness(object value, IMapping mapping) { return(RealType.ToColumnNullness(value, mapping)); }
public object Replace(object original, object target, ISessionImplementor session, object owner, IDictionary copyCache, ForeignKeyDirection foreignKeyDirection) { return(RealType.Replace(original, target, session, owner, copyCache, foreignKeyDirection)); }
public int Compare(object x, object y, EntityMode?entityMode) { return(RealType.Compare(x, y, entityMode)); }
public object Hydrate(IDataReader rs, string[] names, ISessionImplementor session, object owner) { return(RealType.Hydrate(rs, names, session, owner)); }
public bool IsEqual(object x, object y, EntityMode entityMode) { return(RealType.IsEqual(x, y, entityMode)); }
void TypeAndToken(out IToken tok, out Type ty, bool inExpressionContext) { Contract.Ensures(Contract.ValueAtReturn(out tok)!=null); Contract.Ensures(Contract.ValueAtReturn(out ty) != null); tok = Token.NoToken; ty = new BoolType(); /*keep compiler happy*/ List<Type> gt; List<Type> tupleArgTypes = null; switch (la.kind) { case 7: { Get(); tok = t; break; } case 8: { Get(); tok = t; ty = new CharType(); break; } case 9: { Get(); tok = t; ty = new IntType(); break; } case 10: { Get(); tok = t; ty = new UserDefinedType(tok, tok.val, null); break; } case 11: { Get(); tok = t; ty = new RealType(); break; } case 6: { Get(); tok = t; int w = StringToInt(tok.val.Substring(2), 0, "bitvectors that wide"); ty = new BitvectorType(w); break; } case 12: { Get(); tok = t; ty = new ObjectType(); break; } case 14: { Get(); tok = t; OptGenericInstantiation(out gt, inExpressionContext); if (gt != null && gt.Count > 1) { SemErr("set type expects only one type argument"); } ty = new SetType(true, gt != null ?gt[0] : null); break; } case 15: { Get(); tok = t; OptGenericInstantiation(out gt, inExpressionContext); if (gt != null && gt.Count > 1) { SemErr("set type expects only one type argument"); } ty = new SetType(false, gt != null ? gt[0] : null); break; } case 16: { Get(); tok = t; OptGenericInstantiation(out gt, inExpressionContext); if (gt != null && gt.Count > 1) { SemErr("multiset type expects only one type argument"); } ty = new MultiSetType(gt != null ? gt[0] : null); break; } case 17: { Get(); tok = t; OptGenericInstantiation(out gt, inExpressionContext); if (gt != null && gt.Count > 1) { SemErr("seq type expects only one type argument"); } ty = new SeqType(gt != null ? gt[0] : null); break; } case 13: { Get(); tok = t; ty = new UserDefinedType(tok, tok.val, null); break; } case 18: { Get(); tok = t; OptGenericInstantiation(out gt, inExpressionContext); if (gt == null) { ty = new MapType(true, null, null); } else if (gt.Count != 2) { SemErr("map type expects two type arguments"); ty = new MapType(true, gt[0], gt.Count == 1 ? new InferredTypeProxy() : gt[1]); } else { ty = new MapType(true, gt[0], gt[1]); } break; } case 19: { Get(); tok = t; OptGenericInstantiation(out gt, inExpressionContext); if (gt == null) { ty = new MapType(false, null, null); } else if (gt.Count != 2) { SemErr("imap type expects two type arguments"); ty = new MapType(false, gt[0], gt.Count == 1 ? new InferredTypeProxy() : gt[1]); } else { ty = new MapType(false, gt[0], gt[1]); } break; } case 5: { Get(); tok = t; OptGenericInstantiation(out gt, inExpressionContext); int dims = StringToInt(tok.val.Substring(5), 1, "arrays of that many dimensions"); ty = theBuiltIns.ArrayType(tok, dims, gt, true); break; } case 54: { Get(); tok = t; tupleArgTypes = new List<Type>(); if (StartOf(6)) { Type(out ty); tupleArgTypes.Add(ty); while (la.kind == 23) { Get(); Type(out ty); tupleArgTypes.Add(ty); } } Expect(55); if (tupleArgTypes.Count == 1) { // just return the type 'ty' } else { var dims = tupleArgTypes.Count; var tmp = theBuiltIns.TupleType(tok, dims, true); // make sure the tuple type exists ty = new UserDefinedType(tok, BuiltIns.TupleTypeName(dims), dims == 0 ? null : tupleArgTypes); } break; } case 1: { Expression e; NameSegmentForTypeName(out e, inExpressionContext); tok = t; while (la.kind == 28) { Get(); Expect(1); tok = t; List<Type> typeArgs; OptGenericInstantiation(out typeArgs, inExpressionContext); e = new ExprDotName(tok, e, tok.val, typeArgs); } ty = new UserDefinedType(e.tok, e); break; } default: SynErr(182); break; } if (IsArrow()) { Expect(32); tok = t; Type t2; Type(out t2); if (tupleArgTypes != null) { gt = tupleArgTypes; } else { gt = new List<Type>{ ty }; } ty = new ArrowType(tok, gt, t2); theBuiltIns.CreateArrowTypeDecl(gt.Count); } }
void ConstAtomExpression(out Expression e, bool allowSemi, bool allowLambda) { Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x; BigInteger n; Basetypes.BigDec d; e = dummyExpr; Type toType = null; switch (la.kind) { case 138: { Get(); e = new LiteralExpr(t, false); break; } case 139: { Get(); e = new LiteralExpr(t, true); break; } case 140: { Get(); e = new LiteralExpr(t); break; } case 2: case 3: { Nat(out n); e = new LiteralExpr(t, n); break; } case 4: { Dec(out d); e = new LiteralExpr(t, d); break; } case 20: { Get(); e = new CharLiteralExpr(t, t.val.Substring(1, t.val.Length - 2)); break; } case 21: { Get(); bool isVerbatimString; string s = Util.RemoveParsedStringQuotes(t.val, out isVerbatimString); e = new StringLiteralExpr(t, s, isVerbatimString); break; } case 141: { Get(); e = new ThisExpr(t); break; } case 142: { Get(); x = t; Expect(54); Expression(out e, true, true); Expect(55); e = new UnaryOpExpr(x, UnaryOpExpr.Opcode.Fresh, e); break; } case 143: { Get(); x = t; Expect(54); Expression(out e, true, true); Expect(55); e = new UnaryOpExpr(x, UnaryOpExpr.Opcode.Allocated, e); break; } case 144: { Get(); x = t; FrameExpression fe; var mod = new List<FrameExpression>(); Expect(54); FrameExpression(out fe, false, false); mod.Add(fe); while (la.kind == 23) { Get(); FrameExpression(out fe, false, false); mod.Add(fe); } Expect(55); e = new UnchangedExpr(x, mod); break; } case 145: { Get(); x = t; Expect(54); Expression(out e, true, true); Expect(55); e = new OldExpr(x, e); break; } case 24: { Get(); x = t; Expression(out e, true, true, false); e = new UnaryOpExpr(x, UnaryOpExpr.Opcode.Cardinality, e); Expect(24); break; } case 9: case 11: { if (la.kind == 9) { Get(); x = t; toType = new IntType(); } else { Get(); x = t; toType = new RealType(); } errors.Deprecated(t, string.Format("the syntax \"{0}(expr)\" for type conversions has been deprecated; the new syntax is \"expr as {0}\"", x.val)); Expect(54); Expression(out e, true, true); Expect(55); e = new ConversionExpr(x, e, toType); break; } case 54: { ParensExpression(out e, allowSemi, allowLambda); break; } default: SynErr(262); break; } }
public bool IsEqual(object x, object y, EntityMode entityMode, ISessionFactoryImplementor factory) { return(RealType.IsEqual(x, y, entityMode, factory)); }
void ConstAtomExpression(out Expression e, bool allowSemi, bool allowLambda) { Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x; BigInteger n; Basetypes.BigDec d; e = dummyExpr; Type toType = null; switch (la.kind) { case 131: { Get(); e = new LiteralExpr(t, false); break; } case 132: { Get(); e = new LiteralExpr(t, true); break; } case 133: { Get(); e = new LiteralExpr(t); break; } case 2: case 3: { Nat(out n); e = new LiteralExpr(t, n); break; } case 4: { Dec(out d); e = new LiteralExpr(t, d); break; } case 19: { Get(); e = new CharLiteralExpr(t, t.val.Substring(1, t.val.Length - 2)); break; } case 20: { Get(); bool isVerbatimString; string s = Util.RemoveParsedStringQuotes(t.val, out isVerbatimString); e = new StringLiteralExpr(t, s, isVerbatimString); break; } case 134: { Get(); e = new ThisExpr(t); break; } case 135: { Get(); x = t; Expect(50); Expression(out e, true, true); Expect(51); e = new UnaryOpExpr(x, UnaryOpExpr.Opcode.Fresh, e); break; } case 136: { Get(); x = t; Expect(50); Expression(out e, true, true); Expect(51); e = new OldExpr(x, e); break; } case 23: { Get(); x = t; Expression(out e, true, true); e = new UnaryOpExpr(x, UnaryOpExpr.Opcode.Cardinality, e); Expect(23); break; } case 8: case 10: { if (la.kind == 8) { Get(); x = t; toType = new IntType(); } else { Get(); x = t; toType = new RealType(); } Expect(50); Expression(out e, true, true); Expect(51); e = new ConversionExpr(x, e, toType); break; } case 50: { ParensExpression(out e, allowSemi, allowLambda); break; } default: SynErr(234); break; } }
public object ResolveIdentifier(object value, ISessionImplementor session, object owner) { return(RealType.ResolveIdentifier(value, session, owner)); }
void TypeAndToken(out IToken tok, out Type ty) { Contract.Ensures(Contract.ValueAtReturn(out tok)!=null); Contract.Ensures(Contract.ValueAtReturn(out ty) != null); tok = Token.NoToken; ty = new BoolType(); /*keep compiler happy*/ List<Type> gt; List<Type> tupleArgTypes = null; switch (la.kind) { case 6: { Get(); tok = t; break; } case 7: { Get(); tok = t; ty = new CharType(); break; } case 9: { Get(); tok = t; ty = new NatType(); break; } case 8: { Get(); tok = t; ty = new IntType(); break; } case 10: { Get(); tok = t; ty = new RealType(); break; } case 11: { Get(); tok = t; ty = new ObjectType(); break; } case 13: { Get(); tok = t; gt = new List<Type>(); if (la.kind == 52) { GenericInstantiation(gt); } if (gt.Count > 1) { SemErr("set type expects only one type argument"); } ty = new SetType(true, gt.Count == 1 ? gt[0] : null); break; } case 14: { Get(); tok = t; gt = new List<Type>(); if (la.kind == 52) { GenericInstantiation(gt); } if (gt.Count > 1) { SemErr("set type expects only one type argument"); } ty = new SetType(false, gt.Count == 1 ? gt[0] : null); break; } case 15: { Get(); tok = t; gt = new List<Type>(); if (la.kind == 52) { GenericInstantiation(gt); } if (gt.Count > 1) { SemErr("multiset type expects only one type argument"); } ty = new MultiSetType(gt.Count == 1 ? gt[0] : null); break; } case 16: { Get(); tok = t; gt = new List<Type>(); if (la.kind == 52) { GenericInstantiation(gt); } if (gt.Count > 1) { SemErr("seq type expects only one type argument"); } ty = new SeqType(gt.Count == 1 ? gt[0] : null); break; } case 12: { Get(); tok = t; ty = new UserDefinedType(tok, tok.val, null); break; } case 17: { Get(); tok = t; gt = new List<Type>(); if (la.kind == 52) { GenericInstantiation(gt); } if (gt.Count == 0) { ty = new MapType(true, null, null); } else if (gt.Count != 2) { SemErr("map type expects two type arguments"); ty = new MapType(true, gt[0], gt.Count == 1 ? new InferredTypeProxy() : gt[1]); } else { ty = new MapType(true, gt[0], gt[1]); } break; } case 18: { Get(); tok = t; gt = new List<Type>(); if (la.kind == 52) { GenericInstantiation(gt); } if (gt.Count == 0) { ty = new MapType(false, null, null); } else if (gt.Count != 2) { SemErr("imap type expects two type arguments"); ty = new MapType(false, gt[0], gt.Count == 1 ? new InferredTypeProxy() : gt[1]); } else { ty = new MapType(false, gt[0], gt[1]); } break; } case 5: { Get(); tok = t; gt = null; if (la.kind == 52) { gt = new List<Type>(); GenericInstantiation(gt); } int dims = tok.val.Length == 5 ? 1 : int.Parse(tok.val.Substring(5)); ty = theBuiltIns.ArrayType(tok, dims, gt, true); break; } case 50: { Get(); tok = t; tupleArgTypes = new List<Type>(); if (StartOf(3)) { Type(out ty); tupleArgTypes.Add(ty); while (la.kind == 22) { Get(); Type(out ty); tupleArgTypes.Add(ty); } } Expect(51); if (tupleArgTypes.Count == 1) { // just return the type 'ty' } else { var dims = tupleArgTypes.Count; var tmp = theBuiltIns.TupleType(tok, dims, true); // make sure the tuple type exists ty = new UserDefinedType(tok, BuiltIns.TupleTypeName(dims), dims == 0 ? null : tupleArgTypes); } break; } case 1: { Expression e; tok = t; NameSegmentForTypeName(out e); tok = t; while (la.kind == 27) { Get(); Expect(1); tok = t; List<Type> typeArgs = null; if (la.kind == 52) { typeArgs = new List<Type>(); GenericInstantiation(typeArgs); } e = new ExprDotName(tok, e, tok.val, typeArgs); } ty = new UserDefinedType(e.tok, e); break; } default: SynErr(164); break; } if (la.kind == 30) { Type t2; Get(); tok = t; Type(out t2); if (tupleArgTypes != null) { gt = tupleArgTypes; } else { gt = new List<Type>{ ty }; } ty = new ArrowType(tok, gt, t2); theBuiltIns.CreateArrowTypeDecl(gt.Count); } }
public int GetHashCode(object x, EntityMode entityMode, ISessionFactoryImplementor factory) { return(RealType.GetHashCode(x, entityMode, factory)); }
public override int GetHashCode() { return(RealType.GetHashCode() ^ MemberName.GetHashCode()); }
public virtual bool IsEqualTo(Type entityType, sbyte idIndex, Object id) { return(Id.Equals(id) && RealType.Equals(entityType) && IdNameIndex == idIndex); }
public void Read(BinaryReader br) { _offset = (int)br.BaseStream.Position; _type = (RealType)br.ReadUInt32(); _length = br.ReadInt32(); }
public object FromXMLNode(XmlNode xml, IMapping factory) { return(RealType.FromXMLNode(xml, factory)); }
public object Replace(object original, object target, ISessionImplementor session, object owner, IDictionary copiedAlready) { return(RealType.Replace(original, target, session, owner, copiedAlready)); }
public int GetHashCode(object x, EntityMode entityMode) { return(RealType.GetHashCode(x, entityMode)); }