Jpp
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>

Classes

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

Public Member Functions

 JEquation ()
 Default constructor. More...
 
 JEquation (const std::string &buffer, const JEquationFacet &facet)
 Constructor. More...
 
const std::string & getKey () const
 Get key. More...
 
const char getSeparator () const
 Get separator. More...
 
const std::string & getValue () 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< T > make_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> <end of line>
      <key> <separator> <left bracket> <value> <value> <right bracket> <end of line>
      <key><division><key> <separator> <value> <end of line>

In this:

In case of a division of the key, the value of the equation will include the following key up to the end of line. The special characters are defined in the JEquationParameters class. The use of this class for I/O is handled via the JEquationFacet class.

Definition at line 47 of file JEquation.hh.

Constructor & Destructor Documentation

◆ JEquation() [1/2]

JLANG::JEquation::JEquation ( )
inline

Default constructor.

Definition at line 126 of file JEquation.hh.

126  :
127  key (),
128  sep ('\0'),
129  value()
130  {}

◆ JEquation() [2/2]

JLANG::JEquation::JEquation ( const std::string &  buffer,
const JEquationFacet facet 
)
inline

Constructor.

Parameters
facetfacet
bufferinput

Definition at line 139 of file JEquation.hh.

140  {
141  setEquation(buffer, facet);
142  }

Member Function Documentation

◆ make_equation()

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  }

◆ getKey()

const std::string& JLANG::JEquation::getKey ( ) const
inline

Get key.

Returns
key

Definition at line 150 of file JEquation.hh.

151  {
152  return key;
153  }

◆ getSeparator()

const char JLANG::JEquation::getSeparator ( ) const
inline

Get separator.

Returns
separator

Definition at line 161 of file JEquation.hh.

162  {
163  return sep;
164  }

◆ getValue()

const std::string& JLANG::JEquation::getValue ( ) const
inline

Get value.

Returns
value

Definition at line 172 of file JEquation.hh.

173  {
174  return value;
175  }

◆ setEquation() [1/2]

JEquation& JLANG::JEquation::setEquation ( const std::string &  buffer,
const JEquationFacet facet 
)
inline

Set equation.

Parameters
bufferinput
facetfacet
Returns
this equation

Definition at line 304 of file JEquation.hh.

305  {
306  using namespace std;
307 
308  istringstream in(buffer);
309 
310  in.imbue(locale(in.getloc(), facet.clone()));
311 
312  in >> *this;
313 
314  return *this;
315  }

◆ setEquation() [2/2]

JEquation& JLANG::JEquation::setEquation ( const JEquationFacet facet)
inline

Set this equation to its value.

Parameters
facetfacet
Returns
this equation

Definition at line 324 of file JEquation.hh.

325  {
326  setEquation(getValue(), facet);
327 
328  return *this;
329  }

◆ valueOf()

static JEquation JLANG::JEquation::valueOf ( const std::string &  buffer,
const JEquationFacet facet 
)
inlinestatic

Extract equation.

Parameters
bufferinput
facetfacet
Returns
equation

Definition at line 339 of file JEquation.hh.

340  {
341  return JEquation(buffer, facet);
342  }

◆ toString()

std::string JLANG::JEquation::toString ( ) const
inline

Convert equation to string.

Returns
string

Definition at line 350 of file JEquation.hh.

351  {
352  std::string buffer;
353 
354  buffer += getKey();
355  buffer += getSeparator();
356  buffer += getValue();
357 
358  return buffer;
359  }

Friends And Related Function Documentation

◆ operator>>

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

Read equation from input stream.

Parameters
ininput stream
equationequation
Returns
input stream

Definition at line 185 of file JEquation.hh.

186  {
187  using namespace std;
188 
189  istream::sentry sentry(in, false);
190 
191  if (sentry) {
192 
193  equation = JEquation();
194 
195  const locale& loc = in.getloc();
196 
197  if (has_facet<JEquationFacet>(loc)) {
198 
199  const JEquationFacet& facet = use_facet<JEquationFacet>(loc);
200 
201  ios_base::iostate state = in.rdstate();
202 
203 
204  for (int c; (c = in.peek()) != EOF && facet.isSkipLine((char) c); ) {
205  facet.ignore(in);
206  }
207 
208 
209  if (state == ios_base::goodbit) facet.get(in, istreambuf_iterator<char>(), in, state, equation.key);
210  if (state == ios_base::goodbit) facet.get(in, istreambuf_iterator<char>(), in, state, equation.sep);
211  if (state == ios_base::goodbit) facet.getline(in, equation.value);
212 
213 
214  // remove white spaces and brackets before evaluation
215 
216  if (facet.isSeparator(equation.sep)) {
217 
218  JString::const_iterator p = equation.value. begin();
219  JString::const_reverse_iterator q = equation.value.rbegin();
220 
221  for ( ; ; ++p, ++q) {
222 
223  for ( ; p != equation.value. end() && facet.isWhiteSpace(*p); ++p) {}
224  for ( ; q != equation.value.rend() && facet.isWhiteSpace(*q); ++q) {}
225 
226  if (p == equation.value. end() || *p != facet.getLeftBracket() ||
227  q == equation.value.rend() || *q != facet.getRightBracket()) {
228  break;
229  }
230  }
231 
232  if (p != equation.value.begin() || q != equation.value.rbegin()) {
233  equation.value = string(p, q.base());
234  }
235  }
236 
237  if (state != ios_base::goodbit && state != ios_base::eofbit) {
238  in.setstate(state);
239  }
240 
241  if (!(state & ios_base::eofbit)) {
242  if (!facet.isDivision (equation.sep) &&
243  !facet.isSeparator(equation.sep)) {
244  in.setstate(ios_base::badbit);
245  }
246  }
247 
248  } else {
249 
250  in.setstate(ios_base::failbit);
251  }
252  }
253 
254  return in;
255  }

