1 #ifndef __JLANG__JEQUATION__
2 #define __JLANG__JEQUATION__
19 namespace JPP {
using namespace JLANG; }
78 ostream::sentry sentry(out);
82 const locale&
loc = out.getloc();
84 if (has_facet<JEquationFacet>(
loc)) {
90 out << equation.
value;
97 out << equation.
value;
202 istream::sentry sentry(in,
false);
208 const locale&
loc = in.getloc();
210 if (has_facet<JEquationFacet>(
loc)) {
214 ios_base::iostate state = in.rdstate();
217 for (
int c; (c = in.peek()) != EOF && facet.
isSkipLine((
char) c); ) {
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);
231 JString::const_iterator p = equation.
value. begin();
232 JString::const_reverse_iterator q = equation.
value.rbegin();
234 for ( ; ; ++p, ++q) {
245 if (p != equation.
value.begin() || q != equation.
value.rbegin()) {
246 equation.
value = string(p, q.base());
250 if (state != ios_base::goodbit && state != ios_base::eofbit) {
254 if (!(state & ios_base::eofbit)) {
257 in.setstate(ios_base::badbit);
263 in.setstate(ios_base::failbit);
282 ostream::sentry sentry(out);
286 const locale&
loc = out.getloc();
288 if (has_facet<JEquationFacet>(
loc)) {
294 out << equation.
value;
301 out << equation.
value;
321 istringstream in(buffer);
323 in.imbue(locale(in.getloc(), facet.
clone()));
Facet class to specify parsing of equations in currect locale (see class JLANG::JEquation).
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.
virtual JEquationFacet * clone() const override
Clone this facet.
bool isSeparator(const char c) const
Test for separator character.
bool isDivision(const char c) const
Test for division character.
const char getDefaultSeparator() const
Get default separator character.
const char getDefaultEndOfLine() const
Get default end of line character.
char getLeftBracket() const
Get left bracket.
bool isSkipLine(const char c) const
Test for skip line character.
char getRightBracket() const
Get right bracket.
bool isWhiteSpace(const char c) const
Test for white space character.
General purpose equation class.
const std::string & getKey() const
Get key.
const std::string & getValue() const
Get value.
JEquation & setEquation(const JEquationFacet &facet)
Set this equation to its value.
JEquation()
Default constructor.
JEquation(const std::string &buffer, const JEquationFacet &facet)
Constructor.
std::string toString() const
Convert equation to string.
const char getSeparator() const
Get separator.
JEquation & setEquation(const std::string &buffer, const JEquationFacet &facet)
Set equation.
friend std::ostream & operator<<(std::ostream &out, const JEquation &equation)
Write equation to output stream.
static equation_type< T > make_equation(const std::string &key, const T &value)
Auxiliary method to create equation type.
JEquation(const std::string &key, const std::string &value)
Constructor.
static JEquation valueOf(const std::string &buffer, const JEquationFacet &facet)
Extract equation.
friend std::istream & operator>>(std::istream &in, JEquation &equation)
Read equation from input stream.
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.
Wrapper class around STL string class.
Auxiliary classes and methods for language specific functionality.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for equation.
friend std::ostream & operator<<(std::ostream &out, const equation_type &equation)
Write equation to output stream.
equation_type(const std::string __key, const T &__value)
Constructor.