Ограниченное окно видимости на динамически обновляемом графике - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть нетривиальная задача (по крайней мере, для меня) создать API для работы с набором данных, который является своего рода графиком, который необходимо динамически обновлять (изменения количества вершин, их свойств и связей между ними).

Набор данных содержит геопространственные данные.Связи между вершинами обрабатываются с помощью идентификаторов объектов и их отношений.Итак, это база данных PostGIS в интерпретации C ++.

Приемлемым ограничением является то, что мы разрешаем обновления только для данных, которые "далеки" от наблюдаемого в данный момент местоположения.Это предполагает, что API ограничивает видимость графика определенной областью.Это окно ограниченной видимости движется по известной траектории.

Теперь вопрос заключается в том, как должны выглядеть API и внутренняя реализация, чтобы обеспечить доступ к данным (вершинам, их свойствам и соединениям) таким образом, чтобынам не нужно следить за инициализированными (и предоставляемыми через API) данными до тех пор, пока выполняется программа.По сути, пользователь должен иметь возможность работать с данными, отображаемыми через текущее окно ограниченной видимости, и не должен иметь доступа к данным, которые были доступны через старое окно, но не в текущем.

Простой пример API, которыйне удастся: выставить прямой доступ к данным в графе.Пользователь может сохранить необработанный указатель на данные.После перемещения окна этот указатель может стать недействительным, но пользователь никогда не узнает об этом.Некоторые из пользовательских указателей будут по-прежнему указывать на существующие данные (доступные через текущее окно), когда другие будут указывать на неуправляемую память (потому что старые данные были освобождены).

Такие вещи, как общие указатели, неприменимы, поскольку граф имееткруглые соединения.

...