Jpp  18.2.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Public Member Functions | Static Public Member Functions | Protected Attributes | Friends | List of all members
JLANG::JEquation Class Reference

General purpose equation class. More...

#include <JEquation.hh>

Inheritance diagram for JLANG::JEquation:
JLANG::JEquation_t

Classes

struct  equation_type
 Auxiliary data structure for equation. More...
 

Public Member Functions

 JEquation ()
 Default constructor. More...
 
 JEquation (const std::string &key, const std::string &value)
 Constructor. More...
 
 JEquation (const std::string &buffer, const JEquationFacet &facet)
 Constructor. More...
 
const std::stringgetKey () const
 Get key. More...
 
const char getSeparator () const
 Get separator. More...
 
const std::stringgetValue () const
 Get value. More...
 
JEquationsetEquation (const std::string &buffer, const JEquationFacet &facet)
 Set equation. More...
 
JEquationsetEquation (const JEquationFacet &facet)
 Set this equation to its value. More...
 
std::string toString () const
 Convert equation to string. More...
 

Static Public Member Functions

template<class T >
static equation_type< Tmake_equation (const std::string &key, const T &value)
 Auxiliary method to create equation type. More...
 
static JEquation valueOf (const std::string &buffer, const JEquationFacet &facet)
 Extract equation. More...
 

Protected Attributes

JString key
 
char sep
 
JString value
 

Friends

std::istream & operator>> (std::istream &in, JEquation &equation)
 Read equation from input stream. More...
 
std::ostream & operator<< (std::ostream &out, const JEquation &equation)
 Write equation to output stream. More...
 

Detailed Description

General purpose equation class.

An equation could have the following formats:

      <skip line>  "comment"  <end of line>
      <skip line>  "comment"  <end of line>
      <key> <separator> <value> <comment> "comment" <end of line>
      <key> <separator> <left bracket> <value> <value> <right bracket> <end of line>
      <key><division><key> <separator> <value> <end of line>

In this:

Definition at line 47 of file JEquation.hh.

Constructor & Destructor Documentation

JLANG::JEquation::JEquation ( )
inline

Default constructor.

Definition at line 126 of file JEquation.hh.

126  :
127  key (),
128  sep ('\0'),
129  value()
130  {}
JLANG::JEquation::JEquation ( const std::string key,
const std::string value 
)
inline

Constructor.

Parameters
keykey
valuevalue

Definition at line 139 of file JEquation.hh.

139  :
140  key (key),
141  sep ('\0'),
142  value(value)
143  {}
JLANG::JEquation::JEquation ( const std::string buffer,
const JEquationFacet facet 
)
inline

Constructor.

Parameters
bufferinput
facetfacet

Definition at line 152 of file JEquation.hh.

153  {
154  setEquation(buffer, facet);
155  }
JEquation & setEquation(const std::string &buffer, const JEquationFacet &facet)
Set equation.
Definition: JEquation.hh:317

Member Function Documentation

template<class T >
static equation_type<T> JLANG::JEquation::make_equation ( const std::string key,
const T value 
)
inlinestatic

Auxiliary method to create equation type.

Parameters
keykey
valuevalue

Definition at line 117 of file JEquation.hh.

118  {
119  return equation_type<T>(key, value);
120  }
const std::string& JLANG::JEquation::getKey ( ) const
inline

Get key.

Returns
key

Definition at line 163 of file JEquation.hh.

164  {
165  return key;
166  }
const char JLANG::JEquation::getSeparator ( ) const
inline

Get separator.

Returns
separator

Definition at line 174 of file JEquation.hh.

175  {
176  return sep;
177  }
const std::string& JLANG::JEquation::getValue ( ) const
inline

Get value.

Returns
value

Definition at line 185 of file JEquation.hh.

186  {
187  return value;
188  }
JEquation& JLANG::JEquation::setEquation ( const std::string buffer,
const JEquationFacet facet 
)
inline

Set equation.

Parameters
bufferinput
facetfacet
Returns
this equation

Definition at line 317 of file JEquation.hh.

318  {
319  using namespace std;
320 
321  istringstream in(buffer);
322 
323  in.imbue(locale(in.getloc(), facet.clone()));
324 
325  in >> *this;
326 
327  return *this;
328  }
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Definition: JCanberra.sh:46
virtual JEquationFacet * clone() const override
Clone this facet.
JEquation& JLANG::JEquation::setEquation ( const JEquationFacet facet)
inline

Set this equation to its value.

Parameters
facetfacet
Returns
this equation

Definition at line 337 of file JEquation.hh.

338  {
339  setEquation(getValue(), facet);
340 
341  return *this;
342  }
const std::string & getValue() const
Get value.
Definition: JEquation.hh:185
JEquation & setEquation(const std::string &buffer, const JEquationFacet &facet)
Set equation.
Definition: JEquation.hh:317
static JEquation JLANG::JEquation::valueOf ( const std::string buffer,
const JEquationFacet facet 
)
inlinestatic

Extract equation.

Parameters
bufferinput
facetfacet
Returns
equation

Definition at line 352 of file JEquation.hh.

353  {
354  return JEquation(buffer, facet);
355  }
JEquation()
Default constructor.
Definition: JEquation.hh:126
std::string JLANG::JEquation::toString ( ) const
inline

Convert equation to string.

Returns
string

Definition at line 363 of file JEquation.hh.

