stlsoft
FastFormat 0.4.2
A flexible, efficient, C++ output/formatting library more>>
Installing FastFormat: The distribution is in the form of a zip file, e.g. fastformat-0.2.1.zip which you should extract (recursively) to a location of your choice, e.g. ~/opensrc/fastformat/0.2, you should define the FASTFORMAT_ROOT environment variable to be this directory.
FastFormat depends on one other project, STLSoft, which is 100% header-only. If you wish to build the example and test programs included in the distribution using the makefiles supplied, you will need to have defined the STLSOFT environment variable to be the root directory of the STLSoft include files.
FastFormat is written in standard C++, and should be compilable with any modern C/C++ compiler that provides an implementation of the C & C++ standard libraries.
Benefits:
- Ultimate robustness!
- Unlimited flexibility!
- Unbeatable performance!
-
- 5 - 17 times faster than Boost.Format
- 1.5 - 5.5 times faster than Loki.SafeFormat
Major Features:
- Very high robustness, including 100% type-safety. It is more robust than: Cs Streams, C++s IOStreams, Boost.Format and Loki.SafeFormat. Indeed, with the FastFormat.Write API it is impossible to write defective client code!
- Very high efficiency. It is faster than: C++s IOStreams (by ~100-900%), Boost.Format (by ~400-1600%) and Loki.SafeFormat (by ~35-450%)
- Infinite extensibility. You can extend it to work with any argument type, any output/destination type, and with any format type
- I18N/L10N capabilities. The FastFormat.Format API is a replacement-based API (like the printf()-family, Boost.Format and Loki.SafeFormat), and supports the runtime specification of format strings which facilitates L10N
- Simple syntax. There are no overloaded operators, no weird insertion operators/operations, and no need to prep your arguments. Just write simple, clear, transparent code, without sacrificing expressiveness for flexibility.
- Atomic operation. It doesnt write out statement elements one at a time, like the IOStreams, so has no atomicity issues
- Thread safety. Each statement operates independently from all others, and it works successfully in single and/or multithreaded scenarios
- Highly portable. It will work with all good modern C++ compilers; it even works with Visual C++ 6!
Enhancements:
- Numerous minor adjustments to make files (including those not fully merged from 0.3 branch in 0.4.1)
- Corrected 0.4.1 failure to bundle xTests 0.13.x
- NOTE: bundles xTests 0.13.2
- NOTE: depends on STLSoft 1.9.85
Requirements: STLSoft
<<lessshwild.fnmatch 0.8.2
shwild.fnmatch is a platform-independent implementation of the UNIX function fnmatch(), implemented using the shwild, STLSoft. more>>
It is dependent on the shwild, STLSoft, and cstring libraries.
shwild 0.9.5
shwild provides a platform-independent library for pattern matching. more>>
shwild is a simple, platform-independent library that implements shell-compatible wildcard pattern matching. It is implemented in C/C++, expressing a C API with a C++ wrapper.
Building:
Makefiles for all the main supported compilers are included in the subdirectories of the build directory. For example, the makefile for Borland C/C++ v5.6 is in build/vc6. Since Borland is only supported on Windows, there is a single makefile called makefile.
For compilers that are supported on more than one platform, there are several makefiles located in the build sub-directory.
For example, for GNU C/C++ v3.4 (in /build/gcc34) both makefile.unix and makefile.win32 are provided. Most make tools require that you explicitly specify the makefile name (using -f) to use such makefiles, e.g.
$ make -f makefile.unix.
This will build the shwild library, and the C test programs. It will also attempt to build the C++ test programs. Since the C++ mapping relies on the STLSoft libraries, the makefile will look for the environment variable STLSOFT: it specifies -I%STLSOFT%/include (Windows) / -I$STLSOFT/include (UNIX) to the compiler.
Enhancements:
- fixes to UNIX compilation
- STLSoft 1.9.1 beta 44 or later
- Open-RJ 1.6.1 or later (but only for Test programs)
recls 1.8.10
recls (recursive ls) is a platform-independent recursive search library. more>>
This library came about as the first exemplar for my C/C++ Users Journal column, Positive Integration, which deals with issues of language integration between C/C++ and a host of other languages.
The library itself is implemented in C/C++, but presents a pure C API. It is compatible with UNIX and Win32 operating systems (though the FTP recursive searching is currently Win32-only), and is compatible with most popular C/C++ compilers, including:
- Borland (v5.51+)
- Comeau (v4.3.0.1+)
- Metrowerks CodeWarrior (v8.x+)
- Digital Mars (v8.40+)
- GCC (v3.2+)
- Intel (v7.0+)
- Microsoft Visual C++ (v6.0+)
Note that the base library requires components from the STLSoft libraries (which is another open-source library Im involved with).
In addition to the base library, there are mappings to several other languages/technologies. Currently these are
"regular" C++
- D
- COM
- .NET (C# and Managed C++)
- Perl
- Python
- Ruby
- STL
Enhancements:
- In the core, Recls_SearchFeedback() (and, hence, Recls_Search()) was fixed for the case when both searchRoot and pattern are NULL; general fixes were made for Unicode compilation.
- In recls/C++, fixes were made to namespace-exports for shims for Recls::Entry class.
- In recls/STL, general fixes were made for Unicode compilation.
Open-RJ 1.6.4
Open-RJ is an library that implements readers for the Record-Jar structured text file format. more>>
In addition to platform-independence, the library focuses on small runtime costs - memory and speed - and the classic UNIX attributes of discoverability and visibility.
As described in the excellent book "The Art Of UNIX Programming", a Record-Jar structured format file consists of records and fields.
A field is a single line - optionally extended with trailing - that contains a name, separated from an optional value by :.
A record is a list of fields, whose contents are arbitrary and can vary between records in the same database. Records are separated by a line that begins with "%%". The record separator also acts as a comment, so anything can come on a record separator line after the first two characters.
A database is a correctly parsed Record-Jar file. The Open-RJ API (and language mappings) provide access to all the records in the database and the complete set of fields. Hence, you may work with fields on a per-record basis, or treat the database as a single record and with all fields in the database.
A very simple Record-Jar file, representing a Pets Database, is shown in the table on the right-hand side of this page.
And thats pretty much all there is to it. There are no restrictions on what fields may be in a record, and no controls over whether all records have the same fields or not. Thats the job of higher layers of application functionality. We keep Record-Jar simple so its reliable, portable and fast, and its those things in spades!
%% Pets
Name: Barney
Species: Dog
Breed: Bijon
Frieze
%%
Name: Samson
Species: Dog
Breed: Ridgeback
%%
Name: Fluffy Kitten
Species: Cat
%%
Enhancements:
- The code was updated to be fully compatible with STLSoft 1.9.1 (the special version released on Extended STL, volume 1: CD).
b64 1.2.4
b64 is a very small and simple library that provides Base-64 encoding and decoding, according to RFC-1113, in C and C++. more>>
The b64 project is released under the BSD license, which basically means its free for any use, but you cant claim its yours.
Enhancements:
- The code was updated to be fully compatible with STLSoft 1.9.1 (the special version released on Extended STL, volume 1: CD).
- Page: 1 of 1
- 1