Download | Plain Text | Line Numbers


/**
 * @module cdat
 * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
 * @brief  Datatype template and datatype definition for CCPU and CMem
 * @date   26.05.2009
 */
 
#ifndef CDAT_H
#define CDAT_H 1
 
#include <boost/operators.hpp>
#include <iostream>
 
/**
 * @class CDat
 *
 * Datatype template for CCPU and CMem.
 */
template <class T>
class CDat
  : public boost::operators<CDat<T> >
{
  public:
    /**
     * @method CDat
     * @brief  Default ctor
     * @param  -
     * @return -
     * @globalvars none
     * @exception  bad_alloc
     * @pre  none
     * @post none
     */
    CDat()
    {}
 
    /**
     * @method ~CDat
     * @brief  Default dtor
     * @param  -
     * @return -
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    virtual ~CDat()
    {}
 
    /**
     * @method CDat
     * @brief  Copy constructor for CDat
     * @param  other  reference to CDat which will be copied
     * @return -
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    CDat(const CDat& other)
      : m_value(other.m_value)
    {}
 
    /**
     * @method CDat
     * @brief  Copy constructor for T
     * @param  newval  new value for CDat
     * @return -
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    CDat(const T newval)
      : m_value(newval)
    {}
 
    /**
     * @method getValue
     * @brief  returns value of CDat
     * @param  -
     * @return value of CDat
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    T getValue() const
    {
      return m_value;
    }
 
    /**
     * @method operator T
     * @brief  convert to T
     * @param  -
     * @return T
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    operator T()
    {
      return m_value;
    }
 
    /**
     * @method operator<
     * @brief  implementation of operator <
     * @param  x  reference to CDat
     * @return true if cdat is less than object x
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    bool operator<(const CDat& x) const
    {
      return m_value < x.m_value;
    }
 
    /**
     * @method operator==
     * @brief  implementation of operator ==
     * @param  x  reference to CDat
     * @return true if cdat equals object x
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    bool operator==(const CDat& x) const
    {
      return m_value == x.m_value;
    }
 
    /**
     * @method operator+=
     * @brief  implementation of operator +=
     * @param  x  reference to CDat
     * @return refecence to CDat
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    CDat& operator+=(const CDat& x)
    {
      m_value += x.m_value;
      return *this;
    }
 
    /**
     * @method operator-=
     * @brief  implementation of operator -=
     * @param  x  reference to CDat
     * @return refecence to CDat
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    CDat& operator-=(const CDat& x)
    {
      m_value -= x.m_value;
      return *this;
    }
 
    /**
     * @method operator*=
     * @brief  implementation of operator *=
     * @param  x  reference to CDat
     * @return refecence to CDat
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    CDat& operator*=(const CDat& x)
    {
      m_value *= x.m_value;
      return *this;
    }
 
    /**
     * @method operator/=
     * @brief  implementation of operator /=
     * @param  x  reference to CDat
     * @return refecence to CDat
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    CDat& operator/=(const CDat& x)
    {
      m_value /= x.m_value;
      return *this;
    }
 
    /**
     * @method operator%=
     * @brief  implementation of operator %=
     * @param  x  reference to CDat
     * @return refecence to CDat
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    CDat& operator%=(const CDat& x)
    {
      m_value %= x.m_value;
      return *this;
    }
 
    /**
     * @method operator|=
     * @brief  implementation of operator |=
     * @param  x  reference to CDat
     * @return refecence to CDat
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    CDat& operator|=(const CDat& x)
    {
      m_value |= x.m_value;
      return *this;
    }
 
    /**
     * @method operator&=
     * @brief  implementation of operator &=
     * @param  x  reference to CDat
     * @return refecence to CDat
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    CDat& operator&=(const CDat& x)
    {
      m_value &= x.m_value;
      return *this;
    }
 
    /**
     * @method operator^=
     * @brief  implementation of operator ^=
     * @param  x  reference to CDat
     * @return refecence to CDat
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    CDat& operator^=(const CDat& x)
    {
      m_value ^= x.m_value;
      return *this;
    }
 
    /**
     * @method operator++
     * @brief  implementation of operator ++
     * @param  -
     * @return refecence to CDat
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    CDat& operator++()
    {
      m_value++;
      return *this;
    }
 
    /**
     * @method operator--
     * @brief  implementation of operator --
     * @param  -
     * @return refecence to CDat
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    CDat& operator--()
    {
      m_value--;
      return *this;
    }
 
    /**
     * @method operator<<
     * @brief  Shift/output operator for outputstream
     * @param  stream  reference to outputstream
     * @param  cdat    object which will be printed to stream
     * @return reference to outputstream
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    friend std::ostream& operator<<(std::ostream& stream, CDat cdat)
    {
      stream << cdat.m_value;
      return stream;
    }
 
    /**
     * @method operator>>
     * @brief  Shift/read operator for inputstream
     * @param  stream  reference to inputstream
     * @param  cdat    reference to object which will be read from stream
     * @return reference to inputstream
     * @globalvars none
     * @exception  none
     * @pre  none
     * @post none
     */
    friend std::istream& operator>>(std::istream & stream, CDat& cdat)
    {
      stream >> cdat.m_value;
      return stream;
    }
 
  protected:
    /* members */
    /** internal value of datatype */
    T m_value;
};
 
#endif
 
/* vim: set et sw=2 ts=2: */