#include "eval_op.h"
#include "eval_input.h"
#include "eval_input2d.h"
#include "eval_add.h"
#include "eval_mul.h"
#include "eval_sub.h"
#include "eval_const.h"
#include "eval_flatten.h"
#include "eval_relu.h"
#include "eval_linear.h"
#include "eval_maxpool2d.h"
#include "eval_conv2d.h"

typedef std::map<std::string, std::shared_ptr<eval_op>> eval_op_proto_map;

class eval_op_prototypes {
    // prevent creation of additional instances
    eval_op_prototypes(const eval_op_prototypes &)=delete;
    eval_op_prototypes();
    eval_op_proto_map proto_map_;
    void log_proto_types();
public:
    std::shared_ptr<eval_op> locate(std::string name);
    static eval_op_prototypes &instance(); // access the only instance
}; // class eval_op_prototypes