Atlas 0.7.0
Networking protocol for the Worldforge system.
MEncoder.cpp
1// This file may be redistributed and modified only under the terms of
2// the GNU Lesser General Public License (See COPYING for details).
3// Copyright (C) 2000 Stefanus Du Toit
4
5// $Id$
6
7#include <Atlas/Message/MEncoder.h>
8
9#include <Atlas/Message/Element.h>
10
11namespace Atlas { namespace Message {
12
13Encoder::Encoder(Atlas::Bridge & b)
14 : EncoderBase(b)
15{
16}
17
18
19void Encoder::listElementItem(const Element& obj)
20{
21 switch (obj.getType()) {
22 case Element::TYPE_INT: m_b.listIntItem(obj.Int()); break;
23 case Element::TYPE_FLOAT: m_b.listFloatItem(obj.Float()); break;
24 case Element::TYPE_STRING: m_b.listStringItem(obj.String()); break;
25 case Element::TYPE_MAP: {
26 m_b.listMapItem();
27 for (auto& entry: obj.Map()) {
28 mapElementItem(entry.first, entry.second);
29 }
30 m_b.mapEnd();
31 }
32 break;
33 case Element::TYPE_LIST: {
34 m_b.listListItem();
35 for (auto& element: obj.List()) {
36 listElementItem(element);
37 }
38 m_b.listEnd();
39 }
40 break;
41 case Element::TYPE_NONE:
42 m_b.listNoneItem();
43 break;
44 default: break;
45 }
46}
47
48void Encoder::listElementMapItem(const MapType& obj)
49{
50 m_b.listMapItem();
51 for (auto& entry: obj) {
52 mapElementItem(entry.first, entry.second);
53 }
54 m_b.mapEnd();
55}
56
57void Encoder::listElementListItem(const ListType& obj)
58{
59 m_b.listListItem();
60 for (auto& element: obj) {
61 listElementItem(element);
62 }
63 m_b.listEnd();
64}
65
66void Encoder::mapElementItem(const std::string& name, const Element& obj)
67{
68 switch (obj.getType()) {
69 case Element::TYPE_INT: m_b.mapIntItem(name, obj.Int()); break;
70 case Element::TYPE_FLOAT: m_b.mapFloatItem(name, obj.Float()); break;
71 case Element::TYPE_STRING: m_b.mapStringItem(name, obj.String()); break;
72 case Element::TYPE_MAP: {
73 m_b.mapMapItem(name);
74 for (auto& entry: obj.Map()) {
75 mapElementItem(entry.first, entry.second);
76 }
77 m_b.mapEnd();
78 }
79 break;
80 case Element::TYPE_LIST: {
81 m_b.mapListItem(name);
82 for (auto& element: obj.List()) {
83 listElementItem(element);
84 }
85 m_b.listEnd();
86 }
87 break;
88 case Element::TYPE_NONE:
89 m_b.mapNoneItem(name);
90 break;
91 default:
92 break;
93 }
94}
95
96void Encoder::mapElementMapItem(const std::string& name, const MapType& obj)
97{
98 m_b.mapMapItem(name);
99 for (auto& entry: obj) {
100 mapElementItem(entry.first, entry.second);
101 }
102 m_b.mapEnd();
103}
104
105void Encoder::mapElementListItem(const std::string& name, const ListType& obj)
106{
107 m_b.mapListItem(name);
108 for (auto& element: obj) {
109 listElementItem(element);
110 }
111 m_b.listEnd();
112}
113
114void Encoder::streamMessageElement(const MapType& obj)
115{
116 m_b.streamMessage();
117 for (auto& entry: obj) {
118 mapElementItem(entry.first, entry.second);
119 }
120 m_b.mapEnd();
121}
122
123} } // namespace Atlas::Message
Definition: Bridge.h:20