TLX - A Collection of Sophisticated C++ Data Structures, Algorithms, and Miscellaneous Helpers

260
55
C++

tlx - Collection of C++ Data Structures, Algorithms, and Miscellaneous Helpers

tlx is a collection of C++ helpers and extensions universally needed, but not found in the STL.The most important design goals and conventions are:

  • high modularity with as little dependencies between modules as possible.
  • attempt to never break existing interfaces.
  • compile on all platforms with C++ – smartphones, supercomputers, windows, etc.
  • zero external dependencies: no additional libraries are required.
  • warning and bug-freeness on all compilers.
  • keep overhead down – small overall size such that is can be included without bloating applications.

—>> Doxygen Documentation <<—

Build Status
Build status
Coverage Status

List of the most commonly used components:

  • CountingPtr – an intrusive reference counting pointer
  • die() - Simple Invariant Testing : die(), die_unless(), die_if(), die_unequal().
  • logger.hpp : LOG, LOG1, LOGC, sLOG, wrap_unprintable().
  • Miscellaneous: timestamp(), unused(), vector_free().
  • Algorithms : merge_combine(), exclusive_scan(), multiway_merge(), parallel_multiway_merge(), multisequence_selection(), multisequence_partition().
  • Data Structures : RingBuffer, SimpleVector, StringView, B+ Trees, Loser Trees, RadixHeap, (Addressable) D-Ary Heap
  • Defines and Macros : TLX_LIKELY, TLX_UNLIKELY, TLX_ATTRIBUTE_PACKED, TLX_ATTRIBUTE_ALWAYS_INLINE, TLX_ATTRIBUTE_FORMAT_PRINTF, TLX_DEPRECATED_FUNC_DEF.
  • Message Digests : MD5, md5_hex(), SHA1, sha1_hex(), SHA256, sha256_hex(), SHA512, sha512_hex().
  • Math Functions : integer_log2_floor(), is_power_of_two(), round_up_to_power_of_two(), round_down_to_power_of_two(), ffs(), clz(), ctz(), abs_diff(), bswap32(), bswap64(), popcount(), power_to_the, Aggregate, PolynomialRegression.
  • String Algorithms : starts_with(), ends_with(), contains(), contains_word(), trim(), replace_all(), erase_all(), join(), split(), split_view(), split_words(), union_words(), split_quoted(), join_quoted(), to_lower(), hexdump(), bitdump_le8(), word_wrap(), escape_html(), parse_uri(), parse_uri_form_data(), parse_si_iec_units(), format_iec_units(), ssprintf(), expand_environment_variables(), levenshtein(), hash_djb2(), hash_sdbm().
  • Meta-Template Programming : call_foreach(), apply_tuple(), vmap_foreach(), Log2Floor, FunctionChain, FunctionStack, is_std_pair, is_std_tuple, is_std_vector, is_std_array, TLX_MAKE_HAS_MEMBER.
  • Sorting Algorithms : parallel_mergesort() (experimental parallel merge sort from MCSTL), sort_strings() (using radix sort and multikey quicksort), sort_strings_parallel() (using parallel super scalar string sample sort), sorting network for up to sixteen elements.
  • Backtrace Printing : print_cxx_backtrace().
  • Command Line Parsing : CmdlineParser.
  • Multi-Phase Timer: MultiTimer, ScopedMultiTimerSwitch, ScopedMultiTimer.
  • Fast Delegates : Delegate - a better std::function<> replacement.
  • SipHash : simple string hashing siphash()
  • StackAllocator : stack-local allocations
  • Threading : ThreadPool, Semaphore, ThreadBarrierMutex, ThreadBarrierSpin.

Bugs

Please report bugs via the github issue tracking system.

License

tlx is licensed under the Boost Software License - Version 1.0.

If you use tlx in an academic context or publication, please cite it as

@Misc{TLX,
  title = 	 {{TLX}: Collection of Sophisticated {C++} Data Structures, Algorithms, and Miscellaneous Helpers},
  author = 	 {Timo Bingmann},
  year = 	 2018,
  note = 	 {\url{https://panthema.net/tlx}, retrieved {Oct.} 7, 2020},
}