/* ****************************************************************************** * * * This program and the accompanying materials are made available under the * terms of the Apache License, Version 2.0 which is available at * https://www.apache.org/licenses/LICENSE-2.0. * * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * 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. * * SPDX-License-Identifier: Apache-2.0 ******************************************************************************/ // // @author raver119@gmail.com // #include namespace sd { namespace graph { class ND4J_EXPORT VariableProxy: public VariableSpace { protected: VariableSpace* _backed = nullptr; VariableSpace* _current = nullptr; public: explicit VariableProxy(VariableSpace* reference); ~VariableProxy(); virtual VariableSpace& operator=(const VariableSpace& other); virtual int numberOfPlaceholders(); virtual std::vector* getPlaceholders(); virtual sd::memory::Workspace *workspace(); virtual bool hasExternalVariable(int it); virtual bool hasExternalVariable(std::pair& pair); virtual bool hasExternalVariable(std::string *symbol); virtual bool hasVariable(int id); virtual bool hasVariable(int id, int idx); virtual bool hasVariable(std::pair& pair); virtual bool hasVariable(std::string *symbol); virtual sd::graph::Variable *getVariable(int id); virtual sd::graph::Variable *getVariable(int id, int idx); virtual sd::graph::Variable *getVariable(std::pair& pair); virtual sd::graph::Variable *getVariable(std::string *symbol); virtual std::vector getVariables(); virtual Variable* putVariable(std::pair& pair, NDArray *array); virtual void putVariable(std::pair& pair, Variable *variable); virtual void putVariable(int id, Variable *variable); virtual void putVariable(int id, NDArray *array); virtual Variable* putVariable(int id, int idx, NDArray *array); virtual void putVariable(int id, int idx, NDArray &array); virtual void putVariable(int id, int idx, Variable *array); virtual void replaceVariable(Variable *variable); virtual void dropVariable(std::pair &pair); virtual void dropVariable(int id, int idx); virtual void putOutputVariable(Variable *variable); virtual void trackList(sd::NDArrayList *list); // memory-related statistics virtual Nd4jLong externalMemory(); virtual Nd4jLong internalMemory(); virtual Nd4jLong totalMemory(); virtual int externalEntries(); virtual int internalEntries(); virtual int totalEntries(); virtual sd::graph::VariableSpace *clone(); virtual sd::graph::Stash* getStash(); virtual void setFlowPath(FlowPath* timers); virtual FlowPath* flowPath(); }; } }