26 const char OPTIONS_SEPARATOR =
',';
54 return (first.name == second.name &&
55 first.value == second.value);
67 inline std::istream&
read(std::istream& in)
69 return in >> this->value;
81 inline std::ostream&
write(std::ostream& out)
const
83 return out << this->value;
132 return out << (this->value ?
"1" :
"0");
146 return parameter.read(in);
160 return parameter.write(out);
167 template<
class T = JNullType>
189 __terminate__(false),
197 virtual ~JShellParser()
206 virtual void terminate(
const int status)
208 __terminate__ =
true;
209 __exit_code__ = status;
239 gexit(__exit_code__);
257 struct JShellParser :
258 public JShellParser<>
260 typedef JShellParser<>::key_type key_type;
268 void evaluate()
const
270 for (
typename data_type::const_iterator i = this->
data.begin(); i != this->data.end(); ++i) {
272 std::ostringstream os;
297 struct JEnvironment<
std::string> :
298 public JShellParser<std::string>
300 typedef JShellParser<std::string>::key_type key_type;
318 friend inline std::istream&
operator>>(std::istream& in, JEnvironment& environment)
329 if (!has_facet<JEquationFacet>(in.getloc())) {
330 in.imbue(locale(in.getloc(), facet.clone()));
333 if (in >> c >> key >> equation) {
335 if (c ==
'-' && !equation.
getKey().empty()) {
337 environment.data.push_back(parameter_type(equation.
getKey()));
339 parameter_type& parameter = environment.data.back();
345 istringstream is(equation.
getValue());
349 for (parameter_type buffer(parameter.name);
getline(is, buffer.value, OPTIONS_SEPARATOR); ) {
351 buffer.value =
trim(buffer.value);
353 possible_values.push_back(buffer);
356 environment[key] =
JPARSER::getOption(parameter, equation.
getKey(), possible_values.begin(), possible_values.end());
378 struct JEnvironment<bool> :
379 public JShellParser<bool>
381 typedef JShellParser<bool>::key_type key_type;
399 friend inline std::istream&
operator>>(std::istream& in, JEnvironment& environment)
410 if (!has_facet<JEquationFacet>(in.getloc())) {
411 in.imbue(locale(in.getloc(), facet.clone()));
414 if (in >> c >> key >> equation) {
416 if (c ==
'-' && !equation.
getKey().empty()) {
418 environment.data.push_back(parameter_type(equation.
getKey()));
420 parameter_type& parameter = environment.data.back();
452 int main(
int argc,
char **argv)
459 JEnvironment<bool> boolean;
460 JEnvironment<string> regular;
467 const JArgs options = zap(argc, argv);
469 JShellParser<> buffer;
471 buffer.join(
boolean);
472 buffer.join(regular);
479 catch(
const exception& error) {
480 return gexit(2, error.what());
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
std::istream & operator>>(std::istream &in, JAANET::JHead &header)
Read header from input.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
int main(int argc, char **argv)
Data structure to store command line arguments.
Facet class to specify parsing of equations in currect locale (see class JLANG::JEquation).
Simple data structure to support I/O of equations (see class JLANG::JEquation).
General purpose equation class.
const std::string & getKey() const
Get key.
const std::string & getValue() const
Get value.
const char getSeparator() const
Get separator.
JParameter()
Default constructor.
Exception for parsing value.
This class can be used to temporarily redirect one output (input) stream to another output (input) st...
Utility class to parse command line options.
bool write(const Vec &v, std::ostream &os)
Write a Vec(tor) to a stream.
std::istream & read(std::istream &in, JTestSummary &summary, const char delimiter=' ')
Read test summary.
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
std::string trim(const std::string &buffer)
Trim string.
JParserTemplateElement< JType_t > getOption(JType_t &object, const std::string &name, const std::string &help="")
Auxiliary method for creation of template parser element object.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
std::vector< event_type > data_type
int gexit(int status, const std::string &message="")
Exit method.
void gprint(const std::string &message)
Print method.
void set_variable(const std::string &name, const std::string &value)
Set environment variable.
Data structure for measured coincidence rates of all pairs of PMTs in optical module.
friend bool operator==(const JParameter< T > &first, typename JClass< JSecond_t >::argument_type second)
Equal operator.
Auxiliary class for no type definition.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...