#include <iostream>
#include <vector>
#include <memory>
struct SmallWorld {
int some_small_world_stuff;
};
struct Entity {
std::shared_ptr<SmallWorld> world;
};
struct Faction {
std::vector<std::shared_ptr<Entity>> entities;
};
struct World : public SmallWorld {
std::vector<std::shared_ptr<Faction>> factions;
};
int main() {
auto world = std::make_shared<World>();
world->some_small_world_stuff = 1337;
auto fac1 = std::make_shared<Faction>();
auto ent1 = std::make_shared<Entity>();
ent1->world= world;
fac1->entities.emplace_back(ent1);
world->factions.emplace_back(fac1);
std::cout << world->factions[0]->entities[0]->world->some_small_world_stuff << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWVtb3J5PgoKc3RydWN0IFNtYWxsV29ybGQgewoJaW50IHNvbWVfc21hbGxfd29ybGRfc3R1ZmY7CQp9OwoKc3RydWN0IEVudGl0eSB7CglzdGQ6OnNoYXJlZF9wdHI8U21hbGxXb3JsZD4gd29ybGQ7Cn07CgoKc3RydWN0IEZhY3Rpb24gewoJc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEVudGl0eT4+IGVudGl0aWVzOwp9OwoKc3RydWN0IFdvcmxkIDogcHVibGljIFNtYWxsV29ybGQgewoJc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEZhY3Rpb24+PiBmYWN0aW9uczsKfTsKCmludCBtYWluKCkgewoJYXV0byB3b3JsZCA9IHN0ZDo6bWFrZV9zaGFyZWQ8V29ybGQ+KCk7Cgl3b3JsZC0+c29tZV9zbWFsbF93b3JsZF9zdHVmZiA9IDEzMzc7CglhdXRvIGZhYzEgPSBzdGQ6Om1ha2Vfc2hhcmVkPEZhY3Rpb24+KCk7CglhdXRvIGVudDEgPSBzdGQ6Om1ha2Vfc2hhcmVkPEVudGl0eT4oKTsKCgllbnQxLT53b3JsZD0gd29ybGQ7CglmYWMxLT5lbnRpdGllcy5lbXBsYWNlX2JhY2soZW50MSk7Cgl3b3JsZC0+ZmFjdGlvbnMuZW1wbGFjZV9iYWNrKGZhYzEpOwoJCglzdGQ6OmNvdXQgPDwgd29ybGQtPmZhY3Rpb25zWzBdLT5lbnRpdGllc1swXS0+d29ybGQtPnNvbWVfc21hbGxfd29ybGRfc3R1ZmYgPDwgc3RkOjplbmRsOwp9