X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FParse.cci;h=011ff9d137ae70a1c074b86f01c93a6195c60bf7;hb=fa5eaa97c8593e3587c87f25adb14f7f91f31f37;hp=c9ff9aded07b4f0df28770d40670cffc03ad241a;hpb=e879290346fe5242d7df2d70ee552d264081492f;p=senf.git diff --git a/Console/Parse.cci b/Console/Parse.cci index c9ff9ad..011ff9d 100644 --- a/Console/Parse.cci +++ b/Console/Parse.cci @@ -150,6 +150,86 @@ prefix_ void senf::console::ParseCommandInfo::ArgumentIterator::increment() } /////////////////////////////////////////////////////////////////////////// + +prefix_ senf::console::CheckedArgumentIteratorWrapper:: +CheckedArgumentIteratorWrapper(ParseCommandInfo::ArgumentsRange const & range, + std::string const & msg) + : i_ (range.begin()), e_ (range.end()), msg_ (msg) +{} + +prefix_ senf::console::CheckedArgumentIteratorWrapper:: +CheckedArgumentIteratorWrapper(ParseCommandInfo::TokensRange const & range, + std::string const & msg) + : i_ (range.begin()), e_ (range.end()), msg_ (msg) +{} + +prefix_ senf::console::CheckedArgumentIteratorWrapper::~CheckedArgumentIteratorWrapper() +{ + if (i_ != e_ && ! std::uncaught_exception()) + throw SyntaxErrorException(msg_); +} + +prefix_ senf::console::CheckedArgumentIteratorWrapper::operator ParseCommandInfo::ArgumentIterator() +{ + return i_; +} + +prefix_ bool senf::console::CheckedArgumentIteratorWrapper::boolean_test() + const +{ + return i_ != e_; +} + +prefix_ bool senf::console::CheckedArgumentIteratorWrapper::done() + const +{ + return i_ == e_; +} + +prefix_ void senf::console::CheckedArgumentIteratorWrapper::clear() +{ + i_ = e_; +} + +prefix_ senf::console::CheckedArgumentIteratorWrapper::reference +senf::console::CheckedArgumentIteratorWrapper::dereference() + const +{ + if (i_ == e_) + throw SyntaxErrorException(msg_); + return *i_; +} + +prefix_ void senf::console::CheckedArgumentIteratorWrapper::increment() +{ + if (i_ == e_) + throw SyntaxErrorException(msg_); + ++ i_; +} + +prefix_ bool senf::console::CheckedArgumentIteratorWrapper:: +operator==(ParseCommandInfo::ArgumentIterator const & other) + const +{ + return i_ == other; +} + +prefix_ bool senf::console::CheckedArgumentIteratorWrapper:: +operator!=(ParseCommandInfo::ArgumentIterator const & other) + const +{ + return i_ != other; +} + +prefix_ senf::console::ParseCommandInfo::ArgumentIterator +senf::console::CheckedArgumentIteratorWrapper::operator++(int) +{ + ParseCommandInfo::ArgumentIterator i (i_); + increment(); + return i; +} + +/////////////////////////////////////////////////////////////////////////// // senf::console::SingleCommandParser prefix_ senf::console::CommandParser::Impl & senf::console::CommandParser::impl()