# t00100 - Test case for builder design pattern using static polymorphism ## Config ```yaml diagrams: t00100_class: type: class glob: - t00100.cc include: namespaces: - clanguml::t00100 using_namespace: clanguml::t00100 ``` ## Source code File `tests/t00100/t00100.cc` ```cpp #include #include #include #include namespace clanguml { namespace t00100 { // Builder pattern implementation using static polymorphism with C++20 concepts // Product - the complex object to be built class Computer { public: void set_cpu(const std::string &cpu) { cpu_ = cpu; } void set_memory(int memory_gb) { memory_gb_ = memory_gb; } void set_storage(const std::string &storage) { storage_ = storage; } void set_graphics_card(const std::string &gpu) { graphics_card_ = gpu; } void set_motherboard(const std::string &motherboard) { motherboard_ = motherboard; } void add_port(const std::string &port) { ports_.push_back(port); } void set_power_supply(int watts) { power_supply_watts_ = watts; } void set_case_type(const std::string &case_type) { case_type_ = case_type; } const std::string &get_cpu() const { return cpu_; } int get_memory() const { return memory_gb_; } const std::string &get_storage() const { return storage_; } const std::string &get_graphics_card() const { return graphics_card_; } const std::string &get_motherboard() const { return motherboard_; } const std::vector &get_ports() const { return ports_; } int get_power_supply() const { return power_supply_watts_; } const std::string &get_case_type() const { return case_type_; } void display_specs() const { } private: std::string cpu_; int memory_gb_{0}; std::string storage_; std::string graphics_card_; std::string motherboard_; std::vector ports_; int power_supply_watts_{0}; std::string case_type_; }; // C++20 concept for Builder interface using static polymorphism template concept ComputerBuilderConcept = requires(T t, Computer &computer) { { t.build_cpu(computer) } -> std::same_as; { t.build_memory(computer) } -> std::same_as; { t.build_storage(computer) } -> std::same_as; { t.build_graphics_card(computer) } -> std::same_as; { t.build_motherboard(computer) } -> std::same_as; { t.build_ports(computer) } -> std::same_as; { t.build_power_supply(computer) } -> std::same_as; { t.build_case(computer) } -> std::same_as; }; // Template base for concrete builders template class ComputerBuilderBase { public: std::unique_ptr get_computer() { auto result = std::move(computer_); reset(); return result; } Computer &get_computer_ref() { return *computer_; } void reset() { computer_ = std::make_unique(); } protected: std::unique_ptr computer_; ComputerBuilderBase() { reset(); } }; // Concrete Builder for Gaming Computer using static polymorphism class GamingComputerBuilder : public ComputerBuilderBase { public: void build_cpu(Computer &computer) { computer.set_cpu("Intel Core i9-13900K"); } void build_memory(Computer &computer) { computer.set_memory(32); } void build_storage(Computer &computer) { computer.set_storage("1TB NVMe SSD"); } void build_graphics_card(Computer &computer) { computer.set_graphics_card("NVIDIA RTX 4080"); } void build_motherboard(Computer &computer) { computer.set_motherboard("ASUS ROG Maximus Z790"); } void build_ports(Computer &computer) { computer.add_port("USB 3.2"); computer.add_port("USB-C"); computer.add_port("HDMI 2.1"); computer.add_port("DisplayPort 1.4"); computer.add_port("Ethernet"); computer.add_port("Audio Jack"); } void build_power_supply(Computer &computer) { computer.set_power_supply(850); } void build_case(Computer &computer) { computer.set_case_type("Full Tower RGB"); } }; // Concrete Builder for Office Computer using static polymorphism class OfficeComputerBuilder : public ComputerBuilderBase { public: void build_cpu(Computer &computer) { computer.set_cpu("Intel Core i5-13400"); } void build_memory(Computer &computer) { computer.set_memory(16); } void build_storage(Computer &computer) { computer.set_storage("512GB SSD"); } void build_graphics_card(Computer &computer) { computer.set_graphics_card("Integrated Graphics"); } void build_motherboard(Computer &computer) { computer.set_motherboard("MSI Pro B760M"); } void build_ports(Computer &computer) { computer.add_port("USB 3.0"); computer.add_port("USB 2.0"); computer.add_port("HDMI"); computer.add_port("VGA"); computer.add_port("Ethernet"); computer.add_port("Audio Jack"); } void build_power_supply(Computer &computer) { computer.set_power_supply(450); } void build_case(Computer &computer) { computer.set_case_type("Mini Tower"); } }; // Director template using static polymorphism and C++20 concepts template class ComputerDirector { public: explicit ComputerDirector(BuilderType &builder) : builder_(builder) { } std::unique_ptr construct_basic_computer() { builder_.reset(); auto &computer = builder_.get_computer_ref(); builder_.build_cpu(computer); builder_.build_memory(computer); builder_.build_storage(computer); builder_.build_motherboard(computer); builder_.build_power_supply(computer); builder_.build_case(computer); return builder_.get_computer(); } std::unique_ptr construct_full_computer() { builder_.reset(); auto &computer = builder_.get_computer_ref(); builder_.build_cpu(computer); builder_.build_memory(computer); builder_.build_storage(computer); builder_.build_graphics_card(computer); builder_.build_motherboard(computer); builder_.build_ports(computer); builder_.build_power_supply(computer); builder_.build_case(computer); return builder_.get_computer(); } std::unique_ptr construct_custom_computer() { builder_.reset(); auto &computer = builder_.get_computer_ref(); builder_.build_cpu(computer); builder_.build_memory(computer); builder_.build_storage(computer); builder_.build_graphics_card(computer); builder_.build_motherboard(computer); return builder_.get_computer(); } private: BuilderType &builder_; }; // Client code demonstrating the Builder pattern with static polymorphism class ComputerStore { public: std::unique_ptr order_gaming_computer() { GamingComputerBuilder builder; ComputerDirector director(builder); return director.construct_full_computer(); } std::unique_ptr order_office_computer() { OfficeComputerBuilder builder; ComputerDirector director(builder); return director.construct_full_computer(); } template std::unique_ptr order_custom_computer(BuilderType &builder) { ComputerDirector director(builder); return director.construct_custom_computer(); } }; } // namespace t00100 } // namespace clanguml ``` ## Generated PlantUML diagrams ![t00100_class](./t00100_class.svg "Test case for builder design pattern using static polymorphism") ## Generated Mermaid diagrams ![t00100_class](./t00100_class_mermaid.svg "Test case for builder design pattern using static polymorphism") ## Generated JSON models ```json { "diagram_type": "class", "elements": [ { "bases": [], "display_name": "Computer", "id": "6827834764220301334", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": false, "is_union": false, "members": [ { "access": "private", "is_static": false, "name": "cpu_", "source_location": { "column": 17, "file": "t00100.cc", "line": 38, "translation_unit": "t00100.cc" }, "type": "std::string" }, { "access": "private", "is_static": false, "name": "memory_gb_", "source_location": { "column": 9, "file": "t00100.cc", "line": 39, "translation_unit": "t00100.cc" }, "type": "int" }, { "access": "private", "is_static": false, "name": "storage_", "source_location": { "column": 17, "file": "t00100.cc", "line": 40, "translation_unit": "t00100.cc" }, "type": "std::string" }, { "access": "private", "is_static": false, "name": "graphics_card_", "source_location": { "column": 17, "file": "t00100.cc", "line": 41, "translation_unit": "t00100.cc" }, "type": "std::string" }, { "access": "private", "is_static": false, "name": "motherboard_", "source_location": { "column": 17, "file": "t00100.cc", "line": 42, "translation_unit": "t00100.cc" }, "type": "std::string" }, { "access": "private", "is_static": false, "name": "ports_", "source_location": { "column": 30, "file": "t00100.cc", "line": 43, "translation_unit": "t00100.cc" }, "type": "std::vector" }, { "access": "private", "is_static": false, "name": "power_supply_watts_", "source_location": { "column": 9, "file": "t00100.cc", "line": 44, "translation_unit": "t00100.cc" }, "type": "int" }, { "access": "private", "is_static": false, "name": "case_type_", "source_location": { "column": 17, "file": "t00100.cc", "line": 45, "translation_unit": "t00100.cc" }, "type": "std::string" } ], "methods": [ { "access": "public", "display_name": "set_cpu", "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_cpu", "parameters": [ { "name": "cpu", "type": "const std::string &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 14, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "set_memory", "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_memory", "parameters": [ { "name": "memory_gb", "type": "int" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 15, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "set_storage", "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_storage", "parameters": [ { "name": "storage", "type": "const std::string &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 16, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "set_graphics_card", "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_graphics_card", "parameters": [ { "name": "gpu", "type": "const std::string &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 17, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "set_motherboard", "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_motherboard", "parameters": [ { "name": "motherboard", "type": "const std::string &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 18, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "add_port", "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": "add_port", "parameters": [ { "name": "port", "type": "const std::string &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 22, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "set_power_supply", "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_power_supply", "parameters": [ { "name": "watts", "type": "int" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 23, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "set_case_type", "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_case_type", "parameters": [ { "name": "case_type", "type": "const std::string &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 24, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "get_cpu", "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_cpu", "parameters": [], "source_location": { "column": 24, "file": "t00100.cc", "line": 26, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "const std::string &" }, { "access": "public", "display_name": "get_memory", "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_memory", "parameters": [], "source_location": { "column": 9, "file": "t00100.cc", "line": 27, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "int" }, { "access": "public", "display_name": "get_storage", "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_storage", "parameters": [], "source_location": { "column": 24, "file": "t00100.cc", "line": 28, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "const std::string &" }, { "access": "public", "display_name": "get_graphics_card", "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_graphics_card", "parameters": [], "source_location": { "column": 24, "file": "t00100.cc", "line": 29, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "const std::string &" }, { "access": "public", "display_name": "get_motherboard", "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_motherboard", "parameters": [], "source_location": { "column": 24, "file": "t00100.cc", "line": 30, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "const std::string &" }, { "access": "public", "display_name": "get_ports", "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_ports", "parameters": [], "source_location": { "column": 37, "file": "t00100.cc", "line": 31, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "const std::vector &" }, { "access": "public", "display_name": "get_power_supply", "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_power_supply", "parameters": [], "source_location": { "column": 9, "file": "t00100.cc", "line": 32, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "int" }, { "access": "public", "display_name": "get_case_type", "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_case_type", "parameters": [], "source_location": { "column": 24, "file": "t00100.cc", "line": 33, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "const std::string &" }, { "access": "public", "display_name": "display_specs", "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": "display_specs", "parameters": [], "source_location": { "column": 10, "file": "t00100.cc", "line": 35, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" } ], "name": "Computer", "namespace": "clanguml::t00100", "source_location": { "column": 7, "file": "t00100.cc", "line": 12, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "class" }, { "display_name": "ComputerBuilderConcept", "id": "431987183704199885", "name": "ComputerBuilderConcept", "namespace": "clanguml::t00100", "parameters": [ { "name": "t", "type": "T" }, { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 9, "file": "t00100.cc", "line": 50, "translation_unit": "t00100.cc" }, "statements": [ "{t.build_cpu(computer)} -> std::same_as", "{t.build_memory(computer)} -> std::same_as", "{t.build_storage(computer)} -> std::same_as", "{t.build_graphics_card(computer)} -> std::same_as", "{t.build_motherboard(computer)} -> std::same_as", "{t.build_ports(computer)} -> std::same_as", "{t.build_power_supply(computer)} -> std::same_as", "{t.build_case(computer)} -> std::same_as" ], "type": "concept" }, { "bases": [], "display_name": "ComputerBuilderBase", "id": "4689822801959945338", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [ { "access": "protected", "is_static": false, "name": "computer_", "source_location": { "column": 31, "file": "t00100.cc", "line": 76, "translation_unit": "t00100.cc" }, "type": "std::unique_ptr" } ], "methods": [ { "access": "public", "display_name": "get_computer", "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": "get_computer", "parameters": [], "source_location": { "column": 31, "file": "t00100.cc", "line": 64, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "std::unique_ptr" }, { "access": "public", "display_name": "get_computer_ref", "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": "get_computer_ref", "parameters": [], "source_location": { "column": 15, "file": "t00100.cc", "line": 71, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "Computer &" }, { "access": "public", "display_name": "reset", "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": "reset", "parameters": [], "source_location": { "column": 10, "file": "t00100.cc", "line": 73, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "protected", "display_name": "ComputerBuilderBase", "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": "ComputerBuilderBase", "parameters": [], "source_location": { "column": 5, "file": "t00100.cc", "line": 78, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" } ], "name": "ComputerBuilderBase", "namespace": "clanguml::t00100", "source_location": { "column": 35, "file": "t00100.cc", "line": 62, "translation_unit": "t00100.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "Derived", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "ComputerBuilderBase", "id": "5914491979003344838", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "ComputerBuilderBase", "namespace": "clanguml::t00100", "source_location": { "column": 7, "file": "t00100.cc", "line": 82, "translation_unit": "t00100.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "GamingComputerBuilder" } ], "type": "class" }, { "bases": [ { "access": "public", "id": "5914491979003344838", "is_virtual": false } ], "display_name": "GamingComputerBuilder", "id": "16867399468362730095", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": false, "is_union": false, "members": [], "methods": [ { "access": "public", "display_name": "build_cpu", "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": "build_cpu", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 85, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_memory", "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": "build_memory", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 90, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_storage", "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": "build_storage", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 92, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_graphics_card", "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": "build_graphics_card", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 97, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_motherboard", "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": "build_motherboard", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 102, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_ports", "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": "build_ports", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 107, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_power_supply", "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": "build_power_supply", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 117, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_case", "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": "build_case", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 122, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" } ], "name": "GamingComputerBuilder", "namespace": "clanguml::t00100", "source_location": { "column": 7, "file": "t00100.cc", "line": 82, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "class" }, { "bases": [], "display_name": "ComputerBuilderBase", "id": "12505201150258931951", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "ComputerBuilderBase", "namespace": "clanguml::t00100", "source_location": { "column": 7, "file": "t00100.cc", "line": 129, "translation_unit": "t00100.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "OfficeComputerBuilder" } ], "type": "class" }, { "bases": [ { "access": "public", "id": "12505201150258931951", "is_virtual": false } ], "display_name": "OfficeComputerBuilder", "id": "16647461979205590288", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": false, "is_union": false, "members": [], "methods": [ { "access": "public", "display_name": "build_cpu", "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": "build_cpu", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 132, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_memory", "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": "build_memory", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 137, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_storage", "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": "build_storage", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 139, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_graphics_card", "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": "build_graphics_card", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 144, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_motherboard", "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": "build_motherboard", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 149, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_ports", "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": "build_ports", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 154, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_power_supply", "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": "build_power_supply", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 164, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "build_case", "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": "build_case", "parameters": [ { "name": "computer", "type": "Computer &" } ], "source_location": { "column": 10, "file": "t00100.cc", "line": 169, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" } ], "name": "OfficeComputerBuilder", "namespace": "clanguml::t00100", "source_location": { "column": 7, "file": "t00100.cc", "line": 129, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "class" }, { "bases": [], "display_name": "ComputerDirector", "id": "6260083873164418939", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [ { "access": "private", "is_static": false, "name": "builder_", "source_location": { "column": 18, "file": "t00100.cc", "line": 224, "translation_unit": "t00100.cc" }, "type": "BuilderType &" } ], "methods": [ { "access": "public", "display_name": "ComputerDirector", "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": "ComputerDirector", "parameters": [ { "name": "builder", "type": "BuilderType &" } ], "source_location": { "column": 14, "file": "t00100.cc", "line": 178, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "void" }, { "access": "public", "display_name": "construct_basic_computer", "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": "construct_basic_computer", "parameters": [], "source_location": { "column": 31, "file": "t00100.cc", "line": 183, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "std::unique_ptr" }, { "access": "public", "display_name": "construct_full_computer", "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": "construct_full_computer", "parameters": [], "source_location": { "column": 31, "file": "t00100.cc", "line": 196, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "std::unique_ptr" }, { "access": "public", "display_name": "construct_custom_computer", "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": "construct_custom_computer", "parameters": [], "source_location": { "column": 31, "file": "t00100.cc", "line": 211, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "std::unique_ptr" } ], "name": "ComputerDirector", "namespace": "clanguml::t00100", "source_location": { "column": 53, "file": "t00100.cc", "line": 176, "translation_unit": "t00100.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "BuilderType", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "ComputerStore", "id": "790557712426801484", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": false, "is_union": false, "members": [], "methods": [ { "access": "public", "display_name": "order_gaming_computer", "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": "order_gaming_computer", "parameters": [], "source_location": { "column": 31, "file": "t00100.cc", "line": 230, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "std::unique_ptr" }, { "access": "public", "display_name": "order_office_computer", "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": "order_office_computer", "parameters": [], "source_location": { "column": 31, "file": "t00100.cc", "line": 237, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "std::unique_ptr" }, { "access": "public", "display_name": "order_custom_computer", "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": "order_custom_computer", "parameters": [ { "name": "builder", "type": "BuilderType &" } ], "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "BuilderType", "template_parameters": [] } ], "type": "std::unique_ptr" } ], "name": "ComputerStore", "namespace": "clanguml::t00100", "source_location": { "column": 7, "file": "t00100.cc", "line": 228, "translation_unit": "t00100.cc" }, "template_parameters": [], "type": "class" } ], "name": "t00100_class", "package_type": "namespace", "relationships": [ { "access": "protected", "destination": "6827834764220301334", "label": "computer_", "source": "4689822801959945338", "type": "aggregation" }, { "access": "public", "destination": "16867399468362730095", "source": "5914491979003344838", "type": "dependency" }, { "access": "public", "destination": "4689822801959945338", "source": "5914491979003344838", "type": "instantiation" }, { "access": "public", "destination": "6827834764220301334", "source": "16867399468362730095", "type": "dependency" }, { "access": "public", "destination": "5914491979003344838", "source": "16867399468362730095", "type": "extension" }, { "access": "public", "destination": "16647461979205590288", "source": "12505201150258931951", "type": "dependency" }, { "access": "public", "destination": "4689822801959945338", "source": "12505201150258931951", "type": "instantiation" }, { "access": "public", "destination": "6827834764220301334", "source": "16647461979205590288", "type": "dependency" }, { "access": "public", "destination": "12505201150258931951", "source": "16647461979205590288", "type": "extension" }, { "destination": "431987183704199885", "label": "BuilderType", "source": "6260083873164418939", "type": "constraint" }, { "access": "public", "destination": "6827834764220301334", "source": "6260083873164418939", "type": "dependency" }, { "access": "public", "destination": "6827834764220301334", "source": "790557712426801484", "type": "dependency" } ], "using_namespace": "clanguml::t00100" } ``` ## Generated GraphML models ```xml clanguml::t00100 class false concept ]]> class ]]> true class ]]> true class false class ]]> true class false class ]]> true class false aggregation computer_ protected dependency public instantiation public dependency public extension public dependency public instantiation public dependency public extension public constraint BuilderType dependency public dependency public ```