Program Listing for File FunctionObject.h

Program Listing for File FunctionObject.h#

Return to documentation for file (src/util/support/FunctionObject.h)

#ifndef FUNCTIONAL_OBJECT_H
#define FUNCTIONAL_OBJECT_H

template <class T> class RoseSelectObject
{
  public:
   virtual bool operator()(const T& t) const = 0;
   virtual ~RoseSelectObject() {}
};

template <class T> class SelectObject1 : public RoseSelectObject<T>
{
   T sel;
  public:
   SelectObject1(const T& t) : sel(t) {}
   virtual bool operator()(const T& t) const
    { return t == sel; }
};

template <class T> class SelectObject2 : public RoseSelectObject<T>
{
   T sel1, sel2;
  public:
   SelectObject2(const T& t1, const T& t2) : sel1(t1), sel2(t2) {}
   virtual bool operator()(const T& t) const
    { return t == sel1 || t == sel2; }
};

template <class T1, class T2>
class Select2Object
{
  public:
   virtual bool operator()(const T1& t1, const T2& t2) const  = 0;
   virtual ~Select2Object() {}
};

template <class T> class CollectObject
{
  public:
   virtual bool operator()(const T& t) = 0;
   virtual ~CollectObject() {}
};

template <class T1, class T2>
class Collect2Object
{
  public:
   virtual bool operator()(const T1& t1, const T2& t2) = 0;
   virtual ~Collect2Object() {}
};

template <class T1, class T2> class MapObject
{ public:
   virtual T2 operator()( const T1& t) = 0;
   virtual ~MapObject() {}
};

template <class T1, class T2, class T3> class Map2Object
{ public:
   virtual T3 operator()( const T1& t1, const T2& t2) = 0;
   virtual ~Map2Object() {}
};

template <class T> class CompareObject
{ public:
   virtual int operator()( const T& t1, const T& t2) = 0;
   virtual ~CompareObject() {}
};

#endif