diff --git a/CMakeLists.txt b/CMakeLists.txt index e1804f2..ad8a4cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,10 @@ add_subdirectory(utest) set(SELF_LIB xo_facet) xo_add_headeronly_library(${SELF_LIB}) + +# note: dependencies here must coordinate with cmake/xo_facetConfig.cmake.in +xo_headeronly_dependency(${SELF_LIB} xo_reflectutil) + xo_install_library4(${SELF_LIB} ${PROJECT_NAME}Targets) xo_export_cmake_config(${PROJECT_NAME} ${PROJECT_VERSION} ${PROJECT_NAME}Targets) diff --git a/cmake/xo_facetConfig.cmake.in b/cmake/xo_facetConfig.cmake.in index c25a5c2..8870982 100644 --- a/cmake/xo_facetConfig.cmake.in +++ b/cmake/xo_facetConfig.cmake.in @@ -1,7 +1,7 @@ @PACKAGE_INIT@ include(CMakeFindDependencyMacro) -#find_dependency(indentlog) -#find_dependency(xo_flatstring) +# note: dependencies here must coordinate with xo-facet/CMakeLists.txt +find_dependency(xo_reflectutil) include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") check_required_components("@PROJECT_NAME@") diff --git a/include/xo/facet/typeseq.hpp b/include/xo/facet/typeseq.hpp index ab85821..23b84a9 100644 --- a/include/xo/facet/typeseq.hpp +++ b/include/xo/facet/typeseq.hpp @@ -1,87 +1,19 @@ /** @file typeseq.hpp + * + * @brief Re-export typeseq from xo-arena for backwards compatibility * * @author Roland Conybeare, Dec 2025 **/ #pragma once -#include -#include +#include namespace xo { namespace facet { - /** - * Tag here so we can preserve header-only implementation - * and still have static variable - */ - template - struct typeseq_impl { - explicit typeseq_impl(int32_t s) : seqno_{s} {} - - /** Can't have this be constexpr. - * We need ids in shared libraries to be generated - * at load time to avoid false positives - * - * Return unique id number for each type. - * Numbers are sequentially allocated, so can use - * as vector indices - * - * Conversely note that built-in typeinfo may - * return false negatives across library boundaries - * when using clang. - **/ - template - static typeseq_impl id() { - static bool armed = true; - static int32_t id = 0; - - if (armed) { - armed = false; - id = ++s_next_id; - } - - return typeseq_impl(id); - - } - - /** 'anonymous' sentinel type. - * Niche uses for this, e.g. untyped allocator - **/ - static typeseq_impl anon() { - return typeseq_impl(-1); - } - - int32_t seqno() const { return seqno_; } - - private: - static int32_t s_next_id; - - int32_t seqno_; - }; - - template - int32_t typeseq_impl::s_next_id = 0; - - template - inline bool - operator==(const typeseq_impl & lhs, const typeseq_impl & rhs) { - return lhs.seqno() == rhs.seqno(); - } - - template - inline bool - operator!=(const typeseq_impl & lhs, const typeseq_impl & rhs) { - return lhs.seqno() != rhs.seqno(); - } - - template - inline std::ostream & - operator<<(std::ostream & s, const typeseq_impl & x) { - s << x.seqno(); - return s; - } - - using typeseq = typeseq_impl<>; + // Re-export from xo::arena namespace + using xo::reflect::typeseq_impl; + using xo::reflect::typeseq; } } /*namespace xo*/