iset_operators.h

00001 /*
00002  *  Copyright (C) 2005 M.J. Zaki <zaki@cs.rpi.edu> Rensselaer Polytechnic Institute
00003  *  Written by parimi@cs.rpi.edu
00004  *  Updated by chaojv@cs.rpi.edu, alhasan@cs.rpi.edu, salems@cs.rpi.edu
00005  *
00006  *  This program is free software; you can redistribute it and/or
00007  *  modify it under the terms of the GNU General Public License
00008  *  as published by the Free Software Foundation; either version 2
00009  *  of the License, or (at your option) any later version.
00010  *
00011  *  This program is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  *  GNU General Public License for more details.
00015  *
00016  *  You should have received a copy of the GNU General Public License along
00017  *  with this program; if not, write to the Free Software Foundation, Inc.,
00018  *  59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
00019  */
00020 #ifndef _ISET_OPERATORS_H_
00021 #define _ISET_OPERATORS_H_
00022 
00023 #include<ostream>
00024 using namespace std;
00025 
00026 #include "typedefs.h"
00027 
00028 template<class PP, class MP, class ST, 
00029          template<class, typename, typename, template <typename> class > class CC, 
00030          template <typename> class ALLOC >
00031 class pattern;
00032 
00033 template<class PP, class MP, class PAT_ST, 
00034          template<typename, typename, typename, template <typename> class > class CC,
00035          template <typename> class ALLOC >
00036 ostream& operator<< (ostream& ostr, const ISET_PATTERN* p) {
00037   typename ISET_PATTERN::CONST_IT it;
00038 
00039   for(it=p->begin(); it!=p->end(); it++) {
00040 
00041     if(it == p->begin()) {
00042       ostr << (*it).v;
00043     } else {
00044       ostr << " " << (*it).v;
00045     }
00046   }
00047 
00048    ostr <<" -- "<<p->_pat_sup; 
00049 
00050    return ostr;
00051 }
00052 
00053 #include "pattern.h"
00054 
00055 
00056 template<class PP, class MP, class PAT_ST, 
00057          template<class, typename, typename, template <typename> class > class CC,
00058          template <typename> class ALLOC >
00059 bool pattern<PP,MP,PAT_ST,CC, ALLOC>::operator< (const pattern<PP,MP,PAT_ST,CC, ALLOC> rhs) const {
00060 
00061   CONST_IT it=begin(), rhs_it=rhs.begin();
00062 
00063   if(size()!=rhs.size()) {
00064     cerr<<"Sequences are not of the same size."<<endl;
00065     exit(0);
00066   }
00067 
00068   while(it!=end() && rhs_it!=rhs.end()) {
00069     if((*it).v != (*rhs_it).v)
00070       return (*it) < (*rhs_it);
00071 
00072     it++;
00073     rhs_it++;
00074   }//end outer while
00075   
00076   //if execuion reaches this point then sequences are equal
00077   return false;
00078 }
00079 
00080 #endif

Generated on Wed Jul 26 14:01:08 2006 for DMTL by  doxygen 1.4.7