/** * Copyright 2019 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef DATASET_ENGINE_DATASETOPS_PROJECT_OP_H_ #define DATASET_ENGINE_DATASETOPS_PROJECT_OP_H_ #include #include #include #include "dataset/engine/datasetops/pipeline_op.h" namespace mindspore { namespace dataset { class ProjectOp : public PipelineOp { public: // The nested builder class inside of the ProjectOp is used to help manage all of the arguments // for constructing it. This repeat op is very simple though, so this builder is really just // provided for a consistent look and feel for creators of Dataset operators overall. class Builder { public: // Builder constructor. Creates the builder object. // @param columns_to_project - // @return This is a constructor. explicit Builder(const std::vector &columns_to_project); // Builder destructor. ~Builder() = default; // The builder "build" method creates the final object. // @return shared_ptr to the new StorageOp object. Status Build(std::shared_ptr *); private: std::vector builder_columns_to_project_; Status SanityCheck() const; }; // Constructor of the ProjectOp. // @param columnsToProject - explicit ProjectOp(const std::vector &columns_to_project); // Destructor. ~ProjectOp() = default; // A print method typically used for debugging. // @param out - The output stream to write output to. // @param show_all - A bool to control if you want to show all info or just a summary. void Print(std::ostream &out, bool show_all) const override; // << Stream output operator overload. // @notes This allows you to write the debug print info using stream operators. // @param out - reference to the output stream being overloaded. // @param project_op - reference to the ProjectOp to display. // @return - the output stream must be returned. friend std::ostream &operator<<(std::ostream &out, const ProjectOp &project_op) { project_op.Print(out, false); return out; } // Class functor operator () override. // Most dataset ops operate by launching a thread (see ExecutionTree). // However, the ProjectOp is defined as a inlined operator, so it is invalid to launch the // functor since this op runs inlined inside another operator. The function is overloaded to // ensure that it is not called by mistake (it will generate an error). // @return Status - The error code returned. Status operator()() override; // Gets a buffer from the child node and projects that buffer. The caller is typically our parent node. // @param p_buffer - output pointer to the projected buffer. // @param worker_id - The worker id Status GetNextBuffer(std::unique_ptr *p_buffer, int32_t worker_id, bool retry_if_eoe) override; // Base-class override. Return the number of workers in the first parent. // @param workerId - The worker id int32_t num_consumers() const override; // Base-class override. Return the number of producers in the first child. // @param workerId - The worker id int32_t num_producers() const override; // Base-class override for special eoe handler. // Inline operators must override this because there is no connector to push eoe onto. // @return Status - The error code returned. Status EoeReceived(int32_t worker_id) override; // Base-class override for special eof handler. // Inline operators must override this because there is no connector to push eof onto. // @return Status - The error code returned. Status EofReceived(int32_t worker_id) override; private: std::vector columns_to_project_; Status Project(std::unique_ptr *data_buffer); }; } // namespace dataset } // namespace mindspore #endif // DATASET_ENGINE_DATASETOPS_PROJECT_OP_H_