- What is Ceylan?
Ceylan is a C++ open-source (LGPL/GPL) library which provides basic core functionalities, listed below, and a set of optional features.
Services integrated in the Ceylan library are the ones that should be useful to most applications and that do not depend on any third-party library.
- What is its goal?
Ceylan aims at simplifying C++ software development by providing basic services that encapsulates lower-level concerns.
The Ceylan API offers various primitives that perform usual actions in a portable way that should be somewhat shorter, simpler and safer to use than the old-school platform-specific C approach.
Although the comparison is a bit far-fetched, we would have liked that the C++ came with services such as the ones provided by the Java runtime or the standard Python modules. Hence Ceylan does its best to provide services that we deemed lacking to the C++.
- What is the current state of Ceylan development?
Ceylan has been existing since the end of 2003, and was seldom under heavy development. However newer code has been integrated on a steady pace, mostly by one developer (me). Ceylan has not been used by many projects, only OSDL used it as a foundation layer.
Currently Ceylan does its best to respect its promises thanks to a simple and straightforward code that everybody should understand, both as a library end user and as a library developer, on the contrary of complex developments, such as Boost (no offence).
- What are the major core services that are provided by Ceylan?
These core services are available in all Ceylan-supported platforms:
- various resource managers which drive the life cycle of their resources (see
Ceylan::BasicResourceManager). Including policy-based caches, quota-driven managers for resources that know their size and are able to be cloned (see
- counted pointer, which is a basic shared pointer (see
- singleton, to ensure a class is instanciated no more than once (see
- time management, including timestamps (see
Ceylan::Timestamp), time fine reading and measurement
- automatic checking of compatibility for Ceylan library version being linked against an executable
- source/listener pattern implemented (see
Ceylan::EventSource, Ceylan::EventListener and their callable counterpart)
- full MVC (Model-View-Controller) framework, implemented using source/listener, with various flavours such as event notifications being either synchronous or not (see
Ceylan::Model, Ceylan::View, Ceylan::Controller, Ceylan::InputDevice); an alternative lightweight template-based framework has been added
- maths services, including:
- basic constants (e, pi, sqrt(2), etc.) defined in various bases and with various precomputed versions (1/sqrt(2), pi/4, etc.), various epsilons defined for different floating-point datatypes (
- numerous basic operations: nullity and comparisons for floating point values, floor, ceil, round, abs, min, max, exp, pow, etc.; trigonometric operations, conversions, etc. (
- linear algebra: point, vector and matrices (2D,3D), classical and homogeneous, endormorphisms and related operations (comatrix, trace, determinant, adjoint, identity, diagonal, cofactor, projection, rotation, translation, automatic creation from endomorphism, etc.) with dedicated operators defined (with scalar, vector or matrices: equality, add, substract, multiply, transpose, inverse, dot-product, cross-product, magnitude, normalization, etc.). See:
- random support: white noise generator, generator from user-defined probability density function, gaussian (normal) distribution, etc. with time-based seeding and optional precomputation of random value set (see
- full log system whose lifecycle can be automatically managed (see
Ceylan::Log::LogHolder), with default channels (fatal, error, warning, debug and info, see
Ceylan::Log::LogPlug) and dynamic ones, levels of details, timestamped network-ready (see
Ceylan::Log::LogTransport) log messages (see
Ceylan::Log::LogMessage), and various log aggregators (console, raw text file, HTML website, see
Ceylan::Log::Aggregator and child classes) that can be chosen at runtime, with immediate or defered aggregation. Ceylan::Object instances have automatically their own channel, with identifiers created from automated C++ name demangling, PID and hostname
- tree-like hierarchy of composed referentials for 2D and 3D objects, using source/listener pattern with local/global cached transformations (see
- basic command-line and keyboard management (see
- set of generic interfaces, such as Displayable, Loggable, Measurable, Clonable, Countable, Lockable, Hashable, etc.
- basic datatypes, including numerical ones, integer or floating-point, signed or not, with various explicit and checked sizes and ranges, including Ceylan::Uint64 (see
- exceptions (see
- version numbers:
- three number scheme (see
- Libtool scheme (see
- string operations, including direct concatenation of numerical datatypes with std::string, conversions, (de)serializations (see
CeylanOperators.h), manipulations (split, join, substitutions, etc.), conversions to HTML (see
CeylanStringUtils.h) or to basic UNICODE (see
- middleware support, including medium-independent protocol servers and clients and custom lightweight optionally-buffered platform-independent optimized marshaller/demarshaller (see
- feature management with detection and request API (see Ceylan::Features namespace), module management with associated static metadata (see
- What are the major optional services ("features") that are provided by Ceylan?
- Not all Ceylan-supported platforms support these specific features:
- regular expressions (see
Ceylan::RegExp) [GNU/Linux, FreeBSD, NetBSD only]
- plugin, which have static metadata and are libltdl-based (see
Ceylan::Plugin) [GNU/Linux, FreeBSD, NetBSD only]
- What are the supported platforms?
Ceylan has been ported and tested on following platforms:
Not all features are available on all platforms. Ceylan runs both on 32-bit and 64-bit systems.
- GNU/Linux (various distributions) [with gcc4.x]
- NetBSD, FreeBSD [with gcc4.x]
- Windows XP [with Visual Express 2005]
- What is the current stable version?
- See the latest Ceylan version pages.
- How stable is Ceylan?
We do our best to track bugs and to ensure quality by:
- writing safe code, with real C++ constructs (ex: C++ casts, assignment and copy operators private by default, etc.)
- using an exception hierarchy with explicit throw statements in signatures
- running regularly on each supported platform a full test chain, with 60+ sets of unit tests
- trying to bring fast and effective support to the Ceylan users, notably for bug tracking
If you have information more detailed or more recent than those presented in
this document, if you noticed errors, neglects or points insufficiently
discussed, or if you would like to contribute and help us, even a little
us a line!
Last update: Monday, January 3, 2011