#include <vector>
#include <iostream>
struct Node
{
Node(int i): i_(i) {}
int i_;
};
class FSM{
private:
std::vector<Node> nodeList;
int cap;
int obs;
int topNode;
public:
FSM(int nodeCap, int numObs){
cap = nodeCap;
obs = numObs;
topNode = -1;
}
bool addNode(){
if (isFull()) return false;
nodeList.push_back(Node(obs));
topNode++;
return true;
}
bool isFull() { return obs >= cap ? true : false; }
void printNodes()
{
for(Node& n : nodeList) { std::cout << "(" << &n << "," << n.i_ << ")" << std::endl; }
}
void setNode(int nodeIdx, int newVal)
{
nodeList.at(nodeIdx).i_ = newVal;
}
};
int main()
{
FSM machine(2, 0);
machine.addNode();
machine.addNode();
std::cout << "Nodes: " << std::endl;
machine.printNodes();
machine.setNode(1, 3);
std::cout << "Nodes: " << std::endl;
machine.printNodes();
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IE5vZGUKewogICAgTm9kZShpbnQgaSk6IGlfKGkpIHt9CiAgICBpbnQgaV87Cn07CgpjbGFzcyBGU017CiAgICBwcml2YXRlOgogICAgICAgIHN0ZDo6dmVjdG9yPE5vZGU+IG5vZGVMaXN0OwogICAgICAgIGludCBjYXA7CiAgICAgICAgaW50IG9iczsKICAgICAgICBpbnQgdG9wTm9kZTsKCiAgICBwdWJsaWM6CiAgICAgICAgRlNNKGludCBub2RlQ2FwLCBpbnQgbnVtT2JzKXsKICAgICAgICAgICAgY2FwID0gbm9kZUNhcDsKICAgICAgICAgICAgb2JzID0gbnVtT2JzOwogICAgICAgICAgICB0b3BOb2RlID0gLTE7CiAgICAgICAgfQoKICAgICAgICBib29sIGFkZE5vZGUoKXsKICAgICAgICAgICAgaWYgKGlzRnVsbCgpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIG5vZGVMaXN0LnB1c2hfYmFjayhOb2RlKG9icykpOwogICAgICAgICAgICB0b3BOb2RlKys7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBib29sIGlzRnVsbCgpIHsgcmV0dXJuIG9icyA+PSBjYXAgPyB0cnVlIDogZmFsc2U7IH0KICAgICAgICAKICAgICAgICB2b2lkIHByaW50Tm9kZXMoKQogICAgICAgIHsKICAgICAgICAgICAgZm9yKE5vZGUmIG4gOiBub2RlTGlzdCkgeyBzdGQ6OmNvdXQgPDwgIigiIDw8ICZuIDw8ICIsIiA8PCBuLmlfIDw8ICIpIiA8PCBzdGQ6OmVuZGw7IH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdm9pZCBzZXROb2RlKGludCBub2RlSWR4LCBpbnQgbmV3VmFsKQogICAgICAgIHsKICAgICAgICAgICAgbm9kZUxpc3QuYXQobm9kZUlkeCkuaV8gPSBuZXdWYWw7CiAgICAgICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICBGU00gbWFjaGluZSgyLCAwKTsKICAgIG1hY2hpbmUuYWRkTm9kZSgpOwogICAgbWFjaGluZS5hZGROb2RlKCk7CiAgICAKICAgIHN0ZDo6Y291dCA8PCAiTm9kZXM6ICIgPDwgc3RkOjplbmRsOwogICAgbWFjaGluZS5wcmludE5vZGVzKCk7CiAgICBtYWNoaW5lLnNldE5vZGUoMSwgMyk7CiAgICAKICAgIHN0ZDo6Y291dCA8PCAiTm9kZXM6ICIgPDwgc3RkOjplbmRsOwogICAgbWFjaGluZS5wcmludE5vZGVzKCk7CiAgICAKICAgIHJldHVybiAwOwp9