## LGenerics
Collection of generic algorithms and data structures entirely written in/for FPC and Lazarus. Started as a self-education project, it now seems quite comfortable and fast. In order to use it (FPC 3.2.2 and higher and Lazarus 2.2.0 and higher):
open and compile package lgenerics/LGenerics.lpk.
add LGenerics package to project dependencies.
stack(unit lgStack)
queue(unit lgQueue)
deque(unit lgDeque)
vector(unit lgVector)
vector of bits(unit lgVector)
priority queue based on binary heap(unit lgPriorityQueue)
priority queue with key update and melding based on pairing heap(unit lgPriorityQueue)
sorted list(unit lgList)
hashed list - array based list with the ability to fast search by key(unit lgList)
hashset(unit lgHashSet)
fine-grained concurrent hashset(unit lgHashSet)
sorted set(unit lgTreeSet)
set of arbitrary size(unit lgUtil, TGSet)
hash multiset(unit lgHashMultiSet)
fine-grained concurrent hashmultiset(unit lgHashMultiSet)
sorted multiset(unit lgTreeMultiSet)
hashmap(unit lgHashMap)
fine-grained concurrent hashmap(unit lgHashMap)
sorted map(unit lgTreeMap)
hash multimap(unit lgMultiMap)
tree multimap(unit lgMultiMap)
list miltimap(unit lgMultiMap)
bijective map(unit lgBiMap)
sparse 2D table(unit lgTable2D)
disjoint set(unit lgHashSet)
AVL tree(unit lgAvlTree)
red-black tree(unit lgRbTree)
some treap variants(unit lgTreap)
general rooted tree(unit lgRootTree)
sparse labeled undirected graph(unit lgSimpleGraph)
sparse labeled directed graph(unit lgSimpleDigraph)
features:
extended IEnumearble interface - filtering, mapping, etc.
lite containers based on advanced records
core functions:
connectivity:
traversals:
operations:
chordality testing
planarity testing: FMR Left-Right Planarity algorithm
distance within graph:
matching:
dominators in flowgraps: simple iterative and Semi-NCA algorithms
some suggestions for NP-hard problems:
minimum spanning trees: Prims's and Kruskal's algorithms
single source shortest paths:
single pair shortest paths:
all pairs shortest paths:
networks:
reverse, right/left cyclic shifts
permutations
binary search
N-th order statistics
inversion counting
distinct values selection
introsort
mergesort
timsort(unit lgMiscUtils)
counting sort
radix sort
translation of Orson Peters' PDQSort algorithm
static segment tree
longest increasing subsequence
...
Boyer-Moore string matching algorithm(in Fast Search variant)
Boyer-Moore-Horspool-Raita algorithm
Aho-Corasick automation for multiple string matching
longest common subsequence of two sequences:
Levenshtein distance:
LCS distance:
restricted Damerau-Levenshtein distance
fuzzy string matching with k differences
fuzzy string matching with k mismatches
fuzzy string matching with preprocessing(something similar to fuzzywuzzy)
non-cryptogarphic hashes(unit lgHash):
brief and dirty implementation of futures concept(unit lgAsync)
brief channel implementation(unit lgAsync)
brief implementation of thread pool(unit lgAsync)
128-bit integers(unit lgInt128)
JSON validator/parser/generator(unit lgJson)
JSON Patch/Diff(unit lgJson)
JSON serialization/deserialization of native Pascal data structures using RTTI(unit lgPdo)
JSON Type Definition schemas(unit lgJsonTypeDef)
JSONPath implementation(unit LgJsonPath)
CSV document processing(unit lgCsvUtils)
Eisel-Lemire fast string-to-double conversion algorithm(unit lgJson)
Ryū double-to-string conversion algorithm(unit lgJson)