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;
189 istream::sentry sentry(in,
false);
195 const locale&
loc = in.getloc();
197 if (has_facet<JEquationFacet>(loc)) {
201 ios_base::iostate state = in.rdstate();
204 for (
int c; (c = in.peek()) != EOF && facet.
isSkipLine((
char) c); ) {
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);
218 JString::const_iterator p = equation.
value. begin();
219 JString::const_reverse_iterator q = equation.
value.rbegin();
221 for ( ; ; ++p, ++q) {
232 if (p != equation.
value.begin() || q != equation.
value.rbegin()) {
233 equation.
value = string(p, q.base());
237 if (state != ios_base::goodbit && state != ios_base::eofbit) {
241 if (!(state & ios_base::eofbit)) {
244 in.setstate(ios_base::badbit);
250 in.setstate(ios_base::failbit);
269 ostream::sentry sentry(out);
273 const locale&
loc = out.getloc();
275 if (has_facet<JEquationFacet>(loc)) {
281 out << equation.
value;
288 out << equation.
value;
308 istringstream
in(buffer);
310 in.imbue(locale(in.getloc(), facet.
clone()));
const std::string & getKey() const
Get key.
Auxiliary data structure for equation.
static JEquation valueOf(const std::string &buffer, const JEquationFacet &facet)
Extract equation.
friend std::ostream & operator<<(std::ostream &out, const equation_type &equation)
Write equation to output stream.
const std::string & getValue() const
Get value.
Wrapper class around STL string class.
Facet class to specify parsing of equations in currect locale (see class JLANG::JEquation).
const char getDefaultSeparator() const
Get default separator character.
esac print_variable DETECTOR INPUT_FILE OUTPUT_FILE CDF for TYPE in
static equation_type< T > make_equation(const std::string &key, const T &value)
Auxiliary method to create equation type.
JEquation & setEquation(const JEquationFacet &facet)
Set this equation to its value.
std::string toString() const
Convert equation to string.
General purpose equation class.
friend std::istream & operator>>(std::istream &in, JEquation &equation)
Read equation from input stream.
JEquation(const std::string &buffer, const JEquationFacet &facet)
Constructor.
char getRightBracket() const
Get right bracket.
equation_type(const std::string __key, const T &__value)
Constructor.
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.
do set_variable OUTPUT_DIRECTORY $WORKDIR T
friend std::ostream & operator<<(std::ostream &out, const JEquation &equation)
Write equation to output 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.
JEquation & setEquation(const std::string &buffer, const JEquationFacet &facet)
Set equation.
const char getDefaultEndOfLine() const
Get default end of line character.
bool isWhiteSpace(const char c) const
Test for white space character.
bool isSkipLine(const char c) const
Test for skip line character.
virtual JEquationFacet * clone() const
Clone this facet.
bool isSeparator(const char c) const
Test for separator character.
JEquation()
Default constructor.
const char getSeparator() const
Get separator.
bool isDivision(const char c) const
Test for division character.