// // TransformDataset.hpp // MNN // // Created by MNN on 2019/11/15. // Copyright © 2018, Alibaba Group Holding Limited // #ifndef TransformDataset_hpp #define TransformDataset_hpp #include #include "Dataset.hpp" #include "Example.hpp" #include "Transform.hpp" namespace MNN { namespace Train { class MNN_PUBLIC BatchTransformDataset : public BatchDataset { public: BatchTransformDataset(std::shared_ptr dataset, std::shared_ptr transform) { MNN_ASSERT(dataset != nullptr); mDataset = dataset; mTransform = transform; } std::vector getBatch(std::vector indices) override { auto batch = mDataset->getBatch(indices); if (mTransform != nullptr) { batch = mTransform->transformBatch(std::move(batch)); } return batch; } size_t size() override { return mDataset->size(); } private: std::shared_ptr mDataset; std::shared_ptr mTransform; }; class MNN_PUBLIC TransformDataset : public Dataset { public: TransformDataset(std::shared_ptr dataset, std::shared_ptr transform) { MNN_ASSERT(dataset != nullptr); mDataset = dataset; mTransform = transform; } Example get(size_t index) override { auto example = mDataset->get(index); if (mTransform != nullptr) { example = mTransform->transformExample(std::move(example)); } return example; } size_t size() override { return mDataset->size(); } private: std::shared_ptr mDataset; std::shared_ptr mTransform; }; } // namespace Train } // namespace MNN #endif