Skip to content

BrainTwister/record

Repository files navigation

Build Status

BrainTwister record

A heterogeneous data structure for C++

Copyright (C) 2018 Bernd Doser, bernd.doser@braintwister.eu

All rights reserved.

BrainTwister record is free software made available under the MIT License. For details see LICENSE.

conan.io

C++ conan.io package is available at https://bintray.com/braintwister/conan

Description

BrainTwister record is a linear, direct-accessible, heterogeneous data structure, which is defined by

BRAINTWISTER_RECORD( record_name, \ (( entry_type, entry_name, entry_default_value )) \ ... \ ) 

For instance, a database connection can be defined as

BRAINTWISTER_RECORD( Database, \ (( uint16_t, port, 3306 )) \ (( std::string, database, "" )) \ (( std::string, table, "" )) \ ) 

The entries are statically typed and are directly accessible using the dot operator

Database db; std::cout << db.database << std::endl; 

A record can be initialized with a build pattern

Database db.set_port(9876); 

or with JSON/XML

{ "port": 9876, "database": "staff", "table": "employees" } 

Nested records and std::vector are supported.

Polymorphic record

For a polymorphic record a macro for the base class and for the derived classes have to be defined by

BRAINTWISTER_RECORD_BASE( base_recor_name, \ (( base_entry_type, base_entry_name, base_entry_default_value )) \ ..., \ virtual function \ ) BRAINTWISTER_RECORD_DERIVED( derived_record_name, \ (( derived_entry_type, derived_entry_name, derived_entry_default_value )) \ ..., \ virtual function \ )