UpTools C++ library

UpTools is an open source development library in C++. It originated from the needs of the research and development projects of the Electronics and Communications department of the School of Engineering of the University of Palermo. Its license allows the library to be included both in commercial closed source and open source projects.

UpTools contains powerful tools to facilitate and accelerate the following aspects of modern application development:

1. High performance computing (HPC)
1.1 Load distribution and parallel processing in transactional applications.
1.2 Algorithms and scientific applications parallelization and acceleration.

UpTools facilitates workload partition and parallelization. The programmer has to define the data space partition criteria and the processing algorithms to run over the partitions, then UpTools divides the processing in jobs among the threads and also handles the consolidation of the results of each thread's job. It also manages and enables parallelism in transactional servers.

2. Multi-threading
2.1 Threads
2.2 Mutual exclusion (mutex), semaphores, read/write locks, scope automatic locking
2.3 Conditions
2.4 Thread-specific data

Internally UpTools multithreading classes and templates use Posix threads, but show a clear and simple interface to the C++ developer, considerably reducing errors and development time.

3. Time and timers
3.1 Time handling.
3.2 Timers and multithreading

It defines classes and methods for time handling. It reliably and orderly manages timers in multithreaded environments.

4. Memory management
4.1 Smart pointers and objects
4.2 Easy management and tracking of objects.in memory

The library includes smart pointers to manage the life of the objects in memory in multi-threaded environments. It has memory debug options, and allows tracking at runtime of the objects in memory.

5. Text and strings
5.1 Operators on strings
5.2 Regular expressions, substitutions
5.3 Configuration file parsing and management

UpTools includes multiple operators between strings and other types to facilitate text handling. It provides a powerful C++ interface for Posix regular expressions and substitutions. It manages application configuration files.

6. Databases
6.1 Common interface for different vendor databases
6.2 Database access in multithreaded environment

The library allows to access different databases without the need to alter the source code of the programs. It currently supports Postgresql and MySql, but it is expected to support also DB2 and others. It allows automatic management of backup database servers and transparently provides unique connections for each thread.

7. Networking
7.1 IP host and network address handling
7.2 DNS queries
7.3 Asynchronus DNS queries
7.4 Sockets
7.5 SSL and TLS
7.6 Simplified management of events in multiple simultaneous communications
7.7 Ultrafast route tables, enabling wirespeed lookups and insertions both for IPv4 and IPv6

UpTools enables a fast and simple handling of host and network addresses and sockets. Because of the long delays (in cpu time) of DNS queries, the library enables asynchronous DNS queries, running in parallel to the application threads, associating code for the processing of the results, to the event of receiving the answer from the server. It allows encrypted communications using TLS and SSL, with minimal changes to programs already coded without encryption. It also allows certificate handling.
UpTools route lookup objects and algorithms have been included in applications processing multiple 10gbps interfaces at full rate, while handling full internet tables from multiple providers (million of entries and million of lookups per second at wire speed).
Get source code
• The installable package for Linux of the library can be downloaded from the following link:
https://www.palermo.edu/ingenieria/UpTools-8.6.12.tgz   March 2020 release.

Install precompiled packages as RPM

Former versions of the library are available for users of:

  • Fedora 19 (Version 8.6.3)

  • Fedora 18 (Version 8.6.3)

  • Centos 6.x y Red Hat Enterprise Linux 6.x (using repository EPEL) (Version 8.6.3)

  • Fedora 17 (next to be released) (Version 8.6.2)

  • Fedora 16 (Version 8.6.2)

  • Fedora 15 (Version 8.6.2)

  • Fedora 14

  • Fedora 13

  • Centos 5 y Red Hat Enterprise Linux 5 (using repository EPEL)

These packages can be installed running:
yum install UpTools UpTools-devel

• For more information, coments and feedback pleas write to: uptools@palermo.edu