#pragma once #include #include namespace theo::comp { using resolver_t = std::function; using copier_t = std::function; using allocator_t = std::function; class comp_t { public: explicit comp_t(decomp::decomp_t* dcmp); explicit comp_t(decomp::decomp_t* dcmp, allocator_t alloc, copier_t copy, resolver_t resolve); std::optional compose(); void allocator(allocator_t alloc); void copier(copier_t copy); void resolver(resolver_t resolve); std::uintptr_t resolve(std::string&& sym); private: decomp::decomp_t* m_dcmp; resolver_t m_resolver; copier_t m_copier; allocator_t m_allocator; }; } // namespace theo::comp