364  {
365  std::string buffer;
366 
367  buffer += getKey();
368  buffer += getSeparator();
369  buffer += getValue();
370 
371  return buffer;
372  }
const std::string & getKey() const
Get key.
Definition: JEquation.hh:163
const std::string & getValue() const
Get value.
Definition: JEquation.hh:185
then awk string
const char getSeparator() const
Get separator.
Definition: JEquation.hh:174

Friends And Related Function Documentation

std::istream& operator>> ( std::istream &  in,
JEquation equation 
)
friend

Read equation from input stream.

Parameters
ininput stream
equationequation
Returns
input stream

Definition at line 198 of file JEquation.hh.

199  {
200  using namespace std;
201 
202  istream::sentry sentry(in, false);
203 
204  if (sentry) {
205 
206  equation = JEquation();
207 
208  const locale& loc = in.getloc();
209 
210  if (has_facet<JEquationFacet>(loc)) {
211 
212  const JEquationFacet& facet = use_facet<JEquationFacet>(loc);
213 
214  ios_base::iostate state = in.rdstate();
215 
216 
217  for (int c; (c = in.peek()) != EOF && facet.isSkipLine((char) c); ) {
218  facet.ignore(in);
219  }
220 
221 
222  if (state == ios_base::goodbit) facet.get(in, istreambuf_iterator<char>(), in, state, equation.key);
223  if (state == ios_base::goodbit) facet.get(in, istreambuf_iterator<char>(), in, state, equation.sep);
224  if (state == ios_base::goodbit) facet.getline(in, equation.value);
225 
226 
227  // remove white spaces and brackets before evaluation
228 
229  if (facet.isSeparator(equation.sep)) {
230 
231  JString::const_iterator p = equation.value. begin();
232  JString::const_reverse_iterator q = equation.value.rbegin();
233 
234  for ( ; ; ++p, ++q) {
235 
236  for ( ; p != equation.value. end() && facet.isWhiteSpace(*p); ++p) {}
237  for ( ; q != equation.value.rend() && facet.isWhiteSpace(*q); ++q) {}
238 
239  if (p == equation.value. end() || *p != facet.getLeftBracket() ||
240  q == equation.value.rend() || *q != facet.getRightBracket()) {
241  break;
242  }
243  }
244 
245  if (p != equation.value.begin() || q != equation.value.rbegin()) {
246  equation.value = string(p, q.base());
247  }
248  }
249 
250  if (state != ios_base::goodbit && state != ios_base::eofbit) {
251  in.setstate(state);
252  }
253 
254  if (!(state & ios_base::eofbit)) {
255  if (!facet.isDivision (equation.sep) &&
256  !facet.isSeparator(equation.sep)) {
257  in.setstate(ios_base::badbit);
258  }
259  }
260 
261  } else {
262 
263  in.setstate(ios_base::failbit);
264  }
265  }
266 
267  return in;
268  }
Facet class to specify parsing of equations in currect locale (see class JLANG::JEquation).
char getRightBracket() const
Get right bracket.
istreambuf_iterator get(const istreambuf_iterator __begin, const istreambuf_iterator __end, const std::ios_base &format, std::ios_base::iostate &result, char &buffer) const
Get character.
char getLeftBracket() const
Get left bracket.
then awk string
std::istream & ignore(std::istream &in) const
Ignore characters until next end of line.
std::istream & getline(std::istream &in, std::string &buffer) const
Read characters until next end of line.
bool isWhiteSpace(const char c) const
Test for white space character.
$WORKDIR ev_configure_dqsimulator txt echo process $DQ_SIMULATOR $i $SOURCE_HOST[$index] csh c(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&($DQ_SIMULATOR\-u\$NAME\$\-H\$SERVER\$\-M\$LOGGER\$\-d $DEBUG</dev/null > &/dev/null &))'
bool isSkipLine(const char c) const
Test for skip line character.
bool isSeparator(const char c) const
Test for separator character.
JEquation()
Default constructor.
Definition: JEquation.hh:126
bool isDivision(const char c) const
Test for division character.
char * loc(char *orig)
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Definition: JCanberra.sh:46
std::ostream& operator<< ( std::ostream &  out,
const JEquation equation 
)
friend

Write equation to output stream.

Parameters
outoutput stream
equationequation
Returns
output stream

Definition at line 278 of file JEquation.hh.

279  {
280  using namespace std;
281 
282  ostream::sentry sentry(out);
283 
284  if (sentry) {
285 
286  const locale& loc = out.getloc();
287 
288  if (has_facet<JEquationFacet>(loc)) {
289 
290  const JEquationFacet& facet = use_facet<JEquationFacet>(loc);
291 
292  out << equation.key;
293  out << facet.getDefaultSeparator();
294  out << equation.value;
295  out << facet.getDefaultEndOfLine();
296 
297  } else {
298 
299  out << equation.key;
300  out << equation.sep;
301  out << equation.value;
302  out << endl;
303  }
304  }
305 
306  return out;
307  }
Facet class to specify parsing of equations in currect locale (see class JLANG::JEquation).
const char getDefaultSeparator() const
Get default separator character.
const char getDefaultEndOfLine() const
Get default end of line character.
char * loc(char *orig)

Member Data Documentation

JString JLANG::JEquation::key
protected

Definition at line 375 of file JEquation.hh.

char JLANG::JEquation::sep
protected

Definition at line 376 of file JEquation.hh.

JString JLANG::JEquation::value
protected

Definition at line 377 of file JEquation.hh.


The documentation for this class was generated from the following file: