// // Program.hpp // MNNConverter // // Created by MNN on 2019/09/15. // Copyright © 2018, Alibaba Group Holding Limited // #ifndef Program_hpp #define Program_hpp #include #include #include #include #include #include #include namespace MNN { struct SubGraphProtoT; namespace Express { class Program { public: static std::shared_ptr create(const MNN::NetT* net, bool supportExtra, bool saveAllVars = false); static std::shared_ptr create(const MNN::SubGraphProtoT* subgraph, bool supportExtra, bool saveAllVars = false); std::vector outputs() const { return mOutputs; } VARPS input(const std::unordered_map& inputs, bool lazy = false); static void createUnit(std::map& varMap, std::vector& inputIndexes, const std::vector>& oplists, MNN::OpT* op, const MNN::NetT* net, std::set& invalidSet, std::set& extraInputIndexes); const std::map& vars() const { return mVars; } void updateVars(std::map map, std::vector tensorName); void save(MNN::NetT* net); private: static std::shared_ptr create(const std::vector>& oplists, const std::vector& tensorName, const std::vector& outputName, bool supportExtra, bool saveAllVars, const MNN::NetT* net=nullptr); static void createUnit(std::map& varMap, std::vector& inputIndexes, const std::vector>& oplists, MNN::OpT* op, const std::vector& tensorName, std::set& invalidSet, std::set& extraInputIndexes, const MNN::NetT* net=nullptr, std::map TensorDescribeName = {}); Program() { } std::map mVars; std::vector mOutputs; std::vector> mOriginInputs; }; } // namespace Express }; // namespace MNN #endif