quickfix_ruby_ud 2.0.7-aarch64-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. checksums.yaml +7 -0
  2. data/ext/quickfix/Acceptor.cpp +257 -0
  3. data/ext/quickfix/Acceptor.h +127 -0
  4. data/ext/quickfix/Allocator.h +9 -0
  5. data/ext/quickfix/Application.h +137 -0
  6. data/ext/quickfix/DOMDocument.h +70 -0
  7. data/ext/quickfix/DataDictionary.cpp +679 -0
  8. data/ext/quickfix/DataDictionary.h +607 -0
  9. data/ext/quickfix/DataDictionaryProvider.cpp +66 -0
  10. data/ext/quickfix/DataDictionaryProvider.h +67 -0
  11. data/ext/quickfix/DatabaseConnectionID.h +98 -0
  12. data/ext/quickfix/DatabaseConnectionPool.h +84 -0
  13. data/ext/quickfix/Dictionary.cpp +157 -0
  14. data/ext/quickfix/Dictionary.h +89 -0
  15. data/ext/quickfix/Event.h +89 -0
  16. data/ext/quickfix/Except.h +39 -0
  17. data/ext/quickfix/Exceptions.h +257 -0
  18. data/ext/quickfix/Field.h +654 -0
  19. data/ext/quickfix/FieldConvertors.cpp +86 -0
  20. data/ext/quickfix/FieldConvertors.h +800 -0
  21. data/ext/quickfix/FieldMap.cpp +254 -0
  22. data/ext/quickfix/FieldMap.h +327 -0
  23. data/ext/quickfix/FieldNumbers.h +44 -0
  24. data/ext/quickfix/FieldTypes.cpp +62 -0
  25. data/ext/quickfix/FieldTypes.h +817 -0
  26. data/ext/quickfix/Fields.h +30 -0
  27. data/ext/quickfix/FileLog.cpp +176 -0
  28. data/ext/quickfix/FileLog.h +110 -0
  29. data/ext/quickfix/FileStore.cpp +369 -0
  30. data/ext/quickfix/FileStore.h +131 -0
  31. data/ext/quickfix/FixCommonFields.h +13 -0
  32. data/ext/quickfix/FixFieldNumbers.h +6132 -0
  33. data/ext/quickfix/FixFields.h +6133 -0
  34. data/ext/quickfix/FixValues.h +5790 -0
  35. data/ext/quickfix/Group.cpp +44 -0
  36. data/ext/quickfix/Group.h +78 -0
  37. data/ext/quickfix/HostDetailsProvider.cpp +79 -0
  38. data/ext/quickfix/HostDetailsProvider.h +44 -0
  39. data/ext/quickfix/HtmlBuilder.h +178 -0
  40. data/ext/quickfix/HttpConnection.cpp +914 -0
  41. data/ext/quickfix/HttpConnection.h +74 -0
  42. data/ext/quickfix/HttpMessage.cpp +229 -0
  43. data/ext/quickfix/HttpMessage.h +112 -0
  44. data/ext/quickfix/HttpParser.cpp +49 -0
  45. data/ext/quickfix/HttpParser.h +49 -0
  46. data/ext/quickfix/HttpServer.cpp +152 -0
  47. data/ext/quickfix/HttpServer.h +76 -0
  48. data/ext/quickfix/Initiator.cpp +310 -0
  49. data/ext/quickfix/Initiator.h +151 -0
  50. data/ext/quickfix/Log.cpp +71 -0
  51. data/ext/quickfix/Log.h +254 -0
  52. data/ext/quickfix/Message.cpp +617 -0
  53. data/ext/quickfix/Message.h +419 -0
  54. data/ext/quickfix/MessageCracker.h +171 -0
  55. data/ext/quickfix/MessageSorters.cpp +101 -0
  56. data/ext/quickfix/MessageSorters.h +185 -0
  57. data/ext/quickfix/MessageStore.cpp +182 -0
  58. data/ext/quickfix/MessageStore.h +164 -0
  59. data/ext/quickfix/Mutex.h +120 -0
  60. data/ext/quickfix/MySQLConnection.h +187 -0
  61. data/ext/quickfix/MySQLLog.cpp +262 -0
  62. data/ext/quickfix/MySQLLog.h +158 -0
  63. data/ext/quickfix/MySQLStore.cpp +323 -0
  64. data/ext/quickfix/MySQLStore.h +161 -0
  65. data/ext/quickfix/MySQLStubs.h +203 -0
  66. data/ext/quickfix/NullStore.cpp +40 -0
  67. data/ext/quickfix/NullStore.h +89 -0
  68. data/ext/quickfix/OdbcConnection.h +241 -0
  69. data/ext/quickfix/OdbcLog.cpp +230 -0
  70. data/ext/quickfix/OdbcLog.h +109 -0
  71. data/ext/quickfix/OdbcStore.cpp +313 -0
  72. data/ext/quickfix/OdbcStore.h +124 -0
  73. data/ext/quickfix/PUGIXML_DOMDocument.cpp +112 -0
  74. data/ext/quickfix/PUGIXML_DOMDocument.h +81 -0
  75. data/ext/quickfix/Parser.cpp +111 -0
  76. data/ext/quickfix/Parser.h +50 -0
  77. data/ext/quickfix/PostgreSQLConnection.h +163 -0
  78. data/ext/quickfix/PostgreSQLLog.cpp +263 -0
  79. data/ext/quickfix/PostgreSQLLog.h +157 -0
  80. data/ext/quickfix/PostgreSQLStore.cpp +327 -0
  81. data/ext/quickfix/PostgreSQLStore.h +160 -0
  82. data/ext/quickfix/PostgreSQLStubs.h +203 -0
  83. data/ext/quickfix/Queue.h +66 -0
  84. data/ext/quickfix/QuickfixRuby.cpp +131900 -0
  85. data/ext/quickfix/QuickfixRuby.h +56 -0
  86. data/ext/quickfix/Responder.h +41 -0
  87. data/ext/quickfix/SSLSocketAcceptor.cpp +409 -0
  88. data/ext/quickfix/SSLSocketAcceptor.h +186 -0
  89. data/ext/quickfix/SSLSocketConnection.cpp +434 -0
  90. data/ext/quickfix/SSLSocketConnection.h +221 -0
  91. data/ext/quickfix/SSLSocketInitiator.cpp +558 -0
  92. data/ext/quickfix/SSLSocketInitiator.h +203 -0
  93. data/ext/quickfix/SSLStubs.h +129 -0
  94. data/ext/quickfix/Session.cpp +1437 -0
  95. data/ext/quickfix/Session.h +343 -0
  96. data/ext/quickfix/SessionFactory.cpp +314 -0
  97. data/ext/quickfix/SessionFactory.h +84 -0
  98. data/ext/quickfix/SessionID.h +136 -0
  99. data/ext/quickfix/SessionSettings.cpp +165 -0
  100. data/ext/quickfix/SessionSettings.h +283 -0
  101. data/ext/quickfix/SessionState.h +260 -0
  102. data/ext/quickfix/Settings.cpp +160 -0
  103. data/ext/quickfix/Settings.h +56 -0
  104. data/ext/quickfix/SharedArray.h +274 -0
  105. data/ext/quickfix/SocketAcceptor.cpp +216 -0
  106. data/ext/quickfix/SocketAcceptor.h +77 -0
  107. data/ext/quickfix/SocketConnection.cpp +256 -0
  108. data/ext/quickfix/SocketConnection.h +102 -0
  109. data/ext/quickfix/SocketConnector.cpp +112 -0
  110. data/ext/quickfix/SocketConnector.h +76 -0
  111. data/ext/quickfix/SocketInitiator.cpp +241 -0
  112. data/ext/quickfix/SocketInitiator.h +76 -0
  113. data/ext/quickfix/SocketMonitor.h +26 -0
  114. data/ext/quickfix/SocketMonitor_UNIX.cpp +238 -0
  115. data/ext/quickfix/SocketMonitor_UNIX.h +101 -0
  116. data/ext/quickfix/SocketMonitor_WIN32.cpp +248 -0
  117. data/ext/quickfix/SocketMonitor_WIN32.h +99 -0
  118. data/ext/quickfix/SocketServer.cpp +163 -0
  119. data/ext/quickfix/SocketServer.h +100 -0
  120. data/ext/quickfix/ThreadedSSLSocketAcceptor.cpp +436 -0
  121. data/ext/quickfix/ThreadedSSLSocketAcceptor.h +209 -0
  122. data/ext/quickfix/ThreadedSSLSocketConnection.cpp +364 -0
  123. data/ext/quickfix/ThreadedSSLSocketConnection.h +191 -0
  124. data/ext/quickfix/ThreadedSSLSocketInitiator.cpp +434 -0
  125. data/ext/quickfix/ThreadedSSLSocketInitiator.h +193 -0
  126. data/ext/quickfix/ThreadedSocketAcceptor.cpp +242 -0
  127. data/ext/quickfix/ThreadedSocketAcceptor.h +95 -0
  128. data/ext/quickfix/ThreadedSocketConnection.cpp +227 -0
  129. data/ext/quickfix/ThreadedSocketConnection.h +89 -0
  130. data/ext/quickfix/ThreadedSocketInitiator.cpp +238 -0
  131. data/ext/quickfix/ThreadedSocketInitiator.h +78 -0
  132. data/ext/quickfix/TimeRange.cpp +227 -0
  133. data/ext/quickfix/TimeRange.h +215 -0
  134. data/ext/quickfix/Utility.cpp +639 -0
  135. data/ext/quickfix/Utility.h +255 -0
  136. data/ext/quickfix/UtilitySSL.cpp +1612 -0
  137. data/ext/quickfix/UtilitySSL.h +274 -0
  138. data/ext/quickfix/Values.h +63 -0
  139. data/ext/quickfix/config-all.h +10 -0
  140. data/ext/quickfix/config.h +10 -0
  141. data/ext/quickfix/config_unix.h +178 -0
  142. data/ext/quickfix/config_windows.h +0 -0
  143. data/ext/quickfix/dirent_windows.h +838 -0
  144. data/ext/quickfix/double-conversion/bignum-dtoa.cc +641 -0
  145. data/ext/quickfix/double-conversion/bignum-dtoa.h +84 -0
  146. data/ext/quickfix/double-conversion/bignum.cc +766 -0
  147. data/ext/quickfix/double-conversion/bignum.h +144 -0
  148. data/ext/quickfix/double-conversion/cached-powers.cc +176 -0
  149. data/ext/quickfix/double-conversion/cached-powers.h +64 -0
  150. data/ext/quickfix/double-conversion/diy-fp.cc +57 -0
  151. data/ext/quickfix/double-conversion/diy-fp.h +118 -0
  152. data/ext/quickfix/double-conversion/double-conversion.cc +994 -0
  153. data/ext/quickfix/double-conversion/double-conversion.h +543 -0
  154. data/ext/quickfix/double-conversion/fast-dtoa.cc +665 -0
  155. data/ext/quickfix/double-conversion/fast-dtoa.h +88 -0
  156. data/ext/quickfix/double-conversion/fixed-dtoa.cc +404 -0
  157. data/ext/quickfix/double-conversion/fixed-dtoa.h +56 -0
  158. data/ext/quickfix/double-conversion/ieee.h +402 -0
  159. data/ext/quickfix/double-conversion/strtod.cc +557 -0
  160. data/ext/quickfix/double-conversion/strtod.h +45 -0
  161. data/ext/quickfix/double-conversion/utils.h +374 -0
  162. data/ext/quickfix/extconf.rb +76 -0
  163. data/ext/quickfix/index.h +37 -0
  164. data/ext/quickfix/pugiconfig.hpp +77 -0
  165. data/ext/quickfix/pugixml.cpp +13237 -0
  166. data/ext/quickfix/pugixml.hpp +1516 -0
  167. data/ext/quickfix/scope_guard.hpp +215 -0
  168. data/ext/quickfix/stdint_msvc.h +254 -0
  169. data/ext/quickfix/strptime.h +7 -0
  170. data/lib/2.4/quickfix.so +0 -0
  171. data/lib/2.5/quickfix.so +0 -0
  172. data/lib/2.6/quickfix.so +0 -0
  173. data/lib/2.7/quickfix.so +0 -0
  174. data/lib/3.0/quickfix.so +0 -0
  175. data/lib/3.1/quickfix.so +0 -0
  176. data/lib/3.2/quickfix.so +0 -0
  177. data/lib/3.3/quickfix.so +0 -0
  178. data/lib/3.4/quickfix.so +0 -0
  179. data/lib/quickfix40.rb +274 -0
  180. data/lib/quickfix41.rb +351 -0
  181. data/lib/quickfix42.rb +1184 -0
  182. data/lib/quickfix43.rb +3504 -0
  183. data/lib/quickfix44.rb +14040 -0
  184. data/lib/quickfix50.rb +20051 -0
  185. data/lib/quickfix50sp1.rb +23596 -0
  186. data/lib/quickfix50sp2.rb +412444 -0
  187. data/lib/quickfix_fields.rb +79393 -0
  188. data/lib/quickfix_ruby.rb +82 -0
  189. data/lib/quickfixt11.rb +65 -0
  190. data/spec/FIX40.xml +862 -0
  191. data/spec/FIX41.xml +1282 -0
  192. data/spec/FIX42.xml +2743 -0
  193. data/spec/FIX43.xml +4230 -0
  194. data/spec/FIX44.xml +6600 -0
  195. data/spec/FIX50.xml +8142 -0
  196. data/spec/FIX50SP1.xml +9506 -0
  197. data/spec/FIX50SP2.xml +26069 -0
  198. data/spec/FIXT11.xml +252 -0
  199. data/test/DataDictionaryTestCase.rb +268 -0
  200. data/test/DictionaryTestCase.rb +112 -0
  201. data/test/FieldBaseTestCase.rb +24 -0
  202. data/test/MessageStoreTestCase.rb +19 -0
  203. data/test/MessageTestCase.rb +368 -0
  204. data/test/SessionSettingsTestCase.rb +41 -0
  205. metadata +247 -0
