--- /dev/null
+#ifndef _NNC_CORE_BACKEND_INTERPRETER_FILL_IMPL_
+#define _NNC_CORE_BACKEND_INTERPRETER_FILL_IMPL_
+
+#include "interpreter/ops/Fill.h"
+
+namespace nncc
+{
+namespace contrib
+{
+namespace backend
+{
+namespace interpreter
+{
+namespace impl
+{
+
+template <typename T> class Concat : public Fill<T>
+{
+public:
+ explicit Concat(const std::vector<TensorVariant> &inputs, const Shape &outputShape,
+ unsigned int axis)
+ : Fill<T>(outputShape, getSingleFunction(inputs, axis))
+ {
+ }
+
+private:
+ const std::function<T(const Index &)> getSingleFunction(const std::vector<TensorVariant> &inputs,
+ unsigned int axis)
+ {
+ std::vector<Tensor<T>> inputAccessors;
+ for (auto &in : inputs)
+ {
+ inputAccessors.emplace_back(in);
+ }
+
+ return std::function<T(const Index &)>([inputAccessors, axis](const Index &id) -> T {
+ unsigned int mi = 0;
+ uint32_t along_axis = id.at(axis);
+
+ while (along_axis >= inputAccessors.at(mi).getShape().dim(axis))
+ {
+ along_axis -= inputAccessors[mi].getShape().dim(axis);
+ mi++;
+ }
+
+ Index local_id = id;
+ local_id.at(axis) = along_axis;
+
+ return inputAccessors[mi].at(local_id);
+ });
+ }
+};
+
+} // namespace impl
+} // namespace interpreter
+} // namespace backend
+} // namespace contrib
+} // namespace nncc
+
+#endif //_NNC_CORE_BACKEND_INTERPRETER_FILL_IMPL_