diff --git a/DBFilesClient.NET/DBFilesClient.NET.nuspec b/DBFilesClient.NET/DBFilesClient.NET.nuspec index 867ea60..4f89621 100644 --- a/DBFilesClient.NET/DBFilesClient.NET.nuspec +++ b/DBFilesClient.NET/DBFilesClient.NET.nuspec @@ -8,6 +8,7 @@ Warpten false A blazing-fast DBC and DB2 file loader for World of Warcraft files. + http://github.com/Warpten/DBFilesClient.NET DBC DB2 WDBC WDB2 WDB3 WDB4 WDB5 WOW \ No newline at end of file diff --git a/DBFilesClient.NET/Properties/AssemblyInfo.cs b/DBFilesClient.NET/Properties/AssemblyInfo.cs index 51118b1..07fb42a 100644 --- a/DBFilesClient.NET/Properties/AssemblyInfo.cs +++ b/DBFilesClient.NET/Properties/AssemblyInfo.cs @@ -31,7 +31,7 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.1.4")] -[assembly: AssemblyFileVersion("1.1.4")] +[assembly: AssemblyVersion("1.1.5")] +[assembly: AssemblyFileVersion("1.1.5")] -[assembly: AssemblyInformationalVersion("1.1.4")] +[assembly: AssemblyInformationalVersion("1.1.5")] diff --git a/DBFilesClient.NET/Reader.cs b/DBFilesClient.NET/Reader.cs index 3179c5f..2aac5c9 100644 --- a/DBFilesClient.NET/Reader.cs +++ b/DBFilesClient.NET/Reader.cs @@ -65,9 +65,9 @@ internal virtual MethodInfo GetPrimitiveLoader(Type typeInfo, int fieldIndex) return _binaryReaderMethods[Type.GetTypeCode(typeInfo)]; } - internal virtual MethodInfo GetPrimitiveLoader(FieldInfo fieldInfo, int fieldIndex) + internal virtual MethodInfo GetPrimitiveLoader(PropertyInfo propertyInfo, int fieldIndex) { - var fieldType = fieldInfo.FieldType; + var fieldType = propertyInfo.PropertyType; if (fieldType.IsArray) fieldType = fieldType.GetElementType(); @@ -75,14 +75,13 @@ internal virtual MethodInfo GetPrimitiveLoader(FieldInfo fieldInfo, int fieldInd if (typeCode == TypeCode.Object) return null; - MethodInfo methodInfo; - _binaryReaderMethods.TryGetValue(typeCode, out methodInfo); + _binaryReaderMethods.TryGetValue(typeCode, out MethodInfo methodInfo); return methodInfo; } - private Expression GetSimpleReaderExpression(FieldInfo fieldInfo, int fieldIndex, Expression readerExpr) + private Expression GetSimpleReaderExpression(PropertyInfo propertyInfo, int fieldIndex, Expression readerExpr) { - var fieldType = fieldInfo.FieldType; + var fieldType = propertyInfo.PropertyType; if (fieldType.IsArray) fieldType = fieldType.GetElementType(); @@ -106,7 +105,7 @@ private Expression GetSimpleReaderExpression(FieldInfo fieldInfo, int fieldIndex Expression callExpression; if (typeCode != TypeCode.Object) { - var callVirt = GetPrimitiveLoader(fieldInfo, fieldIndex); + var callVirt = GetPrimitiveLoader(propertyInfo, fieldIndex); callExpression = Expression.Call(readerExpr, callVirt); } @@ -139,27 +138,27 @@ protected virtual void GenerateRecordLoader() // Instantiate the return value. expressions.Add(Expression.Assign(resultExpr, Expression.New(typeof(T)))); - var fields = typeof(T).GetFields(BindingFlags.Public | BindingFlags.Instance).ToArray(); + var fields = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance).ToArray(); if (fields.Length < FileHeader.FieldCount) throw new InvalidOperationException( - $"Structure {typeof(T).Name} is missing fields ({fields.Length} found, {FileHeader.FieldCount} expected"); + $"Structure {typeof(T).Name} is missing properties ({fields.Length} found, {FileHeader.FieldCount} expected"); for (var fieldIndex = 0; fieldIndex < FileHeader.FieldCount; ++fieldIndex) { - var fieldInfo = fields[fieldIndex]; + var propertyInfo = fields[fieldIndex]; - var callExpression = GetSimpleReaderExpression(fieldInfo, fieldIndex, readerExpr); + var callExpression = GetSimpleReaderExpression(propertyInfo, fieldIndex, readerExpr); - if (!fieldInfo.FieldType.IsArray) + if (!propertyInfo.PropertyType.IsArray) { expressions.Add(Expression.Assign( - Expression.MakeMemberAccess(resultExpr, fieldInfo), - Expression.Convert(callExpression, fieldInfo.FieldType))); + Expression.MakeMemberAccess(resultExpr, propertyInfo), + Expression.Convert(callExpression, propertyInfo.PropertyType))); } else { - var arraySize = GetArraySize(fieldInfo, fieldIndex); + var arraySize = GetArraySize(propertyInfo, fieldIndex); var exitLabelExpr = Expression.Label(); var itrExpr = Expression.Variable(typeof(int)); @@ -167,8 +166,8 @@ protected virtual void GenerateRecordLoader() new[] { itrExpr }, // ReSharper disable once AssignNullToNotNullAttribute Expression.Assign( - Expression.MakeMemberAccess(resultExpr, fieldInfo), - Expression.New(fieldInfo.FieldType.GetConstructor(new[] { typeof(int) }), + Expression.MakeMemberAccess(resultExpr, propertyInfo), + Expression.New(propertyInfo.PropertyType.GetConstructor(new[] { typeof(int) }), Expression.Constant(arraySize)) ), @@ -177,9 +176,9 @@ protected virtual void GenerateRecordLoader() Expression.IfThenElse( Expression.LessThan(itrExpr, Expression.Constant(arraySize)), Expression.Assign( - Expression.ArrayAccess(Expression.MakeMemberAccess(resultExpr, fieldInfo), + Expression.ArrayAccess(Expression.MakeMemberAccess(resultExpr, propertyInfo), Expression.PostIncrementAssign(itrExpr)), - Expression.Convert(callExpression, fieldInfo.FieldType.GetElementType())), + Expression.Convert(callExpression, propertyInfo.PropertyType.GetElementType())), Expression.Break(exitLabelExpr)), exitLabelExpr) )); @@ -191,11 +190,11 @@ protected virtual void GenerateRecordLoader() RecordReader = Expression.Lambda, T>>(expressionBlock, readerExpr).Compile(); } - protected virtual int GetArraySize(FieldInfo fieldInfo, int fieldIndex) + protected virtual int GetArraySize(PropertyInfo propertyInfo, int fieldIndex) { - var marshalAttr = fieldInfo.GetCustomAttribute(); + var marshalAttr = propertyInfo.GetCustomAttribute(); if (marshalAttr == null) - throw new InvalidOperationException($"Field '{typeof(T).Name}.{fieldInfo.Name} is an array and needs to be decorated with MarshalAsAttribute!"); + throw new InvalidOperationException($"Field '{typeof(T).Name}.{propertyInfo.Name} is an array and needs to be decorated with MarshalAsAttribute!"); return marshalAttr.SizeConst; } diff --git a/DBFilesClient.NET/WDB5/Reader.cs b/DBFilesClient.NET/WDB5/Reader.cs index 45b9157..be67426 100644 --- a/DBFilesClient.NET/WDB5/Reader.cs +++ b/DBFilesClient.NET/WDB5/Reader.cs @@ -47,11 +47,11 @@ internal override MethodInfo GetPrimitiveLoader(Type fieldType, int fieldIndex) return base.GetPrimitiveLoader(fieldType, fieldIndex); } - internal override MethodInfo GetPrimitiveLoader(FieldInfo fieldInfo, int fieldIndex) + internal override MethodInfo GetPrimitiveLoader(PropertyInfo propertyInfo, int fieldIndex) { var fieldData = FieldMeta[fieldIndex]; - var fieldType = fieldInfo.FieldType; + var fieldType = propertyInfo.PropertyType; if (fieldType.IsArray) fieldType = fieldType.GetElementType(); @@ -78,12 +78,12 @@ internal override MethodInfo GetPrimitiveLoader(FieldInfo fieldInfo, int fieldIn : base.GetPrimitiveLoader(typeof (byte), fieldIndex); default: throw new ArgumentOutOfRangeException( - $@"Field {fieldInfo.Name} has its metadata expose as an unsupported { + $@"Field {propertyInfo.Name} has its metadata expose as an unsupported { fieldData.ByteSize}-bytes field!"); } } - return base.GetPrimitiveLoader(fieldInfo, fieldIndex); + return base.GetPrimitiveLoader(propertyInfo, fieldIndex); } public override string ReadString() @@ -259,23 +259,23 @@ protected virtual void LoadRecord(long recordPosition, int key, bool forceKey = } } - protected override int GetArraySize(FieldInfo fieldInfo, int fieldIndex) + protected override int GetArraySize(PropertyInfo propertyInfo, int fieldIndex) { var currentField = FieldMeta[fieldIndex]; var arraySize = 1; if (fieldIndex + 1 < FieldMeta.Length) arraySize = (FieldMeta[fieldIndex + 1].Position - currentField.Position) / currentField.ByteSize; - else if (fieldInfo.FieldType.IsArray) + else if (propertyInfo.PropertyType.IsArray) { var largestFieldSize = FieldMeta.Max(k => k.ByteSize); var smallestFieldSize = FieldMeta.Min(k => k.ByteSize); if (smallestFieldSize != largestFieldSize) { - var marshalAttr = fieldInfo.GetCustomAttribute(); + var marshalAttr = propertyInfo.GetCustomAttribute(); if (marshalAttr == null) - throw new InvalidStructureException($"{typeof(T).Name}.{fieldInfo.Name}'s size can't be guessed!"); + throw new InvalidStructureException($"{typeof(T).Name}.{propertyInfo.Name}'s size can't be guessed!"); if (marshalAttr.SizeConst != 0) arraySize = marshalAttr.SizeConst; diff --git a/DBFilesClient.NET/WDB6/Reader.cs b/DBFilesClient.NET/WDB6/Reader.cs index e20e399..a76eec7 100644 --- a/DBFilesClient.NET/WDB6/Reader.cs +++ b/DBFilesClient.NET/WDB6/Reader.cs @@ -70,9 +70,9 @@ protected override void GenerateRecordLoader() BaseStream.Position = BaseStream.Length - FileHeader.CommonDataTableSize; var columnCount = ReadInt32(); - var fields = typeof (T).GetFields(BindingFlags.Public | BindingFlags.Instance).ToArray(); + var fields = typeof (T).GetProperties(BindingFlags.Public | BindingFlags.Instance).ToArray(); for (var i = 0; i < columnCount; ++i) - _nonZeroValues[i] = new CommonData(this, fields[i].FieldType); + _nonZeroValues[i] = new CommonData(this, fields[i].PropertyType); // Generate an Action, T, int> var expressionList = new List(); @@ -81,12 +81,12 @@ protected override void GenerateRecordLoader() var structureExpr = Expression.Parameter(typeof (T)); for (var i = FileHeader.FieldCount; i < FileHeader.TotalFieldCount; ++i) { - var fieldInfo = fields[i]; - if (fieldInfo.FieldType.IsArray) + var propertyInfo = fields[i]; + if (propertyInfo.PropertyType.IsArray) throw new InvalidOperationException("Array fields in off-stream data are not handled"); MethodInfo convertMethod = null; - switch (Type.GetTypeCode(fieldInfo.FieldType)) + switch (Type.GetTypeCode(propertyInfo.PropertyType)) { case TypeCode.Int32: convertMethod = typeof(Convert).GetMethod("ToInt32", new[] {typeof(object)}); @@ -124,8 +124,8 @@ protected override void GenerateRecordLoader() Expression.IfThen( Expression.NotEqual(localExpr, Expression.Constant(null)), Expression.Assign( - Expression.MakeMemberAccess(structureExpr, fieldInfo), - Expression.Convert(localExpr, fieldInfo.FieldType))))); + Expression.MakeMemberAccess(structureExpr, propertyInfo), + Expression.Convert(localExpr, propertyInfo.PropertyType))))); } var lambda = Expression.Lambda, T, int>>( @@ -176,23 +176,23 @@ protected override void LoadRecord(long recordPosition, int key, bool forceKey = TriggerRecordLoaded(key, record); } - protected override int GetArraySize(FieldInfo fieldInfo, int fieldIndex) + protected override int GetArraySize(PropertyInfo propertyInfo, int fieldIndex) { var currentField = FieldMeta[fieldIndex]; var arraySize = 1; if (fieldIndex + 1 < FieldMeta.Length) arraySize = (FieldMeta[fieldIndex + 1].Position - currentField.Position) / currentField.ByteSize; - else if (fieldInfo.FieldType.IsArray) + else if (propertyInfo.PropertyType.IsArray) { var largestFieldSize = FieldMeta.Max(k => k.ByteSize); var smallestFieldSize = FieldMeta.Min(k => k.ByteSize); if (smallestFieldSize != largestFieldSize) { - var marshalAttr = fieldInfo.GetCustomAttribute(); + var marshalAttr = propertyInfo.GetCustomAttribute(); if (marshalAttr == null) - throw new InvalidStructureException($"{typeof(T).Name}.{fieldInfo.Name}'s size can't be guessed!"); + throw new InvalidStructureException($"{typeof(T).Name}.{propertyInfo.Name}'s size can't be guessed!"); if (marshalAttr.SizeConst != 0) arraySize = marshalAttr.SizeConst; diff --git a/DBFilesClient.NET/WDBC/Reader.cs b/DBFilesClient.NET/WDBC/Reader.cs index 884a6a5..e880598 100644 --- a/DBFilesClient.NET/WDBC/Reader.cs +++ b/DBFilesClient.NET/WDBC/Reader.cs @@ -24,10 +24,10 @@ protected override void LoadHeader() FileHeader.HasStringTable = FileHeader.StringTableSize != 0; FileHeader.StringTableOffset = BaseStream.Length - FileHeader.StringTableSize; - foreach (var fieldInfo in typeof (T).GetFields(BindingFlags.Public | BindingFlags.Instance)) + foreach (var propertyInfo in typeof (T).GetProperties(BindingFlags.Public | BindingFlags.Instance)) { - if (fieldInfo.FieldType.IsArray) - FileHeader.FieldCount += fieldInfo.GetCustomAttribute()?.SizeConst ?? 0; + if (propertyInfo.PropertyType.IsArray) + FileHeader.FieldCount += propertyInfo.GetCustomAttribute()?.SizeConst ?? 0; else ++FileHeader.FieldCount; } diff --git a/DBFilesClient.NET/nuget.exe b/DBFilesClient.NET/nuget.exe new file mode 100644 index 0000000..a34c367 Binary files /dev/null and b/DBFilesClient.NET/nuget.exe differ diff --git a/Tests/ReaderTest.cs b/Tests/ReaderTest.cs index d88218a..8fa2e88 100644 --- a/Tests/ReaderTest.cs +++ b/Tests/ReaderTest.cs @@ -70,11 +70,11 @@ public void SpellXSpellVisual() private static void PrintRecord(int key, T instance) { - foreach (var field in typeof(T).GetFields()) + foreach (var field in typeof(T).GetProperties()) { var value = field.GetValue(instance); - if (field.FieldType.IsArray) + if (field.PropertyType.IsArray) { var enumerableValue = value as IEnumerable; var valueBuilder = new List();