читать_graphvizФункция интерпретирует график, описанный с помощьюГрафа ВизЯзык DOT создает BGL-граф, который фиксирует это описание. Используя эти функции, вы можете инициализировать график, используя данные, хранящиеся в виде текста.
Язык DOT может указывать как направленные, так и ненаправленные графы, иread_graphvizРазница между ними. Необходимо пройтиread_graphvizненаправленный граф при чтении ненаправленного графа; то же самое верно для направленных графов. Кроме того,читать_graphvizбросит исключение, если столкнется с параллельными краями и не сможет добавить их к графу.
Для обработки свойств, выраженных на языке DOT,read_graphvizберет объектdynamic_propertiesи оперирует его коллекцией карт свойств. Читатель передает все свойства, встречающиеся этому объекту, используя клавиши строк GraphViz в качестве ключей свойств. Кроме того,read_graphvizхранит имена идентификаторов узлов под картой свойств вершины под названиемnode_id.
Requirements:
Тип графа должен моделировать концепциюMutable Graph.
Тип итератора должен моделировать концепциюInput Iterator.
Типы значений карты свойств должны быть конструктивными по умолчанию.
При определенных обстоятельствахread_graphvizотбросит одно из вышеперечисленных исключений. Все три конкретных исключения могут быть пойманы с использованием общегографа_исключения, когда большая точность не требуется. Кроме того, все вышеперечисленные исключения вытекают из стандартаstd:: Исключениедля еще более обобщенной обработки ошибок.
Исключениеbad_parallel_edgeвозникает, когда попытка добавить параллельный край к поставляемому MutableGraph терпит неудачу. Язык DOT поддерживает параллельные края, но некоторые BGL-совместимые типы графов этого не делают. Одним из примеров такого графика являетсяboost::adjacency_list, что позволяет в лучшем случае один край может между любыми двумя вершинами.
Исключениеdirect_graph_errorпроисходит, когда ненаправленный тип графа передаетсяread_graph, но текстовое представление графа направлено, как указано ключевым словомdigraphна языке DOT.
Исключениеundirected_graph_errorпроисходит, когда направленный тип графа передаетсяread_graph, но текстовое представление графа ненаправлено, как указано ключевым словомграфна языке DOT.
Исключениеbad_graphviz_syntaxпроисходит, когда ввод графа не является действительным графом GraphViz.
Чтобы использовать читатели GraphViz, вам нужно будет создать и связать с библиотеками "boost_graph" и "boost_regex". Эти библиотеки могут быть построены, следуя инструкциямBoost Jam Build Instructionsдля подкаталоговlibs/graph/buildиlibs/regex/build.
Функцияread_graphvizне использует код из распределения GraphViz для интерпретации языка DOT. Скорее, реализация была основана на документации, найденной на веб-сайте GraphViz, а также на экспериментах, проводимых с использованием приложения точек. Полученная интерпретация может тонко отличаться от точки для некоторых угловых случаев, которые не очень точно указаны.
При успешном чтении графа каждая вершина и край будут иметь связанное значение для каждого соответствующего свойства края и вершины, встречающегося при интерпретации графа. Эти значения будут установлены с использованием объектаDynamic_properties. Те края и вершины, которым явно не дано значение для свойства (и это свойство не имеет дефолта), получат построенное по умолчанию значение типа стоимости.Убедитесь, что типы значений карты свойств являются конструируемыми по умолчанию.
read_graphvizтрактует подграфы как синтаксический сахар. Он не отражает подграфы как фактические объекты в BGL. Скорее, они используются для сокращения некоторых определений краев, а также для придания подмножеству всех узлов или краев определенных свойств. Например, DOT-графыдиграф—подграф—— [gt]c}—е]диграф——————————————————————————————————————— [
Идентификаторы подграфов относятся к подграфам, определенным ранее в описании графа. Неопределенные подграфы ведут себя как пустые подграфы. Это такое же поведение, как и у GraphViz.
Расширение кодов побега так же, как это делает GraphViz.
Поддержка факультативного признания подграфов как отдельных сущностей.
Статья Boost read_graphviz раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.