◆ operator<<

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 265 of file JEquation.hh.

266  {
267  using namespace std;
268 
269  ostream::sentry sentry(out);
270 
271  if (sentry) {
272 
273  const locale& loc = out.getloc();
274 
275  if (has_facet<JEquationFacet>(loc)) {
276 
277  const JEquationFacet& facet = use_facet<JEquationFacet>(loc);
278 
279  out << equation.key;
280  out << facet.getDefaultSeparator();
281  out << equation.value;
282  out << facet.getDefaultEndOfLine();
283 
284  } else {
285 
286  out << equation.key;
287  out << equation.sep;
288  out << equation.value;
289  out << endl;
290  }
291  }
292 
293  return out;
294  }

Member Data Documentation

◆ key

JString JLANG::JEquation::key
protected

Definition at line 362 of file JEquation.hh.

◆ sep

char JLANG::JEquation::sep
protected

Definition at line 363 of file JEquation.hh.

◆ value

JString JLANG::JEquation::value
protected

Definition at line 364 of file JEquation.hh.


The documentation for this class was generated from the following file:
JLANG::JEquation::JEquation
JEquation()
Default constructor.
Definition: JEquation.hh:126
JLANG::JEquationParameters::isSkipLine
bool isSkipLine(const char c) const
Test for skip line character.
Definition: JEquationParameters.hh:402
JLANG::JEquationParameters::isSeparator
bool isSeparator(const char c) const
Test for separator character.
Definition: JEquationParameters.hh:369
JLANG::JEquationParameters::isDivision
bool isDivision(const char c) const
Test for division character.
Definition: JEquationParameters.hh:390
JLANG::JEquation::getValue
const std::string & getValue() const
Get value.
Definition: JEquation.hh:172
JLANG::JStringFacet::ignore
std::istream & ignore(std::istream &in) const
Ignore characters until next end of line.
Definition: JStringFacet.hh:104
JLANG::JEquation::value
JString value
Definition: JEquation.hh:364
loc
char * loc(char *orig)
JLANG::JEquationFacet::clone
virtual JEquationFacet * clone() const
Clone this facet.
Definition: JEquationFacet.hh:67
JLANG::JEquation::key
JString key
Definition: JEquation.hh:362
JLANG::JEquationFacet
Facet class to specify parsing of equations in currect locale (see class JLANG::JEquation).
Definition: JEquationFacet.hh:32
JLANG::JEquationParameters::getDefaultEndOfLine
const char getDefaultEndOfLine() const
Get default end of line character.
Definition: JEquationParameters.hh:129
JLANG::JEquationParameters::isWhiteSpace
bool isWhiteSpace(const char c) const
Test for white space character.
Definition: JEquationParameters.hh:438
JLANG::JEquation::getSeparator
const char getSeparator() const
Get separator.
Definition: JEquation.hh:161
JLANG::JEquation::sep
char sep
Definition: JEquation.hh:363
JLANG::JEquationFacet::get
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.
Definition: JEquationFacet.hh:83
JLANG::JEquationParameters::getDefaultSeparator
const char getDefaultSeparator() const
Get default separator character.
Definition: JEquationParameters.hh:93
JLANG::JEquation::setEquation
JEquation & setEquation(const std::string &buffer, const JEquationFacet &facet)
Set equation.
Definition: JEquation.hh:304
std
Definition: jaanetDictionary.h:36
JLANG::JEquationParameters::getLeftBracket
char getLeftBracket() const
Get left bracket.
Definition: JEquationParameters.hh:267
JLANG::JStringFacet::getline
std::istream & getline(std::istream &in, std::string &buffer) const
Read characters until next end of line.
Definition: JStringFacet.hh:121
JLANG::JEquation::getKey
const std::string & getKey() const
Get key.
Definition: JEquation.hh:150
JLANG::JEquationParameters::getRightBracket
char getRightBracket() const
Get right bracket.
Definition: JEquationParameters.hh:278