dynamic_msg_data(std::vector<uniform_value>&& data) : m_elements(std::move(data)), m_type_token(0xFFFFFFFF) { for (auto& e : m_elements) { add_to_type_token(e->ti->type_nr()); } }
dynamic_message_data::dynamic_message_data(const dynamic_message_data& other) : detail::message_data(other), type_token_(0xFFFFFFFF) { for (auto& e : other.elements_) { add_to_type_token(e->type().first); elements_.emplace_back(e->copy()); } }
dynamic_msg_data(const dynamic_msg_data& other) : detail::message_data(other), m_type_token(0xFFFFFFFF) { for (auto& e : other.m_elements) { add_to_type_token(e->ti->type_nr()); m_elements.push_back(e->copy()); } }
void concatenated_tuple::init() { m_type_token = make_type_token(); for (auto& m : m_data) { for (size_t i = 0; i < m->size(); ++i) { m_type_token = add_to_type_token(m_type_token, m->type_nr_at(i)); } } auto acc_size = [](size_t tmp, const cow_ptr& val) { return tmp + val->size(); }; m_size = std::accumulate(m_data.begin(), m_data.end(), size_t{0}, acc_size); }
concatenated_tuple::concatenated_tuple(std::initializer_list<cow_ptr> xs) { for (auto& x : xs) { if (x) { auto dptr = dynamic_cast<const concatenated_tuple*>(x.get()); if (dptr) { auto& vec = dptr->data_; data_.insert(data_.end(), vec.begin(), vec.end()); } else { data_.push_back(std::move(x)); } } } type_token_ = make_type_token(); for (auto& m : data_) { for (size_t i = 0; i < m->size(); ++i) { type_token_ = add_to_type_token(type_token_, m->type_nr_at(i)); } } auto acc_size = [](size_t tmp, const cow_ptr& val) { return tmp + val->size(); }; size_ = std::accumulate(data_.begin(), data_.end(), size_t{0}, acc_size); }
dynamic_message_data::dynamic_message_data(elements&& data) : elements_(std::move(data)), type_token_(0xFFFFFFFF) { for (auto& e : elements_) add_to_type_token(e->type().first); }
void dynamic_message_data::append(type_erased_value_ptr x) { add_to_type_token(x->type().first); elements_.emplace_back(std::move(x)); }
void append(uniform_value&& what) { add_to_type_token(what->ti->type_nr()); m_elements.push_back(std::move(what)); }