@startuml set namespaceSeparator :: namespace dynasty { namespace inferencer { abstract class AbstractInferencer { + {abstract} Inference(unordered_map>) : unordered_map> + {abstract} Inference(unordered_map) : unordered_map> + Inference(string) : unordered_map> # {abstract} CleanUp() : void } class InferencerDeletor { + operator () (AbstractInferencer *ptr) : void } AbstractInferencer +-- InferencerDeletor note "ptr->CleanUp();delete ptr" as DeletorNote DeletorNote .. InferencerDeletor abstract class Builder { + {abstract} build() : unique_ptr, InferencerDeletor> } AbstractInferencer +-- Builder namespace snpe { class Inferencer { + {static} GetBuilder() : std::unique_ptr } class Builder { + build() : unique_ptr, InferencerDeletor> + WithModel(string const &) : Builder* } Inferencer +-- Builder dynasty::inferencer::AbstractInferencer <|-- Inferencer dynasty::inferencer::Builder <|-- Builder } /'namespace snpe '/ namespace msft { class Inferencer { + {static} GetBuilder() : std::unique_ptr } class Builder { + build() : unique_ptr, InferencerDeletor> + WithModel(string const &) : Builder* + WithGraphOptimization(uint32_t ) : Builder* + WithParallelLevel(uint32_t ) : Builder* } Inferencer +-- Builder dynasty::inferencer::AbstractInferencer <|-- Inferencer dynasty::inferencer::Builder <|-- Builder } /'namespace msft '/ namespace common { abstract class PianoInferencer { # shared_ptr graph_ # CheckInputCorrectness(unordered_map> const &preprocess_input) : bool # {abstract} GraphBasedInference(unordered_map> const &preprocess_input) : unordered_map> + Inference(unordered_map>) : unordered_map> + Inference(unordered_map) : unordered_map> } abstract class Builder { + {abstract} build() : unique_ptr, InferencerDeletor> + WithONNXModel(std::string const &onnx_file) : Builder * + WithBIEModel(std::string const &bie_file) : Builder * + WithGraphOptimization(uint32_t level) : Builder * + WithDeviceID(int device_id) : Builder * + GetGraph() const : shared_ptr + GetInputDimensions() : unordered_map> + GetOutputDimensions() : unordered_map> } dynasty::inferencer::AbstractInferencer <|-- PianoInferencer dynasty::inferencer::Builder <|-- Builder PianoInferencer +-- Builder } /'namespace common '/ } } @enduml