Merge branch 'claude0'
This commit is contained in:
commit
bef5d9cf72
3 changed files with 12 additions and 76 deletions
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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@")
|
||||
|
|
|
|||
|
|
@ -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 <iostream>
|
||||
#include <cstdint>
|
||||
#include <xo/reflectutil/typeseq.hpp>
|
||||
|
||||
namespace xo {
|
||||
namespace facet {
|
||||
/**
|
||||
* Tag here so we can preserve header-only implementation
|
||||
* and still have static variable
|
||||
*/
|
||||
template<typename Tag = class typeseq_tag>
|
||||
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 <typename T>
|
||||
static typeseq_impl<Tag> 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<Tag> anon() {
|
||||
return typeseq_impl(-1);
|
||||
}
|
||||
|
||||
int32_t seqno() const { return seqno_; }
|
||||
|
||||
private:
|
||||
static int32_t s_next_id;
|
||||
|
||||
int32_t seqno_;
|
||||
};
|
||||
|
||||
template <typename Tag>
|
||||
int32_t typeseq_impl<Tag>::s_next_id = 0;
|
||||
|
||||
template <typename Tag>
|
||||
inline bool
|
||||
operator==(const typeseq_impl<Tag> & lhs, const typeseq_impl<Tag> & rhs) {
|
||||
return lhs.seqno() == rhs.seqno();
|
||||
}
|
||||
|
||||
template <typename Tag>
|
||||
inline bool
|
||||
operator!=(const typeseq_impl<Tag> & lhs, const typeseq_impl<Tag> & rhs) {
|
||||
return lhs.seqno() != rhs.seqno();
|
||||
}
|
||||
|
||||
template <typename Tag>
|
||||
inline std::ostream &
|
||||
operator<<(std::ostream & s, const typeseq_impl<Tag> & 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*/
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue