|
|
|
@ -9,16 +9,16 @@ class Variable;
|
|
|
|
|
using VariablePtr = std::shared_ptr<Variable>;
|
|
|
|
|
|
|
|
|
|
class Scope final {
|
|
|
|
|
public:
|
|
|
|
|
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;
|
|
|
|
|
const VariablePtr& GetVar(const std::string& name) const;
|
|
|
|
|
|
|
|
|
|
//! Create or get a variable in this scope.
|
|
|
|
|
VariablePtr& createOrGetVar(const std::string& name);
|
|
|
|
|
VariablePtr& GetOrCreateVar(const std::string& name);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
/// variable name -> variable
|
|
|
|
@ -31,22 +31,22 @@ You need to specify a scope to run a Net. One net can run in different scopes an
|
|
|
|
|
|
|
|
|
|
```cpp
|
|
|
|
|
Scope global;
|
|
|
|
|
auto x = newVar("X"); // x is created in scope global, implicitly.
|
|
|
|
|
auto y = newVar("Y");
|
|
|
|
|
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();
|
|
|
|
|
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.
|
|
|
|
|
auto tmp = NewVar("tmp"); // tmp is created in scope local.
|
|
|
|
|
Net net2;
|
|
|
|
|
net2.addOp("add", {x, y}, {tmp});
|
|
|
|
|
net2.run(); // tmp = x + y;
|
|
|
|
|
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.
|
|
|
|
|
net3.AddOp("add", {x, y}, {"tmp"}); // error! cannot found "tmp" in global scope.
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|