diff options
Diffstat (limited to 'cpp/demo/Freeze/library/Parser.cpp')
-rw-r--r-- | cpp/demo/Freeze/library/Parser.cpp | 509 |
1 files changed, 0 insertions, 509 deletions
diff --git a/cpp/demo/Freeze/library/Parser.cpp b/cpp/demo/Freeze/library/Parser.cpp deleted file mode 100644 index 3900778125e..00000000000 --- a/cpp/demo/Freeze/library/Parser.cpp +++ /dev/null @@ -1,509 +0,0 @@ -// ********************************************************************** -// -// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. -// -// This copy of Ice is licensed to you under the terms described in the -// ICE_LICENSE file included in this distribution. -// -// ********************************************************************** - -#include <Parser.h> - -#ifdef HAVE_READLINE -# include <readline/readline.h> -# include <readline/history.h> -#endif - -using namespace std; -using namespace Demo; - -extern FILE* yyin; - -Parser* parser; - -void -Parser::usage() -{ - cout << - "help Print this message.\n" - "exit, quit Exit this program.\n" - "add isbn title authors Create new book.\n" - "isbn NUMBER Find the book with given ISBN number.\n" - "authors NAME Find all books by the given authors.\n" - "next Set the current book to the next one that was found.\n" - "current Display the current book.\n" - "rent NAME Rent the current book for customer NAME.\n" - "return Return the currently rented book.\n" - "remove Permanently remove the current book from the library.\n" - "size SIZE Set the evictor size for books to SIZE.\n" - "shutdown Shut the library server down.\n"; -} - -Parser::Parser(const LibraryPrx& library) : - _library(library) -{ -} - -void -Parser::addBook(const list<string>& _args) -{ - if(_args.size() != 3) - { - error("`add' requires at exactly three arguments (type `help' for more info)"); - return; - } - - try - { - list<string> args = _args; - - BookDescription desc; - desc.isbn = args.front(); - args.pop_front(); - desc.title = args.front(); - args.pop_front(); - desc.authors = args.front(); - - BookPrx book = _library->createBook(desc); - cout << "added new book with isbn " << desc.isbn << endl; - } - catch(const DatabaseException& ex) - { - error(ex.message); - } - catch(const BookExistsException&) - { - error("the book already exists."); - } - catch(const Ice::Exception& ex) - { - ostringstream s; - s << ex; - error(s.str()); - } -} - -void -Parser::findIsbn(const list<string>& args) -{ - if(args.size() != 1) - { - error("`isbn' requires exactly one argument (type `help' for more info)"); - return; - } - - try - { - _foundBooks.clear(); - _current = _foundBooks.begin(); - - BookPrx book = _library->findByIsbn(args.front()); - if(!book) - { - cout << "no book with that ISBN number exists." << endl; - } - else - { - _foundBooks.push_back(book); - _current = _foundBooks.begin(); - printCurrent(); - } - } - catch(const DatabaseException& ex) - { - error(ex.message); - } - catch(const Ice::Exception& ex) - { - ostringstream s; - s << ex; - error(s.str()); - } -} - -void -Parser::findAuthors(const list<string>& args) -{ - if(args.size() != 1) - { - error("`authors' requires exactly one argument (type `help' for more info)"); - return; - } - - try - { - _foundBooks = _library->findByAuthors(args.front()); - _current = _foundBooks.begin(); - cout << "number of books found: " << _foundBooks.size() << endl; - printCurrent(); - } - catch(const DatabaseException& ex) - { - error(ex.message); - } - catch(const Ice::Exception& ex) - { - ostringstream s; - s << ex; - error(s.str()); - } -} - -void -Parser::nextFoundBook() -{ - if(_current != _foundBooks.end()) - { - ++_current; - } - printCurrent(); -} - -void -Parser::printCurrent() -{ - try - { - if(_current != _foundBooks.end()) - { - BookDescription desc = (*_current)->getBookDescription(); - string renter; - try - { - renter = (*_current)->getRenterName(); - } - catch(const BookNotRentedException&) - { - } - - cout << "current book is:" << endl; - cout << "isbn: " << desc.isbn << endl; - cout << "title: " << desc.title << endl; - cout << "authors: " << desc.authors << endl; - if(!renter.empty()) - { - cout << "rented: " << renter << endl; - } - } - else - { - cout << "no current book" << endl; - } - } - catch(const Ice::ObjectNotExistException&) - { - cout << "current book no longer exists" << endl; - } - catch(const Ice::Exception& ex) - { - ostringstream s; - s << ex; - error(s.str()); - } -} - -void -Parser::rentCurrent(const list<string>& args) -{ - if(args.size() != 1) - { - error("`rent' requires exactly one argument (type `help' for more info)"); - return; - } - - try - { - if(_current != _foundBooks.end()) - { - (*_current)->rentBook(args.front()); - cout << "the book is now rented by `" << args.front() << "'" << endl; - } - else - { - cout << "no current book" << endl; - } - } - catch(const BookRentedException&) - { - cout << "the book has already been rented." << endl; - } - catch(const Ice::ObjectNotExistException&) - { - cout << "current book no longer exists" << endl; - } - catch(const DatabaseException& ex) - { - error(ex.message); - } - catch(const Ice::Exception& ex) - { - ostringstream s; - s << ex; - error(s.str()); - } -} - -void -Parser::returnCurrent() -{ - try - { - if(_current != _foundBooks.end()) - { - (*_current)->returnBook(); - cout << "the book has been returned." << endl; - } - else - { - cout << "no current book" << endl; - } - } - catch(const BookNotRentedException&) - { - cout << "the book is not currently rented." << endl; - } - catch(const Ice::ObjectNotExistException&) - { - cout << "current book no longer exists" << endl; - } - catch(const DatabaseException& ex) - { - error(ex.message); - } - catch(const Ice::Exception& ex) - { - ostringstream s; - s << ex; - error(s.str()); - } -} - -void -Parser::removeCurrent() -{ - try - { - if(_current != _foundBooks.end()) - { - (*_current)->destroy(); - cout << "removed current book" << endl; - } - else - { - cout << "no current book" << endl; - } - } - catch(const Ice::ObjectNotExistException&) - { - cout << "current book no longer exists" << endl; - } - catch(const DatabaseException& ex) - { - error(ex.message); - } - catch(const Ice::Exception& ex) - { - ostringstream s; - s << ex; - error(s.str()); - } -} - -void -Parser::setEvictorSize(const list<string>& args) -{ - if(args.size() != 1) - { - error("`size' requires exactly one argument (type `help' for more info)"); - return; - } - - try - { - _library->setEvictorSize(atoi(args.front().c_str())); - } - catch(const DatabaseException& ex) - { - error(ex.message); - } - catch(const Ice::Exception& ex) - { - ostringstream s; - s << ex; - error(s.str()); - } -} - -void -Parser::shutdown() -{ - try - { - _library->shutdown(); - } - catch(const Ice::Exception& ex) - { - ostringstream s; - s << ex; - error(s.str()); - } -} - -// -// With older flex version <= 2.5.35 YY_INPUT second -// paramenter is of type int&, in newer versions it -// changes to size_t& -// -void -Parser::getInput(char* buf, int& result, size_t maxSize) -{ - size_t r = static_cast<size_t>(result); - getInput(buf, r, maxSize); - result = static_cast<int>(r); -} - -void -Parser::getInput(char* buf, size_t& result, size_t maxSize) -{ -#ifdef HAVE_READLINE - - const char* prompt = parser->getPrompt(); - char* line = readline(const_cast<char*>(prompt)); - if(!line) - { - result = 0; - } - else - { - if(*line) - { - add_history(line); - } - - result = strlen(line) + 1; - if(result > maxSize) - { - free(line); - error("input line too long"); - result = 0; - } - else - { - strcpy(buf, line); - strcat(buf, "\n"); - free(line); - } - } - -#else - - cout << parser->getPrompt() << flush; - - string line; - char c; - do - { - c = static_cast<char>(getc(yyin)); - if(c == EOF) - { - if(line.size()) - { - line += '\n'; - } - } - else - { - line += c; - } - } while(c != EOF && c != '\n'); - - result = static_cast<int>(line.length()); - if(result > maxSize) - { - error("input line too long"); - buf[0] = EOF; - result = 1; - } - else - { -# ifdef _WIN32 - strcpy_s(buf, result + 1, line.c_str()); -# else - strcpy(buf, line.c_str()); -# endif - } -#endif -} - -void -Parser::continueLine() -{ - _continue = true; -} - -const char* -Parser::getPrompt() -{ - if(_continue) - { - _continue = false; - return "(cont) "; - } - else - { - return ">>> "; - } -} - -void -Parser::error(const char* s) -{ - cerr << "error: " << s << endl; - _errors++; -} - -void -Parser::error(const string& s) -{ - error(s.c_str()); -} - -void -Parser::warning(const char* s) -{ - cerr << "warning: " << s << endl; -} - -void -Parser::warning(const string& s) -{ - warning(s.c_str()); -} - -int -Parser::parse(bool debug) -{ - extern int yydebug; - yydebug = debug ? 1 : 0; - - assert(!parser); - parser = this; - - _errors = 0; - yyin = stdin; - assert(yyin); - - _continue = false; - - _foundBooks.clear(); - _current = _foundBooks.end(); - - int status = yyparse(); - if(_errors) - { - status = EXIT_FAILURE; - } - - parser = 0; - return status; -} |