/*-----------------------------------------------------------------------------+ Copyright (c) 2007-2009: Joachim Faulhaber +------------------------------------------------------------------------------+ Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin +------------------------------------------------------------------------------+ Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENCE.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------+ splititvmap_shell.cpp provides a simple test shell for splitting interval maps. The shell also gives you a good idea how interval container are working. +-----------------------------------------------------------------------------*/ #include #include #include #include using namespace std; using namespace boost; using namespace boost::icl; void instructions() { cout << "+++++ Test shell for split interval map +++++\n"; cout << "Type: q e or 0 to quit\n"; cout << "Type: + for insertions\n"; cout << "Type: - for subtraction of ([a,b],value)\n"; cout << "Type: _ for subtraction of [a,b]\n"; cout << "Type: j to join contiguous intervals\n"; cout << "Type: s to compute total size\n"; } void wrongInput() { cout << "Wrong Input ------------------\n"; instructions(); } template void mapTestShell() { MapTV m1; try { char cmd = 'b'; typename MapTV::domain_type lwb = typename MapTV::domain_type(), upb = typename MapTV::domain_type(); typename MapTV::codomain_type val = typename MapTV::codomain_type(); instructions(); for(;;) { cout << "> "; cin >> cmd ; switch(cmd) { case 'q': case 'e': case '0': cout << "good bye\n"; return; case '+': { cout << "input: lwb upb val >> "; cin >> lwb >> upb >> val; typename MapTV::interval_type itv = typename MapTV::interval_type(lwb,upb); m1 += make_pair(itv,val); cout << "+" << itv << " " << val << " =" << endl; cout << "{" << m1 << "}" << endl; } break; case '-': { cout << "input: lwb upb val >> "; cin >> lwb >> upb >> val; typename MapTV::interval_type itv = typename MapTV::interval_type(lwb,upb); m1 -= make_pair(itv,val); cout << "-" << itv << " " << val << " =" << endl; cout << "{" << m1 << "}" << endl; } break; case 'j': { icl::join(m1); cout << "{" << m1 << "}" << endl; } break; case 's': { cout << "size = " << m1.size() << endl; } break; default: wrongInput(); } } // end while } catch (exception& e) { cout << "splititvmap_shell: exception caught: " << endl << e.what() << endl; } catch (...) { cout << "splititvmap_shell: unknown exception caught" << endl; } } int main() { cout << ">>Interval Container Library: Test splititvmap_shell.cpp <<\n"; cout << "-----------------------------------------------------------\n"; mapTestShell< interval_map >(); return 0; }