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)); } }
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); }
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 ); }
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()); } } }
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()); } }
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); }