Program Listing for File Triangle.h

Program Listing for File Triangle.h#

Return to documentation for file (src/main/cpp/lib/Triangle.h)

#ifndef TRIANGLE_H_
#define TRIANGLE_H_

#include <cstddef>
#include <vector>
#include <cassert>

template<typename T, size_t dim>
  class Triangle
  {
  private:
    typename std::vector<T> m_data;
  public:
    Triangle () :
    m_data (dim * (dim + 1) / 2, T ())
    {
    }

    Triangle (const std::vector<T> data) :
    m_data (data)
    {
      assert(m_data.size () == dim * (dim + 1) / 2);
    }

    virtual
    ~Triangle ()
    {
    }

    const T&
    at (size_t i, size_t j) const
    {
      assert(i < dim);
      assert(j <= i);
      return m_data.at (i * (i + 1) / 2 + j);
    }

    T&
    at (size_t i, size_t j)
    {
      assert(i < dim);
      assert(j <= i);
      return m_data.at (i * (i + 1) / 2 + j);
    }
  };

#endif /* TRIANGLE_H_ */