Esempio n. 1
0
        public void CreateTest()
        {
            AreEqual(RWHelper.CreateRW(new Dictionary <string, object>()).GetType().Name, "DictionaryRW`3");
            AreEqual(RWHelper.CreateRW(new ReadOnlyDictionary <string, object>(new Dictionary <string, object>())).GetType().Name, "DictionaryRW`3");
            AreEqual(RWHelper.CreateRW(new ConcurrentDictionary <string, object>()).GetType().Name, "DictionaryRW`3");
            AreEqual(RWHelper.CreateRW(new SortedDictionary <string, object>()).GetType().Name, "DictionaryRW`3");
            AreEqual(RWHelper.CreateRW(new SortedList <string, object>()).GetType().Name, "DictionaryRW`3");

            AreEqual(RWHelper.CreateRW(new List <object>()).GetType().Name, "ListRW`2");
            AreEqual(RWHelper.CreateRW(new ReadOnlyCollection <object>(new List <object>())).GetType().Name, "ListRW`2");
            AreEqual(RWHelper.CreateRW(new Collection <object>()).GetType().Name, "ListRW`2");

            AreEqual(RWHelper.CreateRW(new LinkedList <object>()).GetType().Name, "CollectionRW`2");
            AreEqual(RWHelper.CreateRW(new HashSet <object>()).GetType().Name, "CollectionRW`2");
            AreEqual(RWHelper.CreateRW(new SortedSet <object>()).GetType().Name, "CollectionRW`2");

            AreEqual(RWHelper.CreateRW(new Hashtable()).GetType().Name, "DictionaryRW`1");
            AreEqual(RWHelper.CreateRW(new SortedList()).GetType().Name, "DictionaryRW`1");
            AreEqual(RWHelper.CreateRW(new OrderedDictionary()).GetType().Name, "DictionaryRW`1");
            AreEqual(RWHelper.CreateRW(new ListDictionary()).GetType().Name, "DictionaryRW`1");

            AreEqual(RWHelper.CreateRW(new ArrayList()).GetType().Name, "ListRW`1");
            AreEqual(RWHelper.CreateRW(new StringCollection()).GetType().Name, "ListRW`1");


            AreEqual(RWHelper.CreateRW(new DataSet()).GetType().Name, "DataSetRW`1");
            AreEqual(RWHelper.CreateRW(new DataTable()).GetType().Name, "DataTableRW`1");
            AreEqual(RWHelper.CreateRW(new DataTable().NewRow()).GetType().Name, "DataRowRW`1");

            AreEqual(GetCSharpName(RWHelper.CreateRW(new int[0]).GetType()), "Swifter.RW.ArrayRW<int>");
            AreEqual(GetCSharpName(RWHelper.CreateRW(new int[0, 0]).GetType()), "Swifter.RW.MultiDimArray<int[,],int>.FirstRW");
            AreEqual(GetCSharpName(RWHelper.CreateRW(new int[0, 0, 0]).GetType()), "Swifter.RW.MultiDimArray<int[,,],int>.FirstRW");


            AreEqual(RWHelper.CreateReader(new List <object>().GetEnumerator().AsEnumerable()).GetType().Name, "EnumeratorReader`2");
            AreEqual(RWHelper.CreateReader(new List <object>().GetEnumerator()).GetType().Name, "EnumeratorReader`2");
            AreEqual(RWHelper.CreateReader(new ArrayList().GetEnumerator().AsEnumerable()).GetType().Name, "EnumeratorReader`1");
            AreEqual(RWHelper.CreateReader(new ArrayList().GetEnumerator()).GetType().Name, "EnumeratorReader`1");

            AreEqual(RWHelper.CreateReader(new DataTable().CreateDataReader()).GetType().Name, "DbDataReaderReader");

            AreEqual(
                RWHelper.CreateItemRW(RWHelper.CreateRW(new { Data = new Dictionary <string, object>() }).As <string>(), "Data").GetType().Name,
                "DictionaryRW`3");

            AreEqual(
                RWHelper.CreateItemReader(RWHelper.CreateRW(new { Data = new DataTable().CreateDataReader() }).As <string>(), "Data").GetType().Name,
                "DbDataReaderReader");

            Catch <NotSupportedException>(() => RWHelper.CreateRW("err"));

            var asTester = (IAsDataRW)RWHelper.CreateRW(new int[0]).As <string>();

            Catch <SuccessException>(() => asTester.InvokeTIn(new AsTestInvoker <int>()));
            Catch <SuccessException>(() => asTester.InvokeTOut(new AsTestInvoker <string>()));
        }
 public void SetRoot(IDataWriter dataWriter)
 {
     if (dataWriter is IDataReader reader)
     {
         root = reader;
     }
     else
     {
         root = RWHelper.CreateReader(RWHelper.GetContent <object>(dataWriter));
     }
 }
