# t00099 - Test case for bridge design pattern using static polymorphism ## Config ```yaml diagrams: t00099_class: type: class glob: - t00099.cc title: Bridge design pattern with static polymorphism include: namespaces: - clanguml::t00099 using_namespace: clanguml::t00099 ``` ## Source code File `tests/t00099/t00099.cc` ```cpp #include #include #include #include #include namespace clanguml { namespace t00099 { template concept Renderer = requires( T &t, double x, double y, double radius, double width, double height) { t.render_circle(x, y, radius); t.render_rectangle(x, y, width, height); }; class VectorRenderer { public: void render_circle(double x, double y, double radius) { } void render_rectangle(double x, double y, double width, double height) { } void set_stroke_width(double width) { stroke_width = width; } void set_fill_color(const std::string &color) { fill_color = color; } private: double stroke_width{1.0}; std::string fill_color{"black"}; }; class RasterRenderer { public: void render_circle(double x, double y, double radius) { } void render_rectangle(double x, double y, double width, double height) { } void set_dpi(int dpi) { this->dpi = dpi; } void set_anti_aliasing(bool enabled) { anti_aliasing = enabled; } private: int dpi{72}; bool anti_aliasing{true}; }; template class Shape { public: explicit Shape(R renderer) : renderer_bridge_(std::move(renderer)) { } virtual ~Shape() = default; virtual void draw() = 0; virtual void move(double dx, double dy) = 0; protected: R renderer_bridge_; double x_{0.0}; double y_{0.0}; }; template class Circle : public Shape { public: Circle(R renderer, double radius) : Shape(std::move(renderer)) , radius_(radius) { } void draw() override { this->renderer_bridge_.render_circle(this->x_, this->y_, radius_); } void move(double dx, double dy) override { this->x_ += dx; this->y_ += dy; } void set_radius(double radius) { radius_ = radius; } double get_radius() const { return radius_; } private: double radius_; }; template class Rectangle : public Shape { public: Rectangle(R renderer, double width, double height) : Shape(std::move(renderer)) , width_(width) , height_(height) { } void draw() override { this->renderer_bridge_.render_rectangle( this->x_, this->y_, width_, height_); } void move(double dx, double dy) override { this->x_ += dx; this->y_ += dy; } void set_dimensions(double width, double height) { width_ = width; height_ = height; } double get_width() const { return width_; } double get_height() const { return height_; } private: double width_; double height_; }; template class DrawingApplication { public: DrawingApplication(R renderer) : renderer_(std::move(renderer)) { } void create_circle(double radius) { auto circle = std::make_unique>(renderer_, radius); shapes_.push_back(std::move(circle)); } void create_rectangle(double width, double height) { auto rectangle = std::make_unique>(renderer_, width, height); shapes_.push_back(std::move(rectangle)); } void draw_all() { for (const auto &shape : shapes_) { shape->draw(); } } void move_all(double dx, double dy) { for (const auto &shape : shapes_) { shape->move(dx, dy); } } private: R renderer_; std::vector>> shapes_; }; using VectorApp = DrawingApplication; using RasterApp = DrawingApplication; struct App { std::variant impl; static App make_vector_app() { return App{.impl = VectorRenderer{}}; } static App make_raster_app() { return App{.impl = RasterRenderer{}}; } }; int main() { auto app = App::make_vector_app(); return 0; } } // namespace t00099 } // namespace clanguml ``` ## Generated PlantUML diagrams ![t00099_class](./t00099_class.svg "Test case for bridge design pattern using static polymorphism") ## Generated Mermaid diagrams ![t00099_class](./t00099_class_mermaid.svg "Test case for bridge design pattern using static polymorphism") ## Generated JSON models ```json { "diagram_type": "class", "elements": [ { "display_name": "Renderer", "id": "9634615813666335298", "name": "Renderer", "namespace": "clanguml::t00099", "parameters": [ { "name": "t", "type": "T &" }, { "name": "x", "type": "double" }, { "name": "y", "type": "double" }, { "name": "radius", "type": "double" }, { "name": "width", "type": "double" }, { "name": "height", "type": "double" } ], "source_location": { "column": 9, "file": "t00099.cc", "line": 11, "translation_unit": "t00099.cc" }, "statements": [ "t.render_circle(x, y, radius)", "t.render_rectangle(x, y, width, height)" ], "type": "concept" }, { "bases": [], "display_name": "VectorRenderer", "id": "3387176406646031341", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": false, "is_union": false, "members": [ { "access": "private", "is_static": false, "name": "stroke_width", "source_location": { "column": 12, "file": "t00099.cc", "line": 26, "translation_unit": "t00099.cc" }, "type": "double" }, { "access": "private", "is_static": false, "name": "fill_color", "source_location": { "column": 17, "file": "t00099.cc", "line": 27, "translation_unit": "t00099.cc" }, "type": "std::string" } ], "methods": [ { "access": "public", "display_name": "render_circle", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "render_circle", "parameters": [ { "name": "x", "type": "double" }, { "name": "y", "type": "double" }, { "name": "radius", "type": "double" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 19, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "render_rectangle", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "render_rectangle", "parameters": [ { "name": "x", "type": "double" }, { "name": "y", "type": "double" }, { "name": "width", "type": "double" }, { "name": "height", "type": "double" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 20, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "set_stroke_width", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "set_stroke_width", "parameters": [ { "name": "width", "type": "double" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 22, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "set_fill_color", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "set_fill_color", "parameters": [ { "name": "color", "type": "const std::string &" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 23, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" } ], "name": "VectorRenderer", "namespace": "clanguml::t00099", "source_location": { "column": 7, "file": "t00099.cc", "line": 17, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "class" }, { "bases": [], "display_name": "RasterRenderer", "id": "7465171824666205808", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": false, "is_union": false, "members": [ { "access": "private", "is_static": false, "name": "dpi", "source_location": { "column": 9, "file": "t00099.cc", "line": 39, "translation_unit": "t00099.cc" }, "type": "int" }, { "access": "private", "is_static": false, "name": "anti_aliasing", "source_location": { "column": 10, "file": "t00099.cc", "line": 40, "translation_unit": "t00099.cc" }, "type": "bool" } ], "methods": [ { "access": "public", "display_name": "render_circle", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "render_circle", "parameters": [ { "name": "x", "type": "double" }, { "name": "y", "type": "double" }, { "name": "radius", "type": "double" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 32, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "render_rectangle", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "render_rectangle", "parameters": [ { "name": "x", "type": "double" }, { "name": "y", "type": "double" }, { "name": "width", "type": "double" }, { "name": "height", "type": "double" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 33, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "set_dpi", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "set_dpi", "parameters": [ { "name": "dpi", "type": "int" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 35, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "set_anti_aliasing", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "set_anti_aliasing", "parameters": [ { "name": "enabled", "type": "bool" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 36, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" } ], "name": "RasterRenderer", "namespace": "clanguml::t00099", "source_location": { "column": 7, "file": "t00099.cc", "line": 30, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "class" }, { "bases": [], "display_name": "Shape", "id": "10547461671610283629", "is_abstract": true, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [ { "access": "protected", "is_static": false, "name": "renderer_bridge_", "source_location": { "column": 7, "file": "t00099.cc", "line": 55, "translation_unit": "t00099.cc" }, "type": "R" }, { "access": "protected", "is_static": false, "name": "x_", "source_location": { "column": 12, "file": "t00099.cc", "line": 56, "translation_unit": "t00099.cc" }, "type": "double" }, { "access": "protected", "is_static": false, "name": "y_", "source_location": { "column": 12, "file": "t00099.cc", "line": 57, "translation_unit": "t00099.cc" }, "type": "double" } ], "methods": [ { "access": "public", "display_name": "Shape", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": true, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "Shape", "parameters": [ { "name": "renderer", "type": "R" } ], "source_location": { "column": 14, "file": "t00099.cc", "line": 45, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "~Shape", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": true, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": true, "name": "~Shape", "parameters": [], "source_location": { "column": 13, "file": "t00099.cc", "line": 50, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "draw", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": true, "is_static": false, "is_virtual": true, "name": "draw", "parameters": [], "source_location": { "column": 18, "file": "t00099.cc", "line": 51, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "move", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": true, "is_static": false, "is_virtual": true, "name": "move", "parameters": [ { "name": "dx", "type": "double" }, { "name": "dy", "type": "double" } ], "source_location": { "column": 18, "file": "t00099.cc", "line": 52, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" } ], "name": "Shape", "namespace": "clanguml::t00099", "source_location": { "column": 29, "file": "t00099.cc", "line": 43, "translation_unit": "t00099.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "R", "template_parameters": [] } ], "type": "class" }, { "bases": [ { "access": "public", "id": "10547461671610283629", "is_virtual": false } ], "display_name": "Circle", "id": "5917892581072736630", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [ { "access": "private", "is_static": false, "name": "radius_", "source_location": { "column": 12, "file": "t00099.cc", "line": 83, "translation_unit": "t00099.cc" }, "type": "double" } ], "methods": [ { "access": "public", "display_name": "Circle", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": true, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "Circle", "parameters": [ { "name": "renderer", "type": "R" }, { "name": "radius", "type": "double" } ], "source_location": { "column": 5, "file": "t00099.cc", "line": 62, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "draw", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "draw", "parameters": [], "source_location": { "column": 10, "file": "t00099.cc", "line": 68, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "move", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "move", "parameters": [ { "name": "dx", "type": "double" }, { "name": "dy", "type": "double" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 73, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "set_radius", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "set_radius", "parameters": [ { "name": "radius", "type": "double" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 79, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "get_radius", "is_const": true, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "get_radius", "parameters": [], "source_location": { "column": 12, "file": "t00099.cc", "line": 80, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "double" } ], "name": "Circle", "namespace": "clanguml::t00099", "source_location": { "column": 29, "file": "t00099.cc", "line": 60, "translation_unit": "t00099.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "R", "template_parameters": [] } ], "type": "class" }, { "bases": [ { "access": "public", "id": "10547461671610283629", "is_virtual": false } ], "display_name": "Rectangle", "id": "193653733709211866", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [ { "access": "private", "is_static": false, "name": "width_", "source_location": { "column": 12, "file": "t00099.cc", "line": 117, "translation_unit": "t00099.cc" }, "type": "double" }, { "access": "private", "is_static": false, "name": "height_", "source_location": { "column": 12, "file": "t00099.cc", "line": 118, "translation_unit": "t00099.cc" }, "type": "double" } ], "methods": [ { "access": "public", "display_name": "Rectangle", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": true, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "Rectangle", "parameters": [ { "name": "renderer", "type": "R" }, { "name": "width", "type": "double" }, { "name": "height", "type": "double" } ], "source_location": { "column": 5, "file": "t00099.cc", "line": 88, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "draw", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "draw", "parameters": [], "source_location": { "column": 10, "file": "t00099.cc", "line": 95, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "move", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "move", "parameters": [ { "name": "dx", "type": "double" }, { "name": "dy", "type": "double" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 101, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "set_dimensions", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "set_dimensions", "parameters": [ { "name": "width", "type": "double" }, { "name": "height", "type": "double" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 107, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "get_width", "is_const": true, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "get_width", "parameters": [], "source_location": { "column": 12, "file": "t00099.cc", "line": 113, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "double" }, { "access": "public", "display_name": "get_height", "is_const": true, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "get_height", "parameters": [], "source_location": { "column": 12, "file": "t00099.cc", "line": 114, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "double" } ], "name": "Rectangle", "namespace": "clanguml::t00099", "source_location": { "column": 29, "file": "t00099.cc", "line": 86, "translation_unit": "t00099.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "R", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "DrawingApplication", "id": "3126163245014421542", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [ { "access": "private", "is_static": false, "name": "renderer_", "source_location": { "column": 7, "file": "t00099.cc", "line": 156, "translation_unit": "t00099.cc" }, "type": "R" }, { "access": "private", "is_static": false, "name": "shapes_", "source_location": { "column": 44, "file": "t00099.cc", "line": 157, "translation_unit": "t00099.cc" }, "type": "std::vector>>" } ], "methods": [ { "access": "public", "display_name": "DrawingApplication", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": true, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "DrawingApplication", "parameters": [ { "name": "renderer", "type": "R" } ], "source_location": { "column": 5, "file": "t00099.cc", "line": 123, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "create_circle", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "create_circle", "parameters": [ { "name": "radius", "type": "double" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 128, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "create_rectangle", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "create_rectangle", "parameters": [ { "name": "width", "type": "double" }, { "name": "height", "type": "double" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 134, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "draw_all", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "draw_all", "parameters": [], "source_location": { "column": 10, "file": "t00099.cc", "line": 141, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "move_all", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "move_all", "parameters": [ { "name": "dx", "type": "double" }, { "name": "dy", "type": "double" } ], "source_location": { "column": 10, "file": "t00099.cc", "line": 148, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "void" } ], "name": "DrawingApplication", "namespace": "clanguml::t00099", "source_location": { "column": 29, "file": "t00099.cc", "line": 121, "translation_unit": "t00099.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "R", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "DrawingApplication", "id": "11279698866107468036", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "DrawingApplication", "namespace": "clanguml::t00099", "source_location": { "column": 40, "file": "t00099.cc", "line": 164, "translation_unit": "t00099.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "VectorRenderer" } ], "type": "class" }, { "bases": [], "display_name": "DrawingApplication", "id": "8390679619457752720", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "DrawingApplication", "namespace": "clanguml::t00099", "source_location": { "column": 40, "file": "t00099.cc", "line": 164, "translation_unit": "t00099.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "RasterRenderer" } ], "type": "class" }, { "bases": [], "display_name": "App", "id": "15436604594372585658", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": false, "is_union": false, "members": [ { "access": "public", "is_static": false, "name": "impl", "source_location": { "column": 40, "file": "t00099.cc", "line": 164, "translation_unit": "t00099.cc" }, "type": "std::variant" } ], "methods": [ { "access": "public", "display_name": "make_vector_app", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": true, "is_virtual": false, "name": "make_vector_app", "parameters": [], "source_location": { "column": 16, "file": "t00099.cc", "line": 166, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "App" }, { "access": "public", "display_name": "make_raster_app", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": true, "is_virtual": false, "name": "make_raster_app", "parameters": [], "source_location": { "column": 16, "file": "t00099.cc", "line": 168, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "App" } ], "name": "App", "namespace": "clanguml::t00099", "source_location": { "column": 8, "file": "t00099.cc", "line": 163, "translation_unit": "t00099.cc" }, "template_parameters": [], "type": "class" } ], "name": "t00099_class", "package_type": "namespace", "relationships": [ { "destination": "9634615813666335298", "label": "R", "source": "10547461671610283629", "type": "constraint" }, { "destination": "9634615813666335298", "label": "R", "source": "5917892581072736630", "type": "constraint" }, { "access": "public", "destination": "10547461671610283629", "source": "5917892581072736630", "type": "extension" }, { "destination": "9634615813666335298", "label": "R", "source": "193653733709211866", "type": "constraint" }, { "access": "public", "destination": "10547461671610283629", "source": "193653733709211866", "type": "extension" }, { "destination": "9634615813666335298", "label": "R", "source": "3126163245014421542", "type": "constraint" }, { "access": "private", "destination": "10547461671610283629", "label": "shapes_", "source": "3126163245014421542", "type": "aggregation" }, { "access": "public", "destination": "3387176406646031341", "source": "11279698866107468036", "type": "dependency" }, { "access": "public", "destination": "3126163245014421542", "source": "11279698866107468036", "type": "instantiation" }, { "access": "public", "destination": "7465171824666205808", "source": "8390679619457752720", "type": "dependency" }, { "access": "public", "destination": "3126163245014421542", "source": "8390679619457752720", "type": "instantiation" }, { "access": "public", "destination": "11279698866107468036", "label": "impl", "source": "15436604594372585658", "type": "aggregation" }, { "access": "public", "destination": "8390679619457752720", "label": "impl", "source": "15436604594372585658", "type": "aggregation" } ], "title": "Bridge design pattern with static polymorphism", "using_namespace": "clanguml::t00099" } ``` ## Generated GraphML models ```xml clanguml::t00099 concept ]]> class false class false class ]]> abstract true class ]]> true class ]]> true class ]]> true class ]]> true class ]]> true class false constraint R constraint R extension public constraint R extension public constraint R aggregation shapes_ private dependency public instantiation public dependency public instantiation public aggregation impl public aggregation impl public ```