|
New TDIStringVector.
New TDIStringCardinalVector.
New TDIString2Vector.
New TDIString2CardinalVector.
New TDIStringHash.
Fix bugs with WideString / UnicodeString comparisons in FindValueCS / FindValueCI (i.e. for TDIVector containers).
Additions and bug fixes to DIUtils.
Delphi 2010 support.
Implement UnicodeString / WideString versions for TDIUnicodeStringVector.LoadNamesFromTextFile and TDIUnicodeString2Vector.LoadValuesFromTextFile, as well as for their respective TDIVector and TDIList classe descendants.
Add the missing TDIObjectHash.ObjectAt property.
Work around an unexpected Delphi 2009 automatic numeric AnsiChar Unicode conversion in DIUtils.pas which caused an error when compiled on a Windows OS set to a non-European (Asian, Cyrillic, etc.) codepage.
Delphi 2009 support. In older Delphi versions, UnicodeString automatically falls back to WideString.
New UnicodeString containers:
TDIUnicodeStringHash, TDIUnicodeStringList, TDIUnicodeStringTree, TDIUnicodeStringVector.
TDIUnicodeStringCardinalList, TDIUnicodeStringCardinalTree, TDIUnicodeStringCardinalVector.
TDIUnicodeStringIntegerList, TDIUnicodeStringIntegerTree, TDIUnicodeStringIntegerVector.
TDIUnicodeStringObjectList + DIUnicodeStringObjectOwnerList, TDIUnicodeStringObjectTree + DIUnicodeStringObjectTree, TDIUnicodeStringObjectVector + DIUnicodeStringObjectOwnerVector.
TDIUnicodeStringPointerList + DIUnicodeStringPointerOwnerList, TDIUnicodeStringPointerTree + DIUnicodeStringPointerTree, TDIUnicodeStringPointerVector + DIUnicodeStringPointerOwnerVector.
TDIUnicodeString2List, TDIUnicodeString2Tree, TDIUnicodeString2Vector.
TDIUnicodeString2CardinalList, TDIUnicodeString2CardinalTree, TDIUnicodeString2CardinalVector,
New containers:
TDIWideStringPointerList, DIWideStringPointerOwnerList.
TDIWideStringPointerTree, DIWideStringPointerTree.
TDIWideStringPointerVector, DIWideStringPointerOwnerVector.
Improve compatibility for parallel installation with other DI packages.
Added support for Delphi 2006 Win32.
Added the the functions MaxNumber and MinNumber the the Number list and vector containers.
Fixed a bug where TDIHash.Clear did not reset an internal variable which could result in an access violation when adding new items.
Compatibility with other DI products.
Added support for Delphi 2005 Win32.
Added support for the new Delphi 2005 for Item in Container do iterator syntax.
Multiple speed optimizations:
Reduced number of arguments to most of the TDIItemHandler's methods.
Faster hash functions for strings and character data.
Other, internal speed optimizations.
New typed properties NameOf, ValueOf, NumberOf, and so on with user specified compare function.
Some new typed containers.
Various other improvements.
AddressBook example project did not compile with the latest updated components.
Minor bug fixes and optimizations.
Improved Help.
Added missing range checking code for TDIHash containers.
Added TDIIntegerHash container and additional WideString containers.
Added DINullItemHandler to ease creation of simple lookup hash containers which do not need any data items.
Added TDIHash.ExistsKey and TDIHash.ExistsKeyBuf functions to quickly check if hash containers contain a certain keys without retrieving their values.
Added auto-generated *.hpp and *.obj files for using DIContainers with C++ Builder. This is for testing purposes only, DIContainers do not officially support C++ Builder.
Added various new typed containers, mostly concerned with WideStrings.
Corrected a pointer arithmetic bug in TDITree.MoveAfter, TDITree.MoveChildFirst, and TDITree.MoveChildLast procedures.
Code optimizations and minor bug fixes.
New typed containers added:
TDIPointerList, TDIPointerTree, TDIPointerVector, each holding Items of 1 Pointer. The TDIPointerVector is most similar to Delphi's TList object, but also inherits the additional methods and properties of TDIVector. Their data owner counterparts are in DIPointerOwnerList, DIPointerOwnerTree, and DIPointerOwnerVector.
TDIAnsiStringPointerList, TDIAnsiStringPointerTree, TDIAnsiStringPointerVector, each holding Items of 1 AnsiString and 1 Pointer, plus their data owner siblings in DIAnsiStringPointerOwnerList, DIAnsiStringPointerOwnerTree, DIAnsiStringPointerOwnerVector.
TDIAnsiStringInteger2List, TDIAnsiStringInteger2Tree, TDIAnsiStringInteger2Vector, each holding Items of 1 AnsiString and 2 Integer numbers.
Bug fixes.
Fixed a bug in TDIList.DeleteFirst and TDIList.DeleteLast which did not pass the correct pointer to TDIItemHandler.OnFreeItem.
Subclassed TDIReader and TDIWriter to TDIBinaryReader and TDIBinaryWriter respectively to allow more flexibility creating custom readers and writers.
Introduced the concept of Item Handlers and Key Handlers (TDIItemHandler / TDIKeyHandler). Containers now store just a reference to an Item handler instead of all different functions responsible for data handling. This results in a much reduced memory footprint: The empty TDIVector and its descendants have an InstanceSize of just 16 bytes, whereas Delphi's TStringList occupies 44 bytes.
Regorganized the assignment implementation. Instead of checking a container's class (heritage), TDIList.Assign, TDITree.Assign, etc. now work on containers with the same ItemHandler, using the ItemHandler's OnCopyItem for the actual copying.
Improved the streaming implementation, which also takes advantage of the new Item handlers. Streaming can now be customized by the TDIItemHandler.OnReadItem and TDIItemHandler.OnReadHeader as well as by setting the appropriate StreamInfo parameters when saving or loading. Streaming of nested containers is now also possible and custom version information may be included via the Extra parameter.
The Dictionary containers have been merged with the Hash containers. The TDIHash conatainer is now also able to maintain keys of variable length, thanks to the new TDIKeyHandler class the Dictionary containers are no longer needed.
All ready-made containers have been updated to use the new features, and a few new containers have been included.
Other improvements and bugfixes.
products/containers/history.txt · Last modified: 2010/04/25 00:17 (external edit)
|