// Copyright Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT #include #include #include #include #include #include #include #include using namespace rocRoller::Component; struct TestArgument { bool classA = false; }; struct Printer { using Argument = std::shared_ptr; static const std::string Basename; virtual void print() = 0; }; const std::string Printer::Basename = "Printer"; static_assert(ComponentBase); struct APrinter : public Printer { using Base = Printer; static const std::string Name; static bool Match(Argument arg) { return arg->classA; } static std::shared_ptr Build(Argument arg) { if(!Match(arg)) return nullptr; return std::make_shared(); } virtual void print() override { std::cout << "A" << std::endl; } }; struct BPrinter : public Printer { using Base = Printer; static const std::string Name; static bool Match(Argument arg) { return !arg->classA; } static std::shared_ptr Build(Argument arg) { if(!Match(arg)) return nullptr; return std::make_shared(); } virtual void print() override { std::cout << "B" << std::endl; } }; const std::string APrinter::Name = "APrinter"; const std::string BPrinter::Name = "BPrinter"; static_assert(Component); static_assert(Component); using myarr = std::array; struct asdf { myarr fdsa; asdf(std::initializer_list fd) : fdsa{} { using namespace rocRoller; AssertFatal(fd.size() <= fdsa.size(), ShowValue(fd.size()), ShowValue(fdsa.size())); std::copy(fd.begin(), fd.end(), fdsa.begin()); } }; int main(int argc, const char* argv[]) { auto argA = std::make_shared(); auto argB = std::make_shared(); argA->classA = true; argB->classA = false; auto instA = Get(argA); instA->print(); auto instB = Get(argB); instB->print(); asdf foo({1, 3, 4, 5}); for(int i = 0; i < 4; i++) std::cout << foo.fdsa[i] << std::endl; return 0; } template <> void ComponentFactory::registerImplementations() { registerComponent(); registerComponent(); }