17struct Base :
public RC<thread_unsafe_refcount>
22 virtual std::string
to_string()
const = 0;
24 std::type_index type()
const
30 Base(std::type_index &&type)
31 : type_(std::move(type))
36 const std::type_index type_;
44 :
Base(static_type()),
45 obj(std::move(obj_arg))
50 static const Wrapper *self(
const Base *maybe_my_type)
52 if (maybe_my_type->type() == static_type())
53 return static_cast<const Wrapper *
>(maybe_my_type);
62 static std::type_index static_type()
64 return std::type_index(
typeid(
Wrapper));
70struct Vec :
public std::vector<Base::Ptr>
75 for (
const auto &e : *this)
77 ret += e->to_string();
90static Vec create_vec()
93 vec.emplace_back(create(1));
94 vec.emplace_back(create(2));
95 vec.emplace_back(create(3.14159));
96 vec.emplace_back(create(std::string(
"Hello")));
97 vec.emplace_back(create(std::string(
"World!")));
98 vec.emplace_back(create(
true));
99 vec.emplace_back(create(
false));
109 const Vec vec = create_vec();
115 for (
const auto &e : vec)
117 const StringWrap *s = StringWrap::self(e.get());
123#ifndef INSTRUMENTATION_SLOWDOWN
130 const size_t N = 100000000;
132 const Vec vec = create_vec();
133 const size_t size = vec.size();
134 size_t n_strings = 0;
136 for (
size_t count = 0; count < N; ++count)
138 const StringWrap *s = StringWrap::self(vec[i].get());
145 ASSERT_EQ(n_strings, 28571428U);
149TEST(Typeindex, PerfTestDynamic)
153 const size_t N = 100000000;
155 const Vec vec = create_vec();
156 const size_t size = vec.size();
157 size_t n_strings = 0;
159 for (
size_t count = 0; count < N; ++count)
161 const StringWrap *s =
dynamic_cast<const StringWrap *
>(vec[i].get());
168 ASSERT_EQ(n_strings, 28571428U);
Reference count base class for objects tracked by RCPtr. Disallows copying and assignment.
#define OPENVPN_LOG(args)
#define OPENVPN_LOG_STRING(str)
std::string to_string(std::nullptr_t)
HTTPBase< HTTPCore, Config, Status, HTTP::ReplyType, ContentInfo, olong, RC< thread_unsafe_refcount > > Base
void to_string(const Json::Value &root, std::string &dest, const NAME &name, const TITLE &title)