mirror of
https://github.com/matrix-construct/construct
synced 2024-09-20 23:48:55 +02:00
ircd::stats: Add signed integer, chrono specializations; use panic exception.
This commit is contained in:
parent
dfa75cd421
commit
9f0c081ac8
2 changed files with 221 additions and 4 deletions
|
@ -52,11 +52,25 @@ namespace ircd::stats
|
||||||
template<> struct item<uint64_t *>;
|
template<> struct item<uint64_t *>;
|
||||||
template<> struct item<uint32_t *>;
|
template<> struct item<uint32_t *>;
|
||||||
template<> struct item<uint16_t *>;
|
template<> struct item<uint16_t *>;
|
||||||
|
template<> struct item<int64_t *>;
|
||||||
|
template<> struct item<int32_t *>;
|
||||||
|
template<> struct item<int16_t *>;
|
||||||
|
template<> struct item<nanoseconds *>;
|
||||||
|
template<> struct item<microseconds *>;
|
||||||
|
template<> struct item<milliseconds *>;
|
||||||
|
template<> struct item<seconds *>;
|
||||||
|
|
||||||
// Value-carrying items
|
// Value-carrying items
|
||||||
template<> struct item<uint64_t>;
|
template<> struct item<uint64_t>;
|
||||||
template<> struct item<uint32_t>;
|
template<> struct item<uint32_t>;
|
||||||
template<> struct item<uint16_t>;
|
template<> struct item<uint16_t>;
|
||||||
|
template<> struct item<int64_t>;
|
||||||
|
template<> struct item<int32_t>;
|
||||||
|
template<> struct item<int16_t>;
|
||||||
|
template<> struct item<nanoseconds>;
|
||||||
|
template<> struct item<microseconds>;
|
||||||
|
template<> struct item<milliseconds>;
|
||||||
|
template<> struct item<seconds>;
|
||||||
|
|
||||||
extern const size_t NAME_MAX_LEN;
|
extern const size_t NAME_MAX_LEN;
|
||||||
extern std::vector<item<void> *> items;
|
extern std::vector<item<void> *> items;
|
||||||
|
@ -184,6 +198,22 @@ struct ircd::stats::item<uint64_t>
|
||||||
using int_item<uint64_t>::operator=;
|
using int_item<uint64_t>::operator=;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<int64_t *>
|
||||||
|
:ptr_item<int64_t>
|
||||||
|
{
|
||||||
|
using ptr_item<int64_t>::ptr_item;
|
||||||
|
using ptr_item<int64_t>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<int64_t>
|
||||||
|
:int_item<int64_t>
|
||||||
|
{
|
||||||
|
using int_item<int64_t>::int_item;
|
||||||
|
using int_item<int64_t>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct ircd::stats::item<uint32_t *>
|
struct ircd::stats::item<uint32_t *>
|
||||||
:ptr_item<uint32_t>
|
:ptr_item<uint32_t>
|
||||||
|
@ -200,6 +230,22 @@ struct ircd::stats::item<uint32_t>
|
||||||
using int_item<uint32_t>::operator=;
|
using int_item<uint32_t>::operator=;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<int32_t *>
|
||||||
|
:ptr_item<int32_t>
|
||||||
|
{
|
||||||
|
using ptr_item<int32_t>::ptr_item;
|
||||||
|
using ptr_item<int32_t>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<int32_t>
|
||||||
|
:int_item<int32_t>
|
||||||
|
{
|
||||||
|
using int_item<int32_t>::int_item;
|
||||||
|
using int_item<int32_t>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct ircd::stats::item<uint16_t *>
|
struct ircd::stats::item<uint16_t *>
|
||||||
:ptr_item<uint16_t>
|
:ptr_item<uint16_t>
|
||||||
|
@ -215,3 +261,83 @@ struct ircd::stats::item<uint16_t>
|
||||||
using int_item<uint16_t>::int_item;
|
using int_item<uint16_t>::int_item;
|
||||||
using int_item<uint16_t>::operator=;
|
using int_item<uint16_t>::operator=;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<int16_t *>
|
||||||
|
:ptr_item<int16_t>
|
||||||
|
{
|
||||||
|
using ptr_item<int16_t>::ptr_item;
|
||||||
|
using ptr_item<int16_t>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<int16_t>
|
||||||
|
:int_item<int16_t>
|
||||||
|
{
|
||||||
|
using int_item<int16_t>::int_item;
|
||||||
|
using int_item<int16_t>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<ircd::nanoseconds *>
|
||||||
|
:ptr_item<nanoseconds>
|
||||||
|
{
|
||||||
|
using ptr_item<nanoseconds>::ptr_item;
|
||||||
|
using ptr_item<nanoseconds>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<ircd::nanoseconds>
|
||||||
|
:int_item<nanoseconds>
|
||||||
|
{
|
||||||
|
using int_item<nanoseconds>::int_item;
|
||||||
|
using int_item<nanoseconds>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<ircd::microseconds *>
|
||||||
|
:ptr_item<microseconds>
|
||||||
|
{
|
||||||
|
using ptr_item<microseconds>::ptr_item;
|
||||||
|
using ptr_item<microseconds>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<ircd::microseconds>
|
||||||
|
:int_item<microseconds>
|
||||||
|
{
|
||||||
|
using int_item<microseconds>::int_item;
|
||||||
|
using int_item<microseconds>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<ircd::milliseconds *>
|
||||||
|
:ptr_item<milliseconds>
|
||||||
|
{
|
||||||
|
using ptr_item<milliseconds>::ptr_item;
|
||||||
|
using ptr_item<milliseconds>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<ircd::milliseconds>
|
||||||
|
:int_item<milliseconds>
|
||||||
|
{
|
||||||
|
using int_item<milliseconds>::int_item;
|
||||||
|
using int_item<milliseconds>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<ircd::seconds *>
|
||||||
|
:ptr_item<seconds>
|
||||||
|
{
|
||||||
|
using ptr_item<seconds>::ptr_item;
|
||||||
|
using ptr_item<seconds>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct ircd::stats::item<ircd::seconds>
|
||||||
|
:int_item<seconds>
|
||||||
|
{
|
||||||
|
using int_item<seconds>::int_item;
|
||||||
|
using int_item<seconds>::operator=;
|
||||||
|
};
|
||||||
|
|
|
@ -35,7 +35,7 @@ ircd::stats::string(const mutable_buffer &buf,
|
||||||
{
|
{
|
||||||
const auto &item
|
const auto &item
|
||||||
{
|
{
|
||||||
dynamic_cast<const stats::item<uint64_t *> &>(item_)
|
dynamic_cast<const stats::ptr_item<uint64_t> &>(item_)
|
||||||
};
|
};
|
||||||
|
|
||||||
assert(item.val);
|
assert(item.val);
|
||||||
|
@ -44,11 +44,76 @@ ircd::stats::string(const mutable_buffer &buf,
|
||||||
buf, "%lu", *item.val
|
buf, "%lu", *item.val
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
else if(item_.type == typeid(int64_t *))
|
||||||
|
{
|
||||||
|
const auto &item
|
||||||
|
{
|
||||||
|
dynamic_cast<const stats::ptr_item<int64_t> &>(item_)
|
||||||
|
};
|
||||||
|
|
||||||
|
assert(item.val);
|
||||||
|
return fmt::sprintf
|
||||||
|
{
|
||||||
|
buf, "%ld", *item.val
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else if(item_.type == typeid(nanoseconds *))
|
||||||
|
{
|
||||||
|
const auto &item
|
||||||
|
{
|
||||||
|
dynamic_cast<const stats::ptr_item<nanoseconds> &>(item_)
|
||||||
|
};
|
||||||
|
|
||||||
|
assert(item.val);
|
||||||
|
return fmt::sprintf
|
||||||
|
{
|
||||||
|
buf, "%ld", item.val->count()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else if(item_.type == typeid(microseconds *))
|
||||||
|
{
|
||||||
|
const auto &item
|
||||||
|
{
|
||||||
|
dynamic_cast<const stats::ptr_item<microseconds> &>(item_)
|
||||||
|
};
|
||||||
|
|
||||||
|
assert(item.val);
|
||||||
|
return fmt::sprintf
|
||||||
|
{
|
||||||
|
buf, "%ld", item.val->count()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else if(item_.type == typeid(milliseconds *))
|
||||||
|
{
|
||||||
|
const auto &item
|
||||||
|
{
|
||||||
|
dynamic_cast<const stats::ptr_item<milliseconds> &>(item_)
|
||||||
|
};
|
||||||
|
|
||||||
|
assert(item.val);
|
||||||
|
return fmt::sprintf
|
||||||
|
{
|
||||||
|
buf, "%ld", item.val->count()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else if(item_.type == typeid(seconds *))
|
||||||
|
{
|
||||||
|
const auto &item
|
||||||
|
{
|
||||||
|
dynamic_cast<const stats::ptr_item<seconds> &>(item_)
|
||||||
|
};
|
||||||
|
|
||||||
|
assert(item.val);
|
||||||
|
return fmt::sprintf
|
||||||
|
{
|
||||||
|
buf, "%ld", item.val->count()
|
||||||
|
};
|
||||||
|
}
|
||||||
else if(item_.type == typeid(uint32_t *))
|
else if(item_.type == typeid(uint32_t *))
|
||||||
{
|
{
|
||||||
const auto &item
|
const auto &item
|
||||||
{
|
{
|
||||||
dynamic_cast<const stats::item<uint32_t *> &>(item_)
|
dynamic_cast<const stats::ptr_item<uint32_t> &>(item_)
|
||||||
};
|
};
|
||||||
|
|
||||||
assert(item.val);
|
assert(item.val);
|
||||||
|
@ -57,11 +122,24 @@ ircd::stats::string(const mutable_buffer &buf,
|
||||||
buf, "%u", *item.val
|
buf, "%u", *item.val
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
else if(item_.type == typeid(int32_t *))
|
||||||
|
{
|
||||||
|
const auto &item
|
||||||
|
{
|
||||||
|
dynamic_cast<const stats::ptr_item<int32_t> &>(item_)
|
||||||
|
};
|
||||||
|
|
||||||
|
assert(item.val);
|
||||||
|
return fmt::sprintf
|
||||||
|
{
|
||||||
|
buf, "%d", *item.val
|
||||||
|
};
|
||||||
|
}
|
||||||
else if(item_.type == typeid(uint16_t *))
|
else if(item_.type == typeid(uint16_t *))
|
||||||
{
|
{
|
||||||
const auto &item
|
const auto &item
|
||||||
{
|
{
|
||||||
dynamic_cast<const stats::item<uint16_t *> &>(item_)
|
dynamic_cast<const stats::ptr_item<uint16_t> &>(item_)
|
||||||
};
|
};
|
||||||
|
|
||||||
assert(item.val);
|
assert(item.val);
|
||||||
|
@ -70,7 +148,20 @@ ircd::stats::string(const mutable_buffer &buf,
|
||||||
buf, "%u", *item.val
|
buf, "%u", *item.val
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else throw error
|
else if(item_.type == typeid(int16_t *))
|
||||||
|
{
|
||||||
|
const auto &item
|
||||||
|
{
|
||||||
|
dynamic_cast<const stats::ptr_item<int16_t> &>(item_)
|
||||||
|
};
|
||||||
|
|
||||||
|
assert(item.val);
|
||||||
|
return fmt::sprintf
|
||||||
|
{
|
||||||
|
buf, "%d", *item.val
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else throw invalid
|
||||||
{
|
{
|
||||||
"Unsupported value type '%s'",
|
"Unsupported value type '%s'",
|
||||||
item_.type.name(),
|
item_.type.name(),
|
||||||
|
|
Loading…
Reference in a new issue