@@ -0,0 +1,44 @@
1
+ /****************************************************************************
2
+ ** Copyright (c) 2001-2014
3
+ **
4
+ ** This file is part of the QuickFIX FIX Engine
5
+ **
6
+ ** This file may be distributed under the terms of the quickfixengine.org
7
+ ** license as defined by quickfixengine.org and appearing in the file
8
+ ** LICENSE included in the packaging of this file.
9
+ **
10
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
11
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
12
+ **
13
+ ** See http://www.quickfixengine.org/LICENSE for licensing information.
14
+ **
15
+ ** Contact ask@quickfixengine.org if any conditions of this licensing are
16
+ ** not clear to you.
17
+ **
18
+ ****************************************************************************/
19
+
20
+ #ifdef _MSC_VER
21
+ #include "stdafx.h"
22
+ #else
23
+ #include "config.h"
24
+ #endif
25
+
26
+ #include "Group.h"
27
+
28
+ namespace FIX {
29
+ void Group::addGroup(const Group &group) { FieldMap::addGroup(group.field(), group); }
30
+
31
+ void Group::replaceGroup(unsigned num, const FIX::Group &group) { FieldMap::replaceGroup(num, group.field(), group); }
32
+
33
+ Group &Group::getGroup(unsigned num, Group &group) const EXCEPT(FieldNotFound) {
34
+ return static_cast<Group &>(FieldMap::getGroup(num, group.field(), group));
35
+ }
36
+
37
+ void Group::removeGroup(unsigned num, const Group &group) { FieldMap::removeGroup(num, group.field()); }
38
+
39
+ void Group::removeGroup(const Group &group) { FieldMap::removeGroup(group.field()); }
40
+
41
+ bool Group::hasGroup(unsigned num, const Group &group) { return FieldMap::hasGroup(num, group.field()); }
42
+
43
+ bool Group::hasGroup(const Group &group) { return FieldMap::hasGroup(group.field()); }
44
+ } // namespace FIX
@@ -0,0 +1,78 @@
1
+ /* -*- C++ -*- */
2
+
3
+ /****************************************************************************
4
+ ** Copyright (c) 2001-2014
5
+ **
6
+ ** This file is part of the QuickFIX FIX Engine
7
+ **
8
+ ** This file may be distributed under the terms of the quickfixengine.org
9
+ ** license as defined by quickfixengine.org and appearing in the file
10
+ ** LICENSE included in the packaging of this file.
11
+ **
12
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
13
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
14
+ **
15
+ ** See http://www.quickfixengine.org/LICENSE for licensing information.
16
+ **
17
+ ** Contact ask@quickfixengine.org if any conditions of this licensing are
18
+ ** not clear to you.
19
+ **
20
+ ****************************************************************************/
21
+
22
+ #ifndef FIX_GROUP
23
+ #define FIX_GROUP
24
+
25
+ #ifdef _MSC_VER
26
+ #pragma warning(disable : 4786)
27
+ #endif
28
+
29
+ #include "FieldMap.h"
30
+ #include "Fields.h"
31
+ #include <vector>
32
+
33
+ namespace FIX {
34
+ /**
35
+ * Base class for all %FIX repeating groups.
36
+ *
37
+ * A group consists of a count field, deliminator, and a sorting order.
38
+ */
39
+ class Group : public FieldMap {
40
+ public:
41
+ Group(int field, int delim)
42
+ : FieldMap(message_order(delim, 0)),
43
+ m_field(field),
44
+ m_delim(delim) {}
45
+
46
+ Group(int field, int delim, const int order[])
47
+ : FieldMap(order),
48
+ m_field(field),
49
+ m_delim(delim) {}
50
+
51
+ Group(int field, int delim, const message_order &order)
52
+ : FieldMap(order),
53
+ m_field(field),
54
+ m_delim(delim) {}
55
+
56
+ Group(const Group &copy)
57
+ : FieldMap(copy),
58
+ m_field(copy.m_field),
59
+ m_delim(copy.m_delim) {}
60
+
61
+ int field() const { return m_field; }
62
+ int delim() const { return m_delim; }
63
+
64
+ void addGroup(const Group &group);
65
+ void replaceGroup(unsigned num, const Group &group);
66
+ Group &getGroup(unsigned num, Group &group) const EXCEPT(FieldNotFound);
67
+ void removeGroup(unsigned num, const Group &group);
68
+ void removeGroup(const Group &group);
69
+ bool hasGroup(const Group &group);
70
+ bool hasGroup(unsigned num, const Group &group);
71
+
72
+ private:
73
+ int m_field;
74
+ int m_delim;
75
+ };
76
+ } // namespace FIX
77
+
78
+ #endif // FIX_GROUP
@@ -0,0 +1,79 @@
1
+ #include "HostDetailsProvider.h"
2
+ #include "SessionSettings.h"
3
+
4
+ const std::string FIX::HostDetailsProvider::HOST_SELECTION_POLICY_PRIORITY = "PRIORITY";
5
+
6
+ FIX::HostDetails FIX::HostDetailsProvider::getHost(const SessionID &s, const Dictionary &d) {
7
+ std::string hostSelectionPolicy;
8
+ if (d.has(HOST_SELECTION_POLICY)) {
9
+ hostSelectionPolicy = d.getString(HOST_SELECTION_POLICY);
10
+ }
11
+
12
+ auto sessionIt = m_sessionToLastConnectionAttempt.find(s);
13
+
14
+ time_t now = getTime();
15
+
16
+ if (sessionIt == m_sessionToLastConnectionAttempt.end()) {
17
+ auto result = m_sessionToLastConnectionAttempt.emplace(s, LastConnectionAttempt{0, now});
18
+ sessionIt = result.first;
19
+ } else {
20
+ if (hostSelectionPolicy == HOST_SELECTION_POLICY_PRIORITY) {
21
+ int startOverInterval = 120;
22
+ if (d.has(HOST_SELECTION_POLICY_PRIORITY_START_OVER_INTERVAL)) {
23
+ startOverInterval = d.getInt(HOST_SELECTION_POLICY_PRIORITY_START_OVER_INTERVAL);
24
+ }
25
+
26
+ if ((now - sessionIt->second.time >= startOverInterval)) {
27
+ sessionIt->second.hostNumber = 0;
28
+ sessionIt->second.time = now;
29
+ } else {
30
+ ++sessionIt->second.hostNumber;
31
+ sessionIt->second.time = now;
32
+ }
33
+ } else {
34
+ ++sessionIt->second.hostNumber;
35
+ sessionIt->second.time = now;
36
+ }
37
+ }
38
+
39
+ HostDetails details;
40
+ bool isDefinedInSettings = populateHostDetails(sessionIt->second.hostNumber, d, details);
41
+
42
+ if (!isDefinedInSettings) {
43
+ populateHostDetails(0, d, details);
44
+ sessionIt->second.hostNumber = 0;
45
+ }
46
+
47
+ return details;
48
+ }
49
+
50
+ bool FIX::HostDetailsProvider::populateHostDetails(int n, const Dictionary &d, HostDetails &out) {
51
+ std::string host = SOCKET_CONNECT_HOST;
52
+ std::string port = SOCKET_CONNECT_PORT;
53
+ std::string sourceHost = SOCKET_CONNECT_SOURCE_HOST;
54
+ std::string sourcePort = SOCKET_CONNECT_SOURCE_PORT;
55
+
56
+ if (n > 0) {
57
+ std::string suffix = std::to_string(n);
58
+ host += suffix;
59
+ port += suffix;
60
+ sourceHost += suffix;
61
+ sourcePort += suffix;
62
+ }
63
+
64
+ if (d.has(host) && d.has(port)) {
65
+ out.address = d.getString(host);
66
+ out.port = (short)d.getInt(port);
67
+
68
+ if (d.has(sourceHost)) {
69
+ out.sourceAddress = d.getString(sourceHost);
70
+ }
71
+
72
+ if (d.has(sourcePort)) {
73
+ out.sourcePort = (short)d.getInt(sourcePort);
74
+ }
75
+
76
+ return true;
77
+ }
78
+ return false;
79
+ }
@@ -0,0 +1,44 @@
1
+ #ifndef FIX_HOSTDETAILSPROVIDER_H
2
+ #define FIX_HOSTDETAILSPROVIDER_H
3
+
4
+ #include <functional>
5
+ #include <map>
6
+ #include <optional>
7
+ #include <string>
8
+ #include <time.h>
9
+
10
+ namespace FIX {
11
+ class Dictionary;
12
+ class SessionID;
13
+
14
+ struct HostDetails {
15
+ std::string address;
16
+ short port{0};
17
+ std::string sourceAddress;
18
+ short sourcePort{0};
19
+ };
20
+
21
+ class HostDetailsProvider {
22
+ public:
23
+ static const std::string HOST_SELECTION_POLICY_PRIORITY;
24
+
25
+ HostDetails getHost(const SessionID &s, const Dictionary &d);
26
+
27
+ std::function<time_t()> getTime = []() {
28
+ time_t now;
29
+ ::time(&now);
30
+ return now;
31
+ };
32
+
33
+ private:
34
+ bool populateHostDetails(int n, const Dictionary &d, HostDetails &out);
35
+
36
+ struct LastConnectionAttempt {
37
+ int hostNumber;
38
+ time_t time;
39
+ };
40
+ std::map<SessionID, LastConnectionAttempt> m_sessionToLastConnectionAttempt;
41
+ };
42
+ } // namespace FIX
43
+
44
+ #endif
@@ -0,0 +1,178 @@
1
+ /* -*- C++ -*- */
2
+
3
+ /****************************************************************************
4
+ ** Copyright (c) 2001-2014
5
+ **
6
+ ** This file is part of the QuickFIX FIX Engine
7
+ **
8
+ ** This file may be distributed under the terms of the quickfixengine.org
9
+ ** license as defined by quickfixengine.org and appearing in the file
10
+ ** LICENSE included in the packaging of this file.
11
+ **
12
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
13
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
14
+ **
15
+ ** See http://www.quickfixengine.org/LICENSE for licensing information.
16
+ **
17
+ ** Contact ask@quickfixengine.org if any conditions of this licensing are
18
+ ** not clear to you.
19
+ **
20
+ ****************************************************************************/
21
+
22
+ #ifndef HTML_BUILDER_H
23
+ #define HTML_BUILDER_H
24
+
25
+ #ifdef _MSC_VER
26
+ #pragma warning(disable : 4503 4355 4786 4290)
27
+ #endif
28
+
29
+ #include <sstream>
30
+
31
+ namespace HTML {
32
+ class TAG {
33
+ public:
34
+ TAG(const std::string &tag, std::ostream &stream)
35
+ : m_tag(tag),
36
+ m_stream(stream) {
37
+ m_stream << "<" << m_tag;
38
+ }
39
+
40
+ virtual ~TAG() {
41
+ m_stream << m_value.str();
42
+ m_stream << "</" << m_tag << ">";
43
+ }
44
+
45
+ TAG &text() {
46
+ m_stream << ">";
47
+ return *this;
48
+ }
49
+ template <typename T> TAG &text(const T &value) {
50
+ m_value << value;
51
+ text();
52
+ return *this;
53
+ }
54
+
55
+ private:
56
+ std::string m_tag;
57
+ std::stringstream m_value;
58
+
59
+ protected:
60
+ std::ostream &m_stream;
61
+ };
62
+
63
+ class SPECIAL {
64
+ public:
65
+ SPECIAL(const std::string &value, std::ostream &stream) { stream << "&" << value << ";"; }
66
+ };
67
+
68
+ class A : public TAG {
69
+ public:
70
+ A(std::ostream &stream)
71
+ : TAG("A", stream) {}
72
+
73
+ A &href(const std::string &value) {
74
+ m_stream << " href='" << value << "'";
75
+ return *this;
76
+ }
77
+ };
78
+
79
+ class BODY : public TAG {
80
+ public:
81
+ BODY(std::ostream &stream)
82
+ : TAG("BODY", stream) {}
83
+ };
84
+
85
+ class BR : public TAG {
86
+ public:
87
+ BR(std::ostream &stream)
88
+ : TAG("BR", stream) {}
89
+ };
90
+
91
+ class CAPTION : public TAG {
92
+ public:
93
+ CAPTION(std::ostream &stream)
94
+ : TAG("CAPTION", stream) {}
95
+ };
96
+
97
+ class CENTER : public TAG {
98
+ public:
99
+ CENTER(std::ostream &stream)
100
+ : TAG("CENTER", stream) {}
101
+ };
102
+
103
+ class EM : public TAG {
104
+ public:
105
+ EM(std::ostream &stream)
106
+ : TAG("EM", stream) {}
107
+ };
108
+
109
+ class H1 : public TAG {
110
+ public:
111
+ H1(std::ostream &stream)
112
+ : TAG("H1", stream) {}
113
+ };
114
+
115
+ class H2 : public TAG {
116
+ public:
117
+ H2(std::ostream &stream)
118
+ : TAG("H2", stream) {}
119
+ };
120
+
121
+ class HEAD : public TAG {
122
+ public:
123
+ HEAD(std::ostream &stream)
124
+ : TAG("HEAD", stream) {}
125
+ };
126
+
127
+ class HR : public TAG {
128
+ public:
129
+ HR(std::ostream &stream)
130
+ : TAG("HR", stream) {}
131
+ };
132
+
133
+ const char *NBSP = "&nbsp;";
134
+
135
+ class TABLE : public TAG {
136
+ public:
137
+ TABLE(std::ostream &stream)
138
+ : TAG("TABLE", stream) {}
139
+
140
+ TABLE &border(int value) {
141
+ m_stream << " border='" << value << "'";
142
+ return *this;
143
+ }
144
+ TABLE &cellspacing(int value) {
145
+ m_stream << " cellspacing='" << value << "'";
146
+ return *this;
147
+ }
148
+ TABLE &width(int value) {
149
+ m_stream << " width='" << value << "%'";
150
+ return *this;
151
+ }
152
+ };
153
+
154
+ class TD : public TAG {
155
+ public:
156
+ TD(std::ostream &stream)
157
+ : TAG("TD", stream) {}
158
+
159
+ TD &align(const std::string &value) {
160
+ m_stream << " align='" << value << "'";
161
+ return *this;
162
+ }
163
+ };
164
+
165
+ class TITLE : public TAG {
166
+ public:
167
+ TITLE(std::ostream &stream)
168
+ : TAG("TITLE", stream) {}
169
+ };
170
+
171
+ class TR : public TAG {
172
+ public:
173
+ TR(std::ostream &stream)
174
+ : TAG("TR", stream) {}
175
+ };
176
+ } // namespace HTML
177
+
178
+ #endif