(речь про с++ поэтому управление памятью тоже учитывается)
есть грубо говоря набор агентов, агентами может управлять юзер, в том числе делать операции в результате которых один агент ссылается на другого
в итоге может образоваться абсолютно случайный граф вплоть до наличия ссылок самого на себя, косвенных ссылок и т.п.
выследить , запретить подобные вещи и сложно и нельзя поэтому не вариант
в тоже этот создать легко и сохранить просто, но когда загружаешь,
вот тут начинается веселуха, если юзер намудрил не дерево, а граф, то очень вероятно что при загрузке создание одного объекта потребует себя же но уже созданного
как такое разрулить?
у меня есть хреновые идеи:
— сделать всё на сообщениях, узлы напрямую друг на друга не ссылаются вообще
— попробовать реализовать типа асинхронный лайф-сайкл так скзать, типа переделать все операции уставноки связи на асинхронные и меть центральный узел который будет все мониторить и откладывать установку свзяи когда нада и уведовлять о ее создани икогда она доступна (я бы попробовал но не могу в уме все проработать — все ли проблемы решаются таким образом? а переделка займет много времени)
— еще чтото не помню....
как нужно? среда — нативная так что, память нада освобождать прваильно
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, Barbar1an, Вы писали:
B>(речь про с++ поэтому управление памятью тоже учитывается)
B>в итоге может образоваться абсолютно случайный граф вплоть до наличия ссылок самого на себя, косвенных ссылок и т.п. B>выследить , запретить подобные вещи и сложно и нельзя поэтому не вариант
B>в тоже этот создать легко и сохранить просто, но когда загружаешь, B>вот тут начинается веселуха, если юзер намудрил не дерево, а граф, то очень вероятно что при загрузке создание одного объекта потребует себя же но уже созданного
B>как такое разрулить?
Грузить в два прохода — сначала загрузить все объекты, а потом загрузить все связи?
Хранить последовательность создания объектов и связей, и грузить в той же последовательности?
B>в тоже этот создать легко и сохранить просто, но когда загружаешь, B>вот тут начинается веселуха, если юзер намудрил не дерево, а граф, то очень вероятно что при загрузке создание одного объекта потребует себя же но уже созданного
А в чём проблема, стандартные серелизаторы и десерелизаторы легко с этим справляются.
Присваивать новому узлу уникальный id, хранить в узле список id ссылающихся на него узлов. Хранить узлы в map где id это ключ. Как может происходить загрузка, хотя бы из sql, вообще любого хранилища: затянуть все в мап, и пробежать по каждому узлу, чтобы он по id направил на себя указатели. Заодно получишь точки входа в граф- т.е. узлы, на которые нет ссылок.
Afterthought. Если у тебя задание на правильный порядок инициализации обьектов, например как при компиляции или при dependency injection- тебе нужна топологическая сортировка.