
#ifndef PLS_DATAFLOW_GRAPH_H_
#define PLS_DATAFLOW_GRAPH_H_

#include "inputs.h"
#include "outputs.h"

namespace pls {
namespace dataflow {

template<typename I, typename O, int P>
class graph {
  using internal_inputs = typename I::template internal_inputs<P>;
  using internal_outputs = typename O::template internal_outputs<P>;

 public:
  internal_inputs inputs_;
  internal_outputs outputs_;

  template<int N>
  decltype(outputs_.template get<N>()) output() {
    return outputs_.template get<N>();
  }

  template<int N>
  decltype(inputs_.template get<N>()) input() {
    return inputs_.template get<N>();
  }
};

}
}

#endif //PLS_DATAFLOW_GRAPH_H_