Esempio n. 3
0
        public static bool Equals <TValue>(TValue x, TValue y)
        {
            if (EqualityComparer <TValue> .Default.Equals(x, y))
            {
                return(true);
            }

            if (x is double dx && y is double dy)
            {
                return(Almost(dx, dy));
            }

            if (x is float fx && y is float fy)
            {
                return(Almost(fx, fy));
            }


            if (x != null && y != null)
            {
                var rw1 = RWHelper.CreateReader(x, false);
                var rw2 = RWHelper.CreateReader(y, false);

                if (rw1 != null && rw2 != null)
                {
                    if (rw1.Count != rw2.Count)
                    {
                        return(false);
                    }

                    if (rw1 is IDataReader <string> strRW1 && rw2 is IDataReader <string> strRW2)
                    {
                        return(Equals(strRW1, strRW2));
                    }
                    if (rw1 is IDataReader <int> iRW1 && rw2 is IDataReader <int> iRW2)
                    {
                        return(Equals(iRW1, iRW2));
                    }
                    else
                    {
                        return(Equals(rw1.As <string>(), rw2.As <string>()));
                    }
                }

                return(rw1 == rw2);
            }

            return(false);
        }
Esempio n. 4
0
        public void XSkipDefaultValueTest()
        {
            var rw = XObjectRW.Create <SkipDefaultValueTester>();



            rw.Initialize();

            rw.OnWriteAll(RWHelper.CreateReader(new Dictionary <string, object> {
                { "Id", 123 },
                { "Name", null }
            }).As <string>());

            IsTrue(
                ValueInterface <Dictionary <string, object> > .ReadValue(ValueCopyer.ValueOf(rw)) is Dictionary <string, object> dic1 &&
                dic1.Count == 1 &&
                (int)dic1["Id"] == 123
                );



            rw.Initialize();

            rw.OnWriteAll(RWHelper.CreateReader(new Dictionary <string, object> {
                { "Id", 0 },
                { "Name", "Dogwei" }
            }).As <string>());

            IsTrue(
                ValueInterface <Dictionary <string, object> > .ReadValue(ValueCopyer.ValueOf(rw)) is Dictionary <string, object> dic2 &&
                dic2.Count == 1 &&
                (string)dic2["Name"] == "Dogwei"
                );



            rw.Initialize();

            rw.OnWriteAll(RWHelper.CreateReader(new Dictionary <string, object> {
                { "Id", 0 },
                { "Name", null }
            }).As <string>());

            IsTrue(
                ValueInterface <Dictionary <string, object> > .ReadValue(ValueCopyer.ValueOf(rw)) is Dictionary <string, object> dic3 &&
                dic3.Count == 0
                );
        }
Esempio n. 5
0
                public void Process()
                {
                    if (SourcePath.IsRoot)
                    {
                        DestinationPath.GetValueWriter(Destination).DirectWrite(Source.Content);
                    }
                    else
                    {
                        var dataReader = Source as IDataReader ?? RWHelper.CreateReader(Source.Content, false);

                        if (dataReader != null)
                        {
                            DestinationPath.GetValueWriter(Destination).DirectWrite(SourcePath.GetValueReader(dataReader).DirectRead());
                        }
                    }
                }
Esempio n. 6
0
        private static object InternalGetTarget(object obj, TargetPathInfo target)
        {
            if (target == null || target.IsRoot)
            {
                return(obj);
            }

            var dataReader = RWHelper.CreateReader(obj);

            dataReader = InternalGetTarget(dataReader, target.Parent);

            if (target.Name != null)
            {
                return(dataReader.As <string>()[target.Name].DirectRead());
            }
            else
            {
                return(dataReader.As <int>()[target.Index].DirectRead());
            }
        }
Esempio n. 7
0
        public unsafe static StringBuilder Format <T>(string text, T args)
        {
            if (text == null)
            {
                return(null);
            }

            var reader = RWHelper.CreateReader(args).As <string>();

            var builder = new StringBuilder();

            fixed(char *pChars = text)
            {
                var length = text.Length;

                var startIndex = 0;

                for (int i = 0; i < length; i++)
                {
                    if (pChars[i] == '\\' && i + 1 < length)
                    {
                        builder.Append(text, startIndex, i - startIndex);

                        builder.Append(pChars[i + 1]);

                        ++i;

                        startIndex = i + 1;

                        continue;
                    }

                    if (pChars[i] == '{')
                    {
                        if (length - i >= 3)
                        {
                            builder.Append(text, startIndex, i - startIndex);

                            startIndex = i;

                            for (++i; i < length; i++)
                            {
                                if (pChars[i] == '}')
                                {
                                    var name = new string(pChars, startIndex + 1, i - startIndex - 1);

                                    var value = reader[name].DirectRead();

                                    if (value is StringBuilder sb)
                                    {
                                        var sbLength = sb.Length;

                                        for (int s = 0; s < sbLength; s++)
                                        {
                                            builder.Append(sb[s]);
                                        }
                                    }
                                    else if (value != null)
                                    {
                                        builder.Append(value.ToString());
                                    }

                                    startIndex = i + 1;

                                    break;
                                }
                            }
                        }
                    }
                }

                builder.Append(text, startIndex, length - startIndex);
            }

            return(builder);
        }