File: ifOptions.cpp

package info (click to toggle)
fact%2B%2B 1.6.5~dfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 4,496 kB
  • sloc: cpp: 28,000; java: 22,674; xml: 3,268; makefile: 102; ansic: 61; sh: 3
file content (120 lines) | stat: -rw-r--r-- 3,398 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/* This file is part of the FaCT++ DL reasoner
Copyright (C) 2003-2015 Dmitry Tsarkov and The University of Manchester
Copyright (C) 2015-2016 Dmitry Tsarkov

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

#include <ostream>

#include "ifOptions.h"
#include "configure.h"

bool ifOption :: setAValue ( const std::string& s )
{
	if ( type == iotBool )	// check possible boolean values
	{
		if ( s == "0" || s == "off" || s == "no" || s == "false" )
			bValue = false;
		else if ( s == "1" || s == "on" || s == "yes" || s == "true" )
			bValue = true;
		else
			return true;
	}
	else if ( type == iotInt )	// check possible integer values
	{
		if ( !isdigit (s[0]) )
			return true;
		else
			iValue = atoi ( s.c_str() );
	}
	else	// text values
		tValue = s;

	return false;
}

/// output in the form of config file
void ifOption :: printConfString ( std::ostream& o ) const
{
	// name and type
	o << "\n;---\n;--- Option '" << optionName.c_str () << "': ";
	if ( type == iotBool )
		o << "boolean";
	else if ( type == iotInt )
		o << "integer";
	else if ( type == iotText )
		o << "text";
	else	// safety check
		fpp_unreachable();

	// description, default, name
	o << " ---\n;---\n;* " << optionDescription.c_str () << "\n;* Default value: '"
	  << defaultValue.c_str () << "'\n\n; " << optionName.c_str () << " = ";

	// value
	if ( type == iotBool )
		o << getBool ();
	else if ( type == iotInt )
		o << getInt ();
	else if ( type == iotText )
		o << getText().c_str ();
	else	// safety check
		fpp_unreachable();

	o << "\n";
}

const ifOption* ifOptionSet :: locateOption ( const std::string& name ) const
{
	OptionSet::const_iterator p = Base.find ( name );

	if ( p == Base.end () )
		return NULL;
	else
		return p->second;
}

bool ifOptionSet :: initByConfigure ( Configuration& Config, const std::string& Section )
{
	// try to load given config section
	if ( Config.useSection ( Section ) )
		return true;

	// for all registered options
	for ( OptionSet::iterator p = Base.begin (); p != Base.end (); ++p )
		if ( !Config.checkValue ( p->first ) )			// if option located in config file
			if ( p->second->setAValue ( Config.getValue () ) )	// ... set up its value
				return true;	// can't set value

	// all done without errors
	return false;
}

/// output in the form of config file
void ifOptionSet :: printConfig ( std::ostream& o ) const
{
	// print LeveLogger info
	o << "[LeveLogger]\n\n;--- Logging file name\n file = reasoning.log\n"
		 ";--- Logging level (the less level you give, the less information will be logged)\n allowedLevel = 0\n\n";

	// print header
	o << "\n[Tuning]\n";

	for ( OptionSet::const_iterator p = Base.begin (); p != Base.end (); ++p )
		p->second->printConfString (o);

	o << std::endl;
}