PasDoc's autodoc |
Unit PasDoc_HashesFunctions and Procedures Constants Variables Description
This unit implements an associative array. Before writing this unit, I've always missed Perl commands like
Version 0.9.1 (works fine, don't know a bug, but 1.0? No, error checks are missing!) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Thanks to:
Be warned:
Programmer's information:
How to use this unit: Simply put this unit in your uses line. You can use a new class - THash. Initialize a hash (assuming "var h: THash;"): h:=THash.Create; Save a String: h.SetString('key','value'); //perl: $h{key}='value' Get the String back: string_var:=h.GetString('key'); //perl: $string_var=$h{key} returns '' if 'key' is not set Test if a key has been set: if h.KeyExists('key') then... //perl: if (exists $h{key}) ... returns a boolean Delete a key h.DeleteKey('key'); //perl: delete $h{key}; Which keys do exist? stringlist:=h.Keys; //perl: @list=keys %h; returns a TStringList Which keys do exist beginning with a special string? stinglist:=h.Keys('abc'); returns all keys beginning with 'abc' //perl: @list=grep /ˆabc/, keys %h; How many keys are there? number_of_keys:=h.Count; //perl: $number=scalar keys %hash; How many keys fit in memory allocated by THash? c:=h.Capacity; (property) THash automatically increases h.Capacity if needed. This property is similar to Delphi's TList.Capacity property. Note #1: You can't decrease h.Capacity. Note #2: Capacity must be 2**n -- Create sets Capacity:=8; The same: Capacity:=17; , Capacity:=32; I know there will be 4097 key/values in my hash. I don't want the hash's capacity to be 8192 (wasting 50% ram). What to do? h.MaxCapacity:=4096; => Capacity will never be > 4096. Note: You can store more than MaxCapacity key/values in the hash (as many as you want) but Count should be >= Capacity for best performance. MaxCapacity is -1 by default, meaning no limit. Delete the hash h.Free; OR h.Destroy; Instead of just strings you can also save objects in my hash - anything that is a pointer can be saved. Similar to SetString and GetString there are SetObject and GetObject. The latter returns nil if the key is unknown. You can use both Set/GetString and Set/GetObject for a single key string - no problem. But if DeleteKey is called, both the string and the pointer are lost. If you want to store a pointer and a string, it is faster to call SetStringObject(key,string,pointer) than SetString and SetObject. The same is true getting the data back - GetString and GetObject are significantly slower then a singe call to GetStringObject(key, var string, var pointer). Happy programming! Uses
OverviewClasses, Interfaces, Objects and Records
Types
DescriptionTypes
AuthorGenerated by PasDoc 0.15.0. |