1*2e9d4914SAndroid Build Coastguard Worker# Method Chained libconfig # 2*2e9d4914SAndroid Build Coastguard Worker 3*2e9d4914SAndroid Build Coastguard Worker**Exception free + header only + method chained + config files** 4*2e9d4914SAndroid Build Coastguard Worker 5*2e9d4914SAndroid Build Coastguard WorkerProvides reading the configuration and defining the configuration specification at once. 6*2e9d4914SAndroid Build Coastguard Worker 7*2e9d4914SAndroid Build Coastguard Worker### Features ### 8*2e9d4914SAndroid Build Coastguard Worker 9*2e9d4914SAndroid Build Coastguard Worker * default values 10*2e9d4914SAndroid Build Coastguard Worker * limits (min/max) 11*2e9d4914SAndroid Build Coastguard Worker * mandatory/optional values 12*2e9d4914SAndroid Build Coastguard Worker * help text output for expected config format on specification violation 13*2e9d4914SAndroid Build Coastguard Worker * capturing and outputting expected configuration specification/defaults 14*2e9d4914SAndroid Build Coastguard Worker 15*2e9d4914SAndroid Build Coastguard WorkerWhile it is possible to write a config file with this extension using the configuration specification capturing feature, it is not intended to be used as a full fledged config writer. 16*2e9d4914SAndroid Build Coastguard Worker 17*2e9d4914SAndroid Build Coastguard Worker### Example ### 18*2e9d4914SAndroid Build Coastguard Worker 19*2e9d4914SAndroid Build Coastguard Worker```C++ 20*2e9d4914SAndroid Build Coastguard Worker#include <libconfig_chained.h> 21*2e9d4914SAndroid Build Coastguard Worker 22*2e9d4914SAndroid Build Coastguard Workerusing namespace std; 23*2e9d4914SAndroid Build Coastguard Workerusing namespace libconfig; 24*2e9d4914SAndroid Build Coastguard Worker 25*2e9d4914SAndroid Build Coastguard Workerint main(int argc, char **argv) 26*2e9d4914SAndroid Build Coastguard Worker{ 27*2e9d4914SAndroid Build Coastguard Worker Config cfg; 28*2e9d4914SAndroid Build Coastguard Worker cfg.readFile("example.cfg"); 29*2e9d4914SAndroid Build Coastguard Worker ChainedSetting cs(cfg.getRoot()); 30*2e9d4914SAndroid Build Coastguard Worker 31*2e9d4914SAndroid Build Coastguard Worker string name = cs["name"].defaultValue("<name>").isMandatory(); 32*2e9d4914SAndroid Build Coastguard Worker string abstract = cs["abstract"].defaultValue("<unknown>"); 33*2e9d4914SAndroid Build Coastguard Worker double longitude = cs["longitude"].min(-180.0).max(180.0).isMandatory(); 34*2e9d4914SAndroid Build Coastguard Worker double latitude = cs["latitude"].min(-90.0).max(90.0).isMandatory(); 35*2e9d4914SAndroid Build Coastguard Worker 36*2e9d4914SAndroid Build Coastguard Worker if (cs.isAnyMandatorySettingMissing()) 37*2e9d4914SAndroid Build Coastguard Worker { 38*2e9d4914SAndroid Build Coastguard Worker cerr << "Cannot proceed until all mandatory settings are set." << endl; 39*2e9d4914SAndroid Build Coastguard Worker } 40*2e9d4914SAndroid Build Coastguard Worker} 41*2e9d4914SAndroid Build Coastguard Worker``` 42*2e9d4914SAndroid Build Coastguard Worker 43*2e9d4914SAndroid Build Coastguard WorkerConsole Output: 44*2e9d4914SAndroid Build Coastguard Worker```sh 45*2e9d4914SAndroid Build Coastguard Worker'longitude' setting is out of valid bounds (max: 180). Value was: 1200.35 46*2e9d4914SAndroid Build Coastguard WorkerMissing 'latitude' setting in configuration file. 47*2e9d4914SAndroid Build Coastguard WorkerCannot proceed until all mandatory settings are set. 48*2e9d4914SAndroid Build Coastguard Worker``` 49*2e9d4914SAndroid Build Coastguard Worker 50*2e9d4914SAndroid Build Coastguard Worker--- 51*2e9d4914SAndroid Build Coastguard Worker 52*2e9d4914SAndroid Build Coastguard Worker### How to integrate into your project ### 53*2e9d4914SAndroid Build Coastguard Worker 54*2e9d4914SAndroid Build Coastguard Worker 1. Link the libconfig++.[lib/la/a] library as usual (see standard use of libconfig++). 55*2e9d4914SAndroid Build Coastguard Worker * Replace any includes of libconfig.h++ by libconfig_chained.h. 56*2e9d4914SAndroid Build Coastguard Worker * Use method chained candy as displayed above. 57*2e9d4914SAndroid Build Coastguard Worker 58*2e9d4914SAndroid Build Coastguard Worker--- 59*2e9d4914SAndroid Build Coastguard Worker 60*2e9d4914SAndroid Build Coastguard WorkerCreate an issue for any questions or suggestions. Alternatively email me at github [at) hemofektik.de