提交 674b1d34 编写于 作者: Y Yu Yang

Update code

上级 002a6c94
...@@ -5,21 +5,49 @@ ...@@ -5,21 +5,49 @@
Scope is a context to manage Variables. It mainly contains a map from Variable name to Variable. Net will get and update variable throw scope. Scope is a context to manage Variables. It mainly contains a map from Variable name to Variable. Net will get and update variable throw scope.
```cpp ```cpp
class Scope { class Variable;
Variable GetVar(); using VariablePtr = std::shared_ptr<Variable>;
class Scope final {
public:
Scope();
Scope(const std::shared_ptr<Scope>& parent);
//! Get Variable in this scope.
//! @return nullptr if no such variable.
const VariablePtr& getVar(const std::string& name) const;
//! Create or get a variable in this scope.
VariablePtr& createOrGetVar(const std::string& name);
private: private:
// var_name -> var /// variable name -> variable
std::map<string, Variable> var_map_; std::unordered_map<std::string, VariablePtr> vars_;
Scope* parent_scope_; std::shared_ptr<Scope> parent_{nullptr};
} };
``` ```
You need to specify a scope to run a Net. One net can run in different scopes and update different variable in the scope. If you did not specify one, It will run in a default scope. You need to specify a scope to run a Net. One net can run in different scopes and update different variable in the scope. If you did not specify one, It will run in a default scope.
```python
with ScopeGuard(scope) ```cpp
Net net = Net(); Scope global;
Net.run() auto x = newVar("X"); // x is created in scope global, implicitly.
auto y = newVar("Y");
Net net1;
net1.addOp("add", {x, y}, {x}); // x = x + y;
net1.run();
for (size_t i=0; i<10; ++i) {
Scope local;
auto tmp = newVar("tmp"); // tmp is created in scope local.
Net net2;
net2.addOp("add", {x, y}, {tmp});
net2.run(); // tmp = x + y;
}
Net net3;
net3.addOp("add", {x, y}, {"tmp"}); // error! cannot found "tmp" in global scope.
``` ```
### Chain structure ### Chain structure
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册