#include "yamldepositsynthreader.h" #include "yamlext.h" namespace genesis { YAMLDepositSynthCfgReader::YAMLDepositSynthCfgReader(std::istream & input) : _docs(YAML::LoadAll(input)), _i(_docs.begin()) {} YAMLDepositSynthCfgReader::~YAMLDepositSynthCfgReader() {} bool YAMLDepositSynthCfgReader::load( geoworld::DepositSynthesizerSettings & settings ) { using namespace geoworld; if (_i == _docs.end()) return false; const YAML::Node ndDoc = *_i++; try { const YAML::Node & ndLayers = ndDoc["strata"], & ndDeposits = ndDoc["deposits"], & ndVein = ndDoc["vein"], & ndDike = ndDoc["dike"], & ndLaccolith = ndDoc["laccolith"], & ndSpherePack = ndDoc["chunking"]; ndLayers["count"] >> settings.layers.count; ndLayers["classes"] >> settings.layers.classes; ndLayers["coarseness"] >> settings.layers.coarseness; ndLayers["silica"] >> YAML::MappedRange< unsigned char > (settings.layers.silica, YAML::StringMapSchema< unsigned char > ( "na", Silica_NA, "felsic", Silica_Felsic, "inter-felsic", Silica_InterFelsic, "intermediate", Silica_Intermediate, "mafic", Silica_Mafic, "ultra-mafic", Silica_UltraMafic, NULL ) ); ndLayers["thickness"] >> settings.layers.thickness.base; ndLayers["thickfactor"] >> settings.layers.thickness.curve; ndLayers["thickscale"] >> settings.layers.thickness.scale; ndDeposits["frequency"] >> settings.minerals.frequency; ndDeposits["neighborhood"] >> settings.minerals.neighborhood; ndDeposits["abundancefactor"] >> settings.minerals.abundance.curve; ndDeposits["sizefactor"] >> settings.minerals.deposit.curve; ndDeposits["sizebase"] >> settings.minerals.deposit.base; ndDeposits["nesting"] >> settings.minerals.deposit.nesting; ndVein["deviation"] >> settings.minerals.deposit.vein.deviation; ndVein["detail"] >> settings.minerals.deposit.vein.detail; ndVein["erraticness"] >> settings.minerals.deposit.vein.erratic; ndDike["orthogonality"] >> settings.minerals.deposit.dike.orthogonality; ndDike["deviation"] >> settings.minerals.deposit.dike.deviation; ndLaccolith["tailsize"] >> settings.minerals.deposit.laccolith.tail; ndSpherePack["leafsize"] >> settings.minerals.spherepack.limit; ndSpherePack["smallest"] >> settings.minerals.spherepack.minimum; ndSpherePack["iterations"] >> settings.minerals.spherepack.maxtier; ndSpherePack["initialsize"] >> settings.minerals.spherepack.sizeflux; ndSpherePack["branches"] >> settings.minerals.spherepack.kidflux; return true; } catch (YAML::RepresentationException &) { return false; } } }