Program Listing for File IOVector.h

Program Listing for File IOVector.h#

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

#ifndef IOVECTOR_H_
#define IOVECTOR_H_

#include <vector>
#include "Coordinates.h"
#include "InputAxis.h"
#include "Mapper.h"
#include "OutputGrid.h"

struct Point
{
  const Polar coord;

  const DrawerProperties<> prop;

  Point (Polar&& coord_, const DrawerProperties<>& prop_) :
      coord (coord_), prop (prop_)
  {
  }
};

class IOVector
{
private:
  /* The Point data */
  std::vector<Point> m_points;
public:
  const Point&
  operator[] (std::size_t i) const
  {
    return m_points[i];
  }

  inline std::size_t
  size (void) const
  {
    return m_points.size ();
  }

  template<typename ... Arg>
    void
    emplace_back (Arg&&... args)
    {
      m_points.emplace_back (std::forward<Arg>(args)...);
    }
};

class IOVectorFactory
{
private:
  double m_line_width, m_line_alpha, m_fill_alpha, m_round_factor;

  const OutputGrid& m_grid;
  const std::vector<InputAxis>& m_axis;

  std::vector<Mapper> m_input_mapper, m_output_mapper;

public:
  IOVectorFactory (std::size_t num_data_rows, const OutputGrid& grid,
           const std::vector<InputAxis>& axis);

  IOVector
  create (const DefDataRow& row) const;

private:
  double
  round (bool grid, std::size_t i, double val) const;

  const Color&
  get_color (double val) const;
};

#endif /* IOVECTOR_H_ */