コード例 #1
0
        public void Serialize <T>(IWriteVisitor visitor, T graph)
        {
            if (visitor == null)
            {
                throw new ArgumentNullException(nameof(visitor));
            }
            if (graph == null)
            {
                throw new ArgumentNullException(nameof(graph));
            }

            var traveller = _rootTravellers.GetOrAdd <T>(out var level);

            if (level == LevelType.Value)
            {
                var valueVisitor = ValueVisitor.Create <T>();
                valueVisitor.VisitValue(visitor, VisitArgs.CreateRoot(level), graph);
            }
            else
            {
                var rootArgs = VisitArgs.CreateRoot(level);
                visitor.Visit(graph, rootArgs);
                traveller.Travel(visitor, graph);
                visitor.Leave(graph, rootArgs);
            }
        }
コード例 #2
0
 public void Visit(object graph, IWriteVisitor visitor)
 {
     foreach (var property in _properties)
     {
         property.Visit(graph, visitor);
     }
 }
コード例 #3
0
 public void Travel(IWriteVisitor visitor, Relation graph)
 {
     visitor.VisitValue(graph.Id, _argsId0);
     visitor.VisitValue(graph.Name, _argsName1);
     visitor.VisitValue(graph.Description, _argsDescription2);
     visitor.VisitValue(graph.Value, _argsValue3);
 }
コード例 #4
0
 public void Travel(IWriteVisitor visitor, NullableValuesEntity graph)
 {
     //visitor.VisitValue(new int?(graph.Id), _argsId0);
     //visitor.VisitValue(graph.MayBool, _argsMayBool1);
     visitor.VisitValue(graph.MayInt, _argsMayInt2);
     //visitor.VisitValue(graph.MayDateTime, _argsMayDateTime3);
     //visitor.VisitValue(graph.MayTimeSpan, _argsMayTimeSpan4);
 }
コード例 #5
0
        public void Visit(object graph, IWriteVisitor visitor)
        {
            var childGraph = _property.Ref.GetValue(graph);
            visitor.Visit(childGraph, _args);
            if (childGraph == null) {
                visitor.Leave(null, _args);
                return;
            }

            _propertyType.Visit(childGraph, visitor);
            visitor.Leave(childGraph, _args);
        }
コード例 #6
0
        public void Visit(object graph, IWriteVisitor visitor)
        {
            var childGraph = _property.Ref.GetValue(graph);

            visitor.Visit(childGraph, _args);
            if (childGraph == null)
            {
                visitor.Leave(null, _args);
                return;
            }

            _propertyType.Visit(childGraph, visitor);
            visitor.Leave(childGraph, _args);
        }
コード例 #7
0
        public void Travel(IWriteVisitor visitor, TCollection graph)
        {
            var itemArgs = VisitArgs.CollectionItem;

            foreach (var element in graph)
            {
                if (_valueVisitor != null)
                {
                    _valueVisitor.VisitValue(visitor, itemArgs, element);
                }
                else
                {
                    visitor.Visit(element, itemArgs);
                    _elementTraveller.Travel(visitor, element);
                    visitor.Leave(element, itemArgs);
                }
            }
        }
コード例 #8
0
        public void Travel(IWriteVisitor visitor, MultidimensionalArrayGraph graph)
        {
            {
                var c = graph.Value;
                visitor.Visit(c, _argsValue);

                if (c != null)
                {
                    for (var r0 = 0; r0 < c.GetLength(0); r0++)
                    {
                        visitor.Visit(c, VisitArgs.CollectionInCollection);
                        for (var r1 = 0; r1 < c.GetLength(1); r1++)
                        {
                            visitor.VisitValue(c[r0, r1], VisitArgs.CollectionItem);
                        }
                        visitor.Leave(c, VisitArgs.CollectionInCollection);
                    }
                }

                visitor.Leave(c, _argsValue);
            }
        }
