I'm pleased to finally announce next release of rtl-generics aka Generics.Collections 2.0
version for trunk available in trunk ;) version for 3.0.4 available at : https://github.com/maciej-izak/generics.collections What is new: * New collections: - TSortedList<T> - THashSet<T> - TAVLTreeMap<TKey, TValue> - TIndexedAVLTreeMap<TKey, TValue> - TAVLTree<T> - TIndexedAVLTree<T> - TSortedSet<T> - TSortedHashSet<T> (this one collection is especially interesting - optimized mix of dictionary and AVL tree) * New hash functions (the optimal hash function for collections is selected depending on environment) * Bug fixes * Tests * My favorite and related to my compiler stuff like management operators (also related to all managed types) : new Ptr property for all collections. How it works and what is the gain? Simple example: ====== code begin ====== type TIntfObject = class(TInterfacedObject, IUnknown) protected function _AddRef : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; function _Release : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; end; function TIntfObject._AddRef: longint; stdcall; begin Writeln('_AddRef'); Result := inherited; end; function TIntfObject._Release: longint; stdcall; begin Result := inherited; Writeln('_Release'); end; procedure Test; var List: TList<IInterface>; item: IInterface; itemPtr: ^IInterface; begin WriteLn('--- initialization ---'); List := TList<IInterface>.Create; List.Add(TIntfObject.Create); List.Add(TIntfObject.Create); List.Add(TIntfObject.Create); WriteLn('--- ptr loop ---'); for itemPtr in List.Ptr^ do { something }; WriteLn('--- loop ---'); for item in List do { something }; WriteLn('--- finalization ---'); List.Free; end; begin Test; WriteLn('--- end ---'); end. ====== code end ====== Output: --- initialization --- _AddRef _AddRef _AddRef --- ptr loop --- --- loop --- _AddRef _AddRef _Release _AddRef _Release --- finalization --- _Release _Release _Release _Release --- end --- by usage pointer as enumerator was possible to omit all _AddRef & _Release calls. The optimization is highly visible for extensive usage of managed types. Acknowledgment / credits: Thanks to Sphere 10 Software (http://sphere10.com) for sponsoring many new types and major refactoring of entire library Thanks to mORMot (http://synopse.info) project for the best implementations of hashing functions like crc32c and xxHash32 :) -- Best regards, Maciej Izak
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal