Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions med/allocator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,15 @@ struct null_allocator
[[nodiscard]]
void* allocate(std::size_t bytes, std::size_t /*alignment*/) const
{
CODEC_TRACE("%s", __FUNCTION__);
MED_THROW_EXCEPTION(out_of_memory, __FUNCTION__, bytes);
}
};

template <typename T, class ALLOCATOR, class... ARGs>
T* create(ALLOCATOR& alloc, ARGs&&... args)
{
CODEC_TRACE("%s", __FUNCTION__);
void* p = alloc.allocate(sizeof(T), alignof(T));
if (!p) { MED_THROW_EXCEPTION(out_of_memory, name<T>(), sizeof(T)); }
return new (p) T{std::forward<ARGs>(args)...};
Expand Down
9 changes: 7 additions & 2 deletions med/choice.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -203,20 +203,23 @@ struct choice_dec
using mi = meta::produce_info_t<DECODER, IE>;
using tag_t = get_info_t<meta::list_first_t<mi>>;
//static_assert (type::mik = kind::TAG, "NOT A TAG");
CODEC_TRACE("TAG[%s] matching with %s", class_name<tag_t>(), class_name<decltype(get_tag(header))>());
return tag_t::match( get_tag(header) );
}

template <class IE, class TO, class HEADER, class DECODER, class... DEPS>
static constexpr void apply(TO& to, HEADER const& header, DECODER& decoder, DEPS&... deps)
{
CODEC_TRACE("CASE[%s]", name<IE>());
CODEC_TRACE("CASE[%s] %s", name<IE>(), class_name<IE>());
auto& ie = static_cast<IE&>(to.template ref<get_field_type_t<IE>>());
//skip 1st TAG meta-info as it's decoded in header
using mi = meta::produce_info_t<DECODER, IE>;
if constexpr (AContainer<IE>)
{
using FLD_TYPE = get_field_type_t<meta::list_first_t<typename IE::ies_types>>;
using EXP_TAG = get_info_t<meta::list_first_t<mi>>;
if constexpr(std::is_same_v<EXP_TAG, get_field_type_t<meta::list_first_t<typename IE::ies_types>>>)
CODEC_TRACE("CASE[%s] TYPE[%s] EXPOSED[%s]", name<typename IE::ies_types>(), name<FLD_TYPE>(), name<EXP_TAG>());
if constexpr(std::is_same_v<EXP_TAG, FLD_TYPE>)
{
CODEC_TRACE("explicit[%s] = %#zX", name<EXP_TAG>(), size_t(header.get()));
ie.template ref<EXP_TAG>().set(header.get());
Expand Down Expand Up @@ -356,12 +359,14 @@ class choice : public IE<IE_CHOICE>
using IE = meta::list_first_t<ies_types>; //use 1st IE since all have similar tag
using mi = meta::produce_info_t<DECODER, IE>;
using tag_t = get_info_t<meta::list_first_t<mi>>;
CODEC_TRACE("%s CHOICE WITH PLAIN HEADER, mi=%s tag=%s", name<ies_types>(), name<mi>(), name<tag_t>());
as_writable_t<tag_t> tag;
tag.set_encoded(sl::decode_tag<tag_t>(decoder));
meta::for_if<ies_types>(sl::choice_dec{}, *this, tag, decoder, deps...);
}
else
{
CODEC_TRACE("%s CHOICE W/O PLAIN HEADER", name<ies_types>());
med::decode(decoder, this->header(), deps...);
meta::for_if<ies_types>(sl::choice_dec{}, *this, this->header(), decoder, deps...);
}
Expand Down
4 changes: 2 additions & 2 deletions med/container.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,18 +113,18 @@ struct cont_is
//optional or mandatory field w/ setter => can be set implicitly
if constexpr (AOptional<IE> || AHasSetterType<IE>)
{
//CODEC_TRACE("is_set[%s]=%d", name<IE>(), static_cast<IE const&>(seq).is_set());
CODEC_TRACE("O/S[%s] is_set=%d", name<IE>(), static_cast<IE const&>(seq).is_set());
return static_cast<IE const&>(seq).is_set();
}
else //mandatory field w/o setter => s.b. set explicitly
{
CODEC_TRACE("M[%s]%s is_set=%d", name<IE>(), (APredefinedValue<IE> ? "[init/const]":""), static_cast<IE const&>(seq).is_set());
if constexpr (APredefinedValue<IE>) //don't account predefined IEs like init/const
{
return false;
}
else
{
//CODEC_TRACE("is_set[%s]=%d", name<IE>(), static_cast<IE const&>(seq).is_set());
return static_cast<IE const&>(seq).is_set();
}
}
Expand Down
2 changes: 1 addition & 1 deletion med/decode.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ constexpr auto decode_tag(auto& decoder)
TAG_TYPE ie;
typename as_writable_t<TAG_TYPE>::value_type value{};
value = decoder(ie, IE_TAG{});
CODEC_TRACE("%s=%zX [%s]", __FUNCTION__, std::size_t(value), class_name<TAG_TYPE>());
CODEC_TRACE("%s=0x%zX(%zu) [%s]", __FUNCTION__, std::size_t(value), std::size_t(value), class_name<TAG_TYPE>());
return value;
}
//Length
Expand Down
2 changes: 1 addition & 1 deletion med/encode.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ template <class ENCODER, AHasIeType IE>
constexpr void encode(ENCODER&& encoder, IE const& ie)
{
using META_INFO = meta::produce_info_t<ENCODER, IE>;
//CODEC_TRACE("mi=%s", class_name<META_INFO>());
CODEC_TRACE("mi=%s by %s for %s", class_name<META_INFO>(), class_name<ENCODER>(), class_name<IE>());
sl::ie_encode<type_context<typename IE::ie_type, META_INFO>>(encoder, ie);
}

Expand Down
6 changes: 3 additions & 3 deletions med/field.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ class multi_field : public detail::define_meta_info<META_INFO>
m_tail = prev.m_curr;
}
}
CODEC_TRACE("%s(%s=%p) count=%zu head=%p tail=%p", __FUNCTION__, name<field_type>(), it.get(), count(), m_head, m_tail);
CODEC_TRACE("%s(%s=%p) count=%zu head=%p tail=%p", __FUNCTION__, name<field_type>(), (void*)it.get(), count(), (void*)m_head, (void*)m_tail);
return ret;
}
prev = it;
Expand All @@ -220,7 +220,7 @@ class multi_field : public detail::define_meta_info<META_INFO>
{
for (auto& f : m_fields)
{
CODEC_TRACE("%s: %s=%p[%c]", __FUNCTION__, name<field_type>(), (void*)&f, f.value.is_set()?'+':'-');
CODEC_TRACE("%s: %s=%p[%c][%zu]", __FUNCTION__, name<field_type>(), (void*)&f, f.value.is_set()?'+':'-', inplace);
if (!f.value.is_set()) return &f;
}
}
Expand All @@ -235,7 +235,7 @@ class multi_field : public detail::define_meta_info<META_INFO>
else { m_head = m_tail = pf; }
pf->next = nullptr;
m_tail = pf;
CODEC_TRACE("%s(%s=%p) count=%zu head=%p tail=%p", __FUNCTION__, name<field_type>(), (void*)pf, count(), m_head, m_tail);
CODEC_TRACE("%s(%s=%p) count=%zu head=%p tail=%p", __FUNCTION__, name<field_type>(), (void*)pf, count(), (void*)m_head, (void*)m_tail);
return &m_tail->value;
}

Expand Down
2 changes: 1 addition & 1 deletion med/length.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,6 @@ constexpr void length_to_value(FIELD& field, std::size_t len)
{
field.set_length(len);
}
CODEC_TRACE("L=%zXh(%zX) [%s]:", len, std::size_t(field.get_encoded()), name<FIELD>());
}
else if constexpr (std::is_same_v<bool, decltype(field.set_encoded(0))>)
{
Expand All @@ -160,6 +159,7 @@ constexpr void length_to_value(FIELD& field, std::size_t len)
{
field.set_encoded(len);
}
CODEC_TRACE("L=%zXh(%zX) [%s]:", len, std::size_t(field.get_encoded()), name<FIELD>());
}

template <class FIELD>
Expand Down
2 changes: 1 addition & 1 deletion med/octet_decoder.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ struct octet_decoder : sl::octet_info
if constexpr (IE::traits::offset)
{
constexpr size_t MASK = (size_t(1) << (NUM_BYTES * 8 - IE::traits::offset)) - 1;
//CODEC_TRACE("V=%zXh(%zu) M=%zXh", res, NUM_BYTES, MASK);
CODEC_TRACE("V=%zXh(%zu) M=%zXh", res, NUM_BYTES, MASK);
res &= MASK;
}
constexpr uint8_t RS = NUM_BYTES * 8 - NUM_BITS;
Expand Down
2 changes: 1 addition & 1 deletion med/sequence.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ struct seq_enc
}
else //w/o setter
{
//CODEC_TRACE("%c{%s}", ie.is_set()?'+':'-', class_name<IE>());
CODEC_TRACE("%c{%s}", ie.is_set()?'+':'-', class_name<IE>());
if (AHasSetLength<IE> || ie.is_set())
{
med::encode(encoder, ie);
Expand Down
5 changes: 3 additions & 2 deletions med/set.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ struct set_dec
{
using mi = meta::produce_info_t<DECODER, IE>;
using tag_t = get_info_t<meta::list_first_t<mi>>;
CODEC_TRACE("%zu tag match%c for %s(%s)", size_t(get_tag(header)), (tag_t::match(get_tag(header))? '+':'-'), name<tag_t>(), name<IE>());
return tag_t::match( get_tag(header) );
}

Expand Down Expand Up @@ -226,7 +227,7 @@ struct set : detail::set_container<meta::typelist<IEs...>>
{
value<std::size_t> header;
header.set_encoded(sl::decode_tag<tag_t>(decoder));
CODEC_TRACE("tag=%#zX", std::size_t(get_tag(header)));
CODEC_TRACE("tag=%#zX mi=%s firstIE=%s tag_t=%s", std::size_t(get_tag(header)), class_name<mi>(), name<IE>(), name<tag_t>());
meta::for_if<ies_types>(sl::set_dec{}, this->m_ies, decoder, header, deps...);
}
}
Expand All @@ -238,7 +239,7 @@ struct set : detail::set_container<meta::typelist<IEs...>>
header_type header;
med::decode(decoder, header, deps...);
decoder(POP_STATE{}); //restore back for IE to decode itself (?TODO: better to copy instead)
CODEC_TRACE("tag=%#zX", std::size_t(get_tag(header)));
CODEC_TRACE("tag=%#zX hdr=%s", std::size_t(get_tag(header)), class_name<header_type>());
meta::for_if<ies_types>(sl::set_dec{}, this->m_ies, decoder, header, deps...);
}
}
Expand Down