コード例 #9
0
        public void Travel(IWriteVisitor visitor, TDictionary graph)
        {
            var valueArgs = VisitArgs.DictionaryValue;

            void TravelValue(TValue value)
            {
                if (_valueVisitor != null)
                {
                    _valueVisitor.VisitValue(visitor, valueArgs, value);
                    return;
                }

                visitor.Visit(value, valueArgs);
                _valueTraveller.Travel(visitor, value);
                visitor.Leave(value, valueArgs);
            }

            var keyArgs = VisitArgs.DictionaryKey;

            foreach (var kv in graph)
            {
                if (_keyVisitor != null)
                {
                    _keyVisitor.VisitValue(visitor, keyArgs, kv.Key);
                    TravelValue(kv.Value);
                }
                else
                {
                    var key = kv.Key;
                    visitor.Visit(key, keyArgs);
                    _keyTraveller.Travel(visitor, key);
                    visitor.Leave(key, keyArgs);
                    TravelValue(kv.Value);
                }
            }
        }
コード例 #10
0
 public void Travel(IWriteVisitor visitor, object graph)
 {
     Travel(visitor, (NullableValuesEntity)graph);
 }
コード例 #11
0
ファイル: IValueVisitor.cs プロジェクト: jaygumji/Enigma
 public override void VisitValue(IWriteVisitor visitor, VisitArgs args, decimal value)
 {
     visitor.VisitValue(value, args);
 }
コード例 #12
0
 public void Travel(IWriteVisitor visitor, T graph)
 {
     Travel(visitor, (object)graph);
 }
コード例 #13
0
 public void Travel(IWriteVisitor visitor, object graph)
 {
     Travel(visitor, (MultidimensionalArrayGraph)graph);
 }
コード例 #14
0
 void IGraphTraveller.Travel(IWriteVisitor visitor, object graph)
 {
     Travel(visitor, (TCollection)graph);
 }
コード例 #15
0
 public void Travel(IWriteVisitor visitor, object graph)
 {
     _type.Visit(graph, visitor);
 }
コード例 #16
0
 public void Travel(IWriteVisitor visitor, object graph)
 {
     Travel(visitor, (Category)graph);
 }
コード例 #17
0
 public void Travel(IWriteVisitor visitor, Category graph)
 {
     visitor.VisitValue(graph.Name, _argsName0);
     visitor.VisitValue(graph.Description, _argsDescription1);
     visitor.VisitValue(graph.Image, _argsImage2);
 }
コード例 #18
0
ファイル: ComplexGraphType.cs プロジェクト: jaygumji/EnigmaDb
 public void Visit(object graph, IWriteVisitor visitor)
 {
     foreach (var property in _properties)
         property.Visit(graph, visitor);
 }
コード例 #19
0
 void IGraphTraveller.Travel(IWriteVisitor visitor, object graph)
 {
     Travel(visitor, (TDictionary)graph);
 }
コード例 #20
0
 public void Travel(IWriteVisitor visitor, object graph)
 {
     Travel(visitor, (Identifier)graph);
 }
コード例 #21
0
 public void Travel(IWriteVisitor visitor, object graph)
 {
     Travel(visitor, (DataBlock)graph);
 }
コード例 #22
0
ファイル: IValueVisitor.cs プロジェクト: jaygumji/Enigma
 void IValueVisitor.VisitValue(IWriteVisitor visitor, VisitArgs args, object value)
 {
     VisitValue(visitor, args, (T)value);
 }
コード例 #23
0
ファイル: Int16GraphType.cs プロジェクト: jaygumji/Enigma
        public void Visit(object graph, IWriteVisitor visitor)
        {
            var value = (Int16)_property.Ref.GetValue(graph);

            visitor.VisitValue(value, _args);
        }
コード例 #24
0
 public void Travel(IWriteVisitor visitor, Identifier graph)
 {
     visitor.VisitValue(graph.Id, _argsId0);
     visitor.VisitValue((int)graph.Type, _argsType1);
 }
