C++ reflection library with focus on serialization/configuration (ROS parameter server, YAML, JSON, XML, etc)

Alexander Sherikov 21df44f48b Use find_package for msgpack 6 months ago
.github 7b414f3231 Migrate to C++11, style cleanups. 1 year ago
cmake 21df44f48b Use find_package for msgpack 5 months ago
cpput 16e6ca4433 clang tidy fixes and tests 3 years ago
doc 5dc7a23252 Prepare 2.0.3 1 year ago
extra_adapters 7b414f3231 Migrate to C++11, style cleanups. 1 year ago
extra_visitors 21df44f48b Use find_package for msgpack 5 months ago
include b4365b41e5 Add OptionalPointer with a test. 1 year ago
qa 7b414f3231 Migrate to C++11, style cleanups. 1 year ago
tests 21df44f48b Use find_package for msgpack 5 months ago
.clang-format 7b414f3231 Migrate to C++11, style cleanups. 1 year ago
.gitignore 38345dbcc4 cmake refactoring for separate building of core and visitors. 3 years ago
.gitmodules 81069132ec Drop bridge building functionality. 4 years ago
.travis.yml.disable 1f7220b583 cmake: rely on exported targets 3 years ago
AUTHORS.md dea1cf95ec Initial commit. 6 years ago
CHANGELOG.md 21df44f48b Use find_package for msgpack 5 months ago
CMakeLists.txt 1a3c47052c Bump version 6 months ago
LICENSE dea1cf95ec Initial commit. 6 years ago
Makefile 21df44f48b Use find_package for msgpack 5 months ago
README.md 6abea6dba5 Use find_package for yaml-cpp, +ARILES_CPP_STANDARD cmake flag 6 months ago

README.md

Ariles

branch HEAD v2 pkg_catkin_2
(ROS/catkin package)
pkg_freebsd_2
(FreeBSD package)
CI status Build Status Build Status
package

Contents

Links

Introduction

Loosely speaking, ariles is a C++ reflection library, i.e., it provides meta-programming APIs for implementation of class visitors (processors). It also provides a number of (de)serializers based on these APIs, e.g., YAML, JSON, XML, ROS parameter server; and serialization wrappers for some types, e.g., STL containers, smart pointers, Eigen matrices, etc.

Use cases

  1. Parsing and generation of configuration files. Unlike some common serialization libraries, e.g., boost::serialization, ariles tries to be flexible while parsing by:

    • silently ignoring unused entries (if possible),
    • ignoring ordering of entries (if possible),
    • not discriminating attributes from childs in XML,
    • optionally ignoring missing entries.
  2. Conversion between different formats, for example, YAML <-> ROS parameter server. Note that the conversion is not data-agnostic, i.e., the complete data structure must be represented in C++ code.

  3. Flattening of a class hierarchy to a list of name-value pairs (string-double), which is useful for collection of time-series data.

  4. Exporting of numerical data to an Octave script for debugging purposes.

  5. Implemetation of parsers for specific data formats, e.g., URDF.

Minimal example

Class [./tests/api_v2/types/minimal.h]:

class Configurable : public ariles2::DefaultBase
{
    #define ARILES2_DEFAULT_ID "ConfigurableEntryName" // optional, defaults to 'ariles'
    #define ARILES2_ENTRIES(v) \
        ARILES2_TYPED_ENTRY(v, integer_member, int)
    #include ARILES2_INITIALIZE
};

Serialization:

Configurable configurable;
configurable.integer_member = 10;
ariles2::apply<ariles2::yaml_cpp::Writer>("config.yaml", configurable);
ariles2::apply<ariles2::yaml_cpp::Writer>(std::cout, configurable);

Result:

ConfigurableEntryName:
    integer_member: 10

Deserialization:

ariles2::apply<ariles2::yaml_cpp::Reader>("config.yaml", configurable);

Conversion:

// read class from a file
ariles2::apply<ariles2::yaml_cpp::Reader>("config.yaml", configurable);
// dump class to ROS parameter server
ariles2::apply<ariles2::rosparam::Writer>(nh, configurable, "/some_namespace/");

See demo for more exaples: https://asherikov.github.io/ariles/2/DEMO.html [./tests/api_v2/demo_api_v2.cpp]

Visitors

ariles includes a number of optional visitors that support various data representation formats, in particular:

There are also a few utility visitors, e.g.,

  • compare for class comparison;
  • copyto for copying data to non-ariles classes;
  • copyfrom for copying data from non-ariles classes.

The complete list of modules is available at https://asherikov.github.io/ariles/2/modules.html

Supported data types

ariles provides serialization wrappers for the follwing types:

  • Fundametal types: integers, floats, booleans.
  • Some STL classes (WIP): std::string, std::vector, std::map, std::pair, std::shared_ptr, std::unique_ptr.
  • Eigen types: matrices, transforms, quaternions.
  • Boost classes: boost::optional, boost::movelib::unique_ptr. boost::shared_ptr.
  • Better enums -> https://github.com/aantron/better-enums.

Dependencies and compilation

Dependencies

  • cmake >= 3.0
  • C++11 compatible compiler
  • boost

Visitors and corresponding dependencies can be enabled or disabled via cmake options, the same applies to data types which depend on external libraries.

Compilation with catkin

An example catkin package is provided in pkg_catkin_2 branch of the main repository -> https://github.com/asherikov/ariles/tree/pkg_catkin_2.

Related software