// Copyright {Jagger Software Limited} 2003 #include "grammar/unnamed_symbol_definition.hpp" #include "contract/not_null_ptr.hpp" #include "contract/pre_condition.hpp" #include #include #include #include #include using namespace ::std; namespace grammar // unnamed_symbol_definition - 'tors { using ::contract::not_null_ptr; unnamed_symbol_definition::unnamed_symbol_definition ( const key_type & key, const char * name, const char * value ) : symbol_definition(key, name) , value(value) , size(strlen(not_null_ptr(value))) { PRE_CONDITION(size > 0); } unnamed_symbol_definition::unnamed_symbol_definition(const unnamed_symbol_definition & other) : symbol_definition(other) , value(other.value) , size(other.size) { } unnamed_symbol_definition::~unnamed_symbol_definition() { } } namespace grammar // unnamed_symbol_definition - iteration { const char * unnamed_symbol_definition::begin() const { return value; } const char * unnamed_symbol_definition::end() const { return value + size; } } namespace grammar // unnamed_symbol_definition - interface only { void unnamed_symbol_definition::write(ostream & out) const { // eg "one-of" string id = name; // eg --> "ONE-OF" transform(id.begin(), id.end(), id.begin(), toupper); // eg --> "ONE_OF" replace(id.begin(), id.end(), '-', '_'); out << id << '(' << value << ')'; } }