コード例 #1
0
            public virtual IEnumerator BackingFieldPath(IReflector reflector, object expression
                                                        )
            {
                if (expression == null)
                {
                    return(null);
                }
                IReflectClass claxx = reflector.ForObject(expression);

                if (claxx == null)
                {
                    return(null);
                }
                Prototypes.IntegerConverter converter = Prototypes.IntegerConverterforClassName(reflector
                                                                                                , claxx.GetName());
                if (converter != null)
                {
                    Pair entry = (Pair)this._fieldsByIntId.Get(converter.ToInteger(expression));
                    if (entry == null)
                    {
                        return(null);
                    }
                    if (entry.first.Equals(expression))
                    {
                        return(this.AsIterator((List4)entry.second));
                    }
                    return(null);
                }
                if (claxx.IsPrimitive())
                {
                    return(null);
                }
                return(this.AsIterator((List4)this._fieldsByIdentity.Get(expression)));
            }
コード例 #2
0
 public Prototype(Prototypes _enclosing, IReflectClass claxx)
 {
     this._enclosing = _enclosing;
     this._object    = (object)claxx.NewInstance();
     if (this._object == null)
     {
         throw new PrototypesException("Prototype could not be created for class " + claxx
                                       .GetName());
     }
     this.Analyze(this._object, claxx, this._enclosing._recursionDepth, null);
 }
コード例 #3
0
                public void Apply(object field)
                {
                    if (((IReflectField)field).IsStatic())
                    {
                        return;
                    }
                    if (this._enclosing._enclosing._ignoreTransient && ((IReflectField)field).IsTransient
                            ())
                    {
                        return;
                    }
                    IReflectClass fieldType = ((IReflectField)field).GetFieldType();
                    List4         path      = new List4(parentPath, ((IReflectField)field));

                    Prototypes.IntegerConverter converter = Prototypes.IntegerConverterforClassName(claxx
                                                                                                    .Reflector(), fieldType.GetName());
                    if (converter != null)
                    {
                        int    id = ++this._enclosing.intIdGenerator;
                        object integerRepresentation = converter.FromInteger(id);
                        if (!Prototypes.TrySetField(((IReflectField)field), @object, integerRepresentation
                                                    ))
                        {
                            return;
                        }
                        this._enclosing._fieldsByIntId.Put(id, new Pair(integerRepresentation, path));
                        return;
                    }
                    if (!fieldType.IsPrimitive())
                    {
                        object identityInstance = fieldType.NewInstance();
                        if (identityInstance == null)
                        {
                            return;
                        }
                        if (!Prototypes.TrySetField(((IReflectField)field), @object, identityInstance))
                        {
                            return;
                        }
                        this._enclosing._fieldsByIdentity.Put(identityInstance, path);
                        this._enclosing.Analyze(identityInstance, claxx, depth - 1, path);
                    }
                }
コード例 #4
0
ファイル: Prototypes.cs プロジェクト: erdincay/db4o
			public Prototype(Prototypes _enclosing, IReflectClass claxx)
			{
				this._enclosing = _enclosing;
				this._object = (object)claxx.NewInstance();
				if (this._object == null)
				{
					throw new PrototypesException("Prototype could not be created for class " + claxx
						.GetName());
				}
				this.Analyze(this._object, claxx, this._enclosing._recursionDepth, null);
			}
コード例 #5
0
 /// <exception cref="System.Exception"></exception>
 public virtual void SetUp()
 {
     _prototypes = new Prototypes(Prototypes.DefaultReflector(), RecursionDepth, IgnoreTransientFields
         );
 }