7#include <Atlas/Message/DecoderBase.h>
9#include <Atlas/Message/Element.h>
11#include <Atlas/Debug.h>
17static const bool debug_flag =
false;
19namespace Atlas {
namespace Message {
21DecoderBase::DecoderBase() : m_state(), m_maps(), m_lists(), m_names()
25void DecoderBase::streamBegin()
27 ATLAS_DEBUG(std::cout <<
"DecoderBase::streamBegin" << std::endl)
28 m_state.push(STATE_STREAM);
31void DecoderBase::streamMessage()
33 ATLAS_DEBUG(std::cout <<
"DecoderBase::streamMessage" << std::endl)
35 m_state.push(STATE_MAP);
38void DecoderBase::streamEnd()
40 ATLAS_DEBUG(std::cout <<
"DecoderBase::streamEnd" << std::endl)
41 assert(!m_state.empty());
45void DecoderBase::mapMapItem(std::string name)
47 ATLAS_DEBUG(std::cout <<
"DecoderBase::mapMapItem Map" << std::endl)
48 m_names.push(std::move(name));
50 m_state.push(STATE_MAP);
53void DecoderBase::mapListItem(std::string name)
55 ATLAS_DEBUG(std::cout <<
"DecoderBase::mapListItem List" << std::endl)
56 m_names.push(std::move(name));
58 m_state.push(STATE_LIST);
61void DecoderBase::mapIntItem(std::string name, std::int64_t i)
63 ATLAS_DEBUG(std::cout <<
"DecoderBase::mapIntItem" << std::endl)
64 assert(!m_maps.empty());
65 m_maps.top().emplace(std::move(name), i);
68void DecoderBase::mapFloatItem(std::string name,
double d)
70 ATLAS_DEBUG(std::cout <<
"DecoderBase::mapFloatItem" << std::endl)
71 assert(!m_maps.empty());
72 m_maps.top().emplace(std::move(name), d);
75void DecoderBase::mapStringItem(std::string name, std::string s)
77 ATLAS_DEBUG(std::cout <<
"DecoderBase::mapStringItem" << std::endl)
78 assert(!m_maps.empty());
79 m_maps.top().emplace(std::move(name), std::move(s));
82void DecoderBase::mapNoneItem(std::string name) {
83 ATLAS_DEBUG(std::cout <<
"DecoderBase::mapNoneItem" << std::endl)
84 assert(!m_maps.empty());
88void DecoderBase::mapEnd()
90 ATLAS_DEBUG(std::cout <<
"DecoderBase::mapEnd" << std::endl)
91 assert(!m_maps.empty());
92 assert(!m_state.empty());
94 switch (m_state.top()) {
97 MapType map = std::move(m_maps.top());
99 assert(!m_maps.empty());
100 assert(!m_names.empty());
101 m_maps.top().emplace(std::move(m_names.top()), std::move(map));
107 assert(!m_lists.empty());
108 m_lists.top().emplace_back(std::move(m_maps.top()));
114 messageArrived(std::move(m_maps.top()));
127void DecoderBase::listMapItem()
129 ATLAS_DEBUG(std::cout <<
"DecoderBase::listMapItem" << std::endl)
131 m_state.push(STATE_MAP);
134void DecoderBase::listListItem()
136 ATLAS_DEBUG(std::cout <<
"DecoderBase::listListItem" << std::endl)
138 m_state.push(STATE_LIST);
141void DecoderBase::listIntItem(std::int64_t i)
143 ATLAS_DEBUG(std::cout <<
"DecoderBase::listIntItem" << std::endl)
144 assert(!m_lists.empty());
145 m_lists.top().emplace_back(i);
148void DecoderBase::listFloatItem(
double d)
150 ATLAS_DEBUG(std::cout <<
"DecoderBase::listFloatItem" << std::endl)
151 m_lists.top().emplace_back(d);
154void DecoderBase::listStringItem(std::string s)
156 ATLAS_DEBUG(std::cout <<
"DecoderBase::listStringItem" << std::endl)
157 assert(!m_lists.empty());
158 m_lists.top().emplace_back(std::move(s));
161void DecoderBase::listNoneItem() {
162 ATLAS_DEBUG(std::cout <<
"DecoderBase::listNoneItem" << std::endl)
163 assert(!m_lists.empty());
167void DecoderBase::listEnd()
169 ATLAS_DEBUG(std::cout <<
"DecoderBase::listEnd" << std::endl)
170 assert(!m_lists.empty());
171 assert(!m_state.empty());
173 switch (m_state.top()) {
175 assert(!m_maps.empty());
176 assert(!m_names.empty());
177 m_maps.top().emplace(m_names.top(), std::move(m_lists.top()));
183 ListType list = std::move(m_lists.top());
185 assert(!m_lists.empty());
186 m_lists.top().emplace_back(std::move(list));
190 std::cerr <<
"DecoderBase::listEnd: Error" << std::endl;