コード例 #25
0
        public void Travel(IWriteVisitor visitor, DataBlock graph)
        {
            visitor.VisitValue(graph.Id, _argsId);
            visitor.VisitValue(graph.String, _argsString);
            visitor.VisitValue(graph.Int16, _argsInt16);
            visitor.VisitValue(graph.Int32, _argsInt32);
            visitor.VisitValue(graph.Int64, _argsInt64);
            visitor.VisitValue(graph.UInt16, _argsUInt16);
            visitor.VisitValue(graph.UInt32, _argsUInt32);
            visitor.VisitValue(graph.UInt64, _argsUInt64);
            visitor.VisitValue(graph.Single, _argsSingle);
            visitor.VisitValue(graph.Double, _argsDouble);
            visitor.VisitValue(graph.TimeSpan, _argsTimeSpan);
            visitor.VisitValue(graph.Decimal, _argsDecimal);
            visitor.VisitValue(graph.DateTime, _argsDateTime);
            visitor.VisitValue(graph.Byte, _argsByte);
            visitor.VisitValue(graph.Boolean, _argsBoolean);
            visitor.VisitValue(graph.Blob, _argsBlob);

            {
                var c = graph.Messages;
                visitor.Visit(c, _argsMessages);

                if (c != null)
                {
                    foreach (var cv in c)
                    {
                        visitor.VisitValue(cv, VisitArgs.CollectionItem);
                    }
                }

                visitor.Leave(c, _argsMessages);
            }

            {
                var c = (ICollection <DateTime>)graph.Stamps;
                visitor.Visit(c, _argsStamps);
                if (c != null)
                {
                    foreach (var cv in c)
                    {
                        visitor.VisitValue(cv, VisitArgs.CollectionItem);
                    }
                }

                visitor.Leave(c, _argsStamps);
            }

            {
                var c = graph.Relation;
                visitor.Visit(c, _argsRelation);
                if (c != null)
                {
                    _travellerRelation0.Travel(visitor, c);
                }
                visitor.Leave(c, _argsRelation);
            }

            {
                var c = graph.DummyRelation;
                visitor.Visit(c, _argsDummyRelation);
                if (c != null)
                {
                    _travellerRelation0.Travel(visitor, c);
                }
                visitor.Leave(c, _argsDummyRelation);
            }

            {
                var c = (ICollection <Relation>)graph.SecondaryRelations;
                visitor.Visit(c, _argsSecondaryRelations);
                if (c != null)
                {
                    foreach (var cv in c)
                    {
                        visitor.Visit(cv, VisitArgs.CollectionItem);
                        _travellerRelation0.Travel(visitor, cv);
                        visitor.Leave(cv, VisitArgs.CollectionItem);
                    }
                }

                visitor.Leave(c, _argsSecondaryRelations);
            }

            {
                var c = (IDictionary <string, int>)graph.IndexedValues;
                visitor.Visit(c, _argsIndexedValues);
                if (c != null)
                {
                    foreach (var ckv in c)
                    {
                        visitor.VisitValue(ckv.Key, VisitArgs.DictionaryKey);
                        visitor.VisitValue(ckv.Value, VisitArgs.DictionaryValue);
                    }
                }
                visitor.Leave(c, _argsIndexedValues);
            }

            {
                var c = (IDictionary <Identifier, Category>)graph.Categories;
                visitor.Visit(c, _argsCategories);
                if (c != null)
                {
                    foreach (var ckv in c)
                    {
                        visitor.Visit(ckv.Key, VisitArgs.DictionaryKey);
                        _travellerIdentifier1.Travel(visitor, ckv.Key);
                        visitor.Leave(ckv.Key, VisitArgs.DictionaryKey);

                        visitor.Visit(ckv.Value, VisitArgs.DictionaryValue);
                        _travellerCategory2.Travel(visitor, ckv.Value);
                        visitor.Leave(ckv.Value, VisitArgs.DictionaryValue);
                    }
                }
                visitor.Leave(c, _argsCategories);
            }
        }
コード例 #26
0
ファイル: IValueVisitor.cs プロジェクト: jaygumji/Enigma
 public override void VisitValue(IWriteVisitor visitor, VisitArgs args, DateTime value)
 {
     visitor.VisitValue(value, args);
 }
コード例 #27
0
 public void Travel(IWriteVisitor visitor, object graph)
 {
     Travel(visitor, (Relation)graph);
 }
コード例 #28
0
ファイル: IValueVisitor.cs プロジェクト: jaygumji/Enigma
 public abstract void VisitValue(IWriteVisitor visitor, VisitArgs args, T value);
コード例 #29
0
ファイル: Int16GraphType.cs プロジェクト: jaygumji/EnigmaDb
 public void Visit(object graph, IWriteVisitor visitor)
 {
     var value = (Int16) _property.Ref.GetValue(graph);
     visitor.VisitValue(value, _args);
 }
コード例 #30
0
ファイル: IValueVisitor.cs プロジェクト: jaygumji/Enigma
 public override void VisitValue(IWriteVisitor visitor, VisitArgs args, byte[] value)
 {
     visitor.VisitValue(value, args);
 }