BOTOND'S COLLECTION OF COMMON UTILITIES (BCCU)
a C++ utility library, by Botond Ballo
Copyright (C) 2009-2013, Botond Ballo.
Botond's Collection of Common Utilities (BCCU) is a header-only
C++ library containing general utilities.
BCCU is intended to be cross-platform between Windows and Linux;
however, a few features are currently only implemented for Windows.
BCCU uses C++11 features and does not aim to be backwards-compatible
BCCU is free software, licensed under the GNU Lesser General Public
License, version 3 or later. Please see the accompanying file
LICENSE.txt for the license text.
The library's folder structure is as follows:
The 'bccu' folder contains the actual library headers, which are
divided into 3 sub-libraries: 'core' contains core general-purpose
utilities; 'os' contains wrappers around operating system
functionality; and 'ui' contains utilities for building user
interfaces. The 'ui' folder is further subdivided into 'console',
which contains utilities for console applications, and 'gui',
which contains utilities for GUI applications using various UI
toolkits ('gui/wt' contains utilities for the Wt libraries;
'gui/wx contains utilities for the wxWidgets libraries; the
rest of 'gui' contains general utilities that may be applicable
to either and even to other GUI frameworks).
The 'library-extensions' folder contains extensions to dependent
libraries such as Boost, which are either used by BCCU, or are
commonly used by clients of BCCU, and which are likely to be added
to the dependent library in question in the future. Currently,
the only extension in there is parts of Akira Takahashi's proposed
OvenToBoost extensions to the Boost.Range library.
The 'library-fixes-eclipseonly' folder exists solely to help provide
a better experience when using the Eclipse CDT IDE
(http://eclipse.org/cdt/) to develop code using BCCU. It helps work
around certain bugs and missing features in Eclipse CDT. For details,
read the README file in that folder. Please ignore this folder if
you don't use Eclipse CDT as your IDE (and feel free to ignore it
even if you do).
The 'test' folder contains the beginnings of a test suite for BCCU.
Contributions are welcome!
BCCU depends on the Boost libraries (http://www.boost.org/). Parts
of BCCU also depend on cpp-netlib (http://cpp-netlib.github.com/),
wxWidgets (http://www.wxwidgets.org/), the Wt libraries
(http://www.webtoolkit.eu), and the Win32 API. For these latter
four, parts of BCCU that do not require them will function in
Note that BCCU uses version 3 of the Boost.Phoenix library. By
default Boost.Spirit uses version 2, which can cause a clash if you
try to use both Boost.Spirit and BCCU. The workaround is to define
the macro BOOST_SPIRIT_USE_PHOENIX_V3 when using both libraries.
Certain aspects of BCCU's behaviour can be manipulated by defining
the following preprocessor symbols before including any BCCU header:
Calls to warning() will not output anything.
Calls to debug() will output the passed message along with a
The library will only define macros whose names begin with 'BCCU_'.
Specifically, the macros 'foreach', 'auto_foreach', 'RETURNS', and
'MEMBERS' will not be defined. Instead, 'BCCU_FOREACH',
'BCCU_AUTO_FOREACH', 'BCCU_RETURNS', and 'BCCU_MEMBERS' can be used.
The macro BCCU_GUI_ENTRY_POINT(App) will expect 'App' to have a
constructor with the signature (int argc, char** argv).
The macro BCCU_MAIN will not emit a call to bccu::wait_for_input()
at the end of main().
The library will not assume presence of C++11 threading support
in the standard library.