text_stream.hpp 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. /**
  2. *
  3. * @file text_stream.hpp
  4. * @author zxw
  5. * Copyright 2024, yjrobotics. All rights reserved.
  6. *
  7. * robotics
  8. *
  9. */
  10. #pragma once
  11. //stl
  12. #include <iostream>
  13. #include <sstream>
  14. //robotis
  15. #include "datetime.hpp"
  16. #include "json.hpp"
  17. namespace robotics {
  18. namespace v3 {
  19. /**
  20. * @brief
  21. */
  22. class text_stream {
  23. public:
  24. /**
  25. * @brief char
  26. * @param value
  27. * @return
  28. */
  29. text_stream& operator <<(char value) {
  30. ss_ << value;
  31. return *this;
  32. }
  33. /**
  34. * @brief
  35. * @param value
  36. * @return
  37. */
  38. text_stream& operator<<(const char* value) {
  39. ss_ << value;
  40. return *this;
  41. }
  42. /**
  43. * @brief
  44. * @param value
  45. * @return
  46. */
  47. text_stream& operator<<(char* value) {
  48. ss_ << value;
  49. return *this;
  50. }
  51. /**
  52. * @brief string
  53. * @param value
  54. * @return
  55. */
  56. text_stream& operator <<(std::string const& value) {
  57. ss_ << value;
  58. return *this;
  59. }
  60. /**
  61. * @brief string_view
  62. * @param value
  63. * @return
  64. */
  65. text_stream& operator <<(std::string_view value) {
  66. ss_ << value;
  67. return *this;
  68. }
  69. /**
  70. * @brief int
  71. * @param value
  72. * @return
  73. */
  74. text_stream& operator <<(int value) {
  75. ss_ << value;
  76. return *this;
  77. }
  78. /**
  79. * @brief unsigned int
  80. * @param value
  81. * @return
  82. */
  83. text_stream& operator <<(unsigned int value) {
  84. ss_ << value;
  85. return *this;
  86. }
  87. /**
  88. * @brief
  89. * @param value
  90. * @return
  91. */
  92. text_stream& operator <<(bool value) {
  93. ss_ << (value ? "true" : "false");
  94. return *this;
  95. }
  96. /**
  97. * @brief
  98. * @param value
  99. * @return
  100. */
  101. text_stream& operator <<(datetime value) {
  102. ss_ << value.to_string();
  103. return *this;
  104. }
  105. /**
  106. * @brief long
  107. * @param value
  108. * @return
  109. */
  110. text_stream& operator <<(long value) {
  111. ss_ << value;
  112. return *this;
  113. }
  114. /**
  115. * @brief unsigned long
  116. * @param value
  117. * @return
  118. */
  119. text_stream& operator <<(unsigned long value) {
  120. ss_ << value;
  121. return *this;
  122. }
  123. /**
  124. * @brief long long
  125. * @param value
  126. * @return
  127. */
  128. text_stream& operator <<(long long value) {
  129. ss_ << value;
  130. return *this;
  131. }
  132. /**
  133. * @brief double
  134. * @param value
  135. * @return
  136. */
  137. text_stream& operator <<(double value) {
  138. ss_ << value;
  139. return *this;
  140. }
  141. /**
  142. * @brief
  143. * @param value
  144. * @return
  145. */
  146. text_stream& operator <<(float value) {
  147. ss_ << value;
  148. return *this;
  149. }
  150. /**
  151. * @brief
  152. * @param value
  153. * @return
  154. */
  155. text_stream& operator <<(std::exception const& value) {
  156. ss_ << value.what();
  157. return *this;
  158. }
  159. /**
  160. * @brief
  161. * @param value
  162. * @return
  163. */
  164. text_stream& operator <<(std::size_t const& value) {
  165. ss_ << value;
  166. return *this;
  167. }
  168. /**
  169. * @brief
  170. * @param value
  171. * @return
  172. */
  173. template<typename _Type>
  174. text_stream& operator <<(_Type const& value) {
  175. ss_ << json_convert::serialize(value);
  176. return *this;
  177. }
  178. //list
  179. /**
  180. * @brief
  181. * @param value
  182. * @return
  183. */
  184. text_stream& operator <<(std::vector<char> const& values) {
  185. ss_ << "(";
  186. for (size_t i = 0; i < values.size(); ++i) {
  187. ss_ << values[i];
  188. if (i + 1 != values.size()) {
  189. ss_ << ",";
  190. }
  191. }
  192. ss_ << ")";
  193. return *this;
  194. }
  195. /**
  196. * @brief
  197. * @param value
  198. * @return
  199. */
  200. text_stream& operator <<(std::vector<std::string> const& values) {
  201. ss_ << "(";
  202. for (size_t i = 0; i < values.size(); ++i) {
  203. ss_ << values[i];
  204. if (i + 1 != values.size()) {
  205. ss_ << ",";
  206. }
  207. }
  208. ss_ << ")";
  209. return *this;
  210. }
  211. /**
  212. * @brief
  213. * @param value
  214. * @return
  215. */
  216. text_stream& operator <<(std::vector<int> const& values) {
  217. ss_ << "(";
  218. for (size_t i = 0; i < values.size(); ++i) {
  219. ss_ << values[i];
  220. if (i + 1 != values.size()) {
  221. ss_ << ",";
  222. }
  223. }
  224. ss_ << ")";
  225. return *this;
  226. }
  227. /**
  228. * @brief
  229. * @param value
  230. * @return
  231. */
  232. text_stream& operator <<(std::vector<unsigned int> const& values) {
  233. ss_ << "(";
  234. for (size_t i = 0; i < values.size(); ++i) {
  235. ss_ << values[i];
  236. if (i + 1 != values.size()) {
  237. ss_ << ",";
  238. }
  239. }
  240. ss_ << ")";
  241. return *this;
  242. }
  243. /**
  244. * @brief
  245. * @param value
  246. * @return
  247. */
  248. text_stream& operator <<(std::vector<bool> const& values) {
  249. ss_ << "(";
  250. for (size_t i = 0; i < values.size(); ++i) {
  251. ss_ << values[i] ? "true" : "false";
  252. if (i + 1 != values.size()) {
  253. ss_ << ",";
  254. }
  255. }
  256. ss_ << ")";
  257. return *this;
  258. }
  259. /**
  260. * @brief
  261. * @param value
  262. * @return
  263. */
  264. text_stream& operator <<(std::vector<datetime> values) {
  265. ss_ << "(";
  266. for (size_t i = 0; i < values.size(); ++i) {
  267. ss_ << values[i].to_string();
  268. if (i + 1 != values.size()) {
  269. ss_ << ",";
  270. }
  271. }
  272. ss_ << ")";
  273. return *this;
  274. }
  275. /**
  276. * @brief
  277. * @param value
  278. * @return
  279. */
  280. text_stream& operator <<(std::vector<long> const& values) {
  281. ss_ << "(";
  282. for (size_t i = 0; i < values.size(); ++i) {
  283. ss_ << values[i];
  284. if (i + 1 != values.size()) {
  285. ss_ << ",";
  286. }
  287. }
  288. ss_ << ")";
  289. return *this;
  290. }
  291. /**
  292. * @brief
  293. * @param value
  294. * @return
  295. */
  296. text_stream& operator <<(std::vector<unsigned long> const& values) {
  297. ss_ << "(";
  298. for (size_t i = 0; i < values.size(); ++i) {
  299. ss_ << values[i];
  300. if (i + 1 != values.size()) {
  301. ss_ << ",";
  302. }
  303. }
  304. ss_ << ")";
  305. return *this;
  306. }
  307. /**
  308. * @brief
  309. * @param value
  310. * @return
  311. */
  312. text_stream& operator <<(std::vector<long long> const& values) {
  313. ss_ << "(";
  314. for (size_t i = 0; i < values.size(); ++i) {
  315. ss_ << values[i];
  316. if (i + 1 != values.size()) {
  317. ss_ << ",";
  318. }
  319. }
  320. ss_ << ")";
  321. return *this;
  322. }
  323. /**
  324. * @brief
  325. * @param value
  326. * @return
  327. */
  328. text_stream& operator <<(std::vector<double> const& values) {
  329. ss_ << "(";
  330. for (size_t i = 0; i < values.size(); ++i) {
  331. ss_ << values[i];
  332. if (i + 1 != values.size()) {
  333. ss_ << ",";
  334. }
  335. }
  336. ss_ << ")";
  337. return *this;
  338. }
  339. /**
  340. * @brief
  341. * @param value
  342. * @return
  343. */
  344. text_stream& operator <<(std::vector<float> const& values) {
  345. ss_ << "(";
  346. for (size_t i = 0; i < values.size(); ++i) {
  347. ss_ << values[i];
  348. if (i + 1 != values.size()) {
  349. ss_ << ",";
  350. }
  351. }
  352. ss_ << ")";
  353. return *this;
  354. }
  355. /**
  356. * @brief
  357. * @return
  358. */
  359. std::string str() {
  360. return ss_.str();
  361. }
  362. /**
  363. * @brief
  364. */
  365. operator std::string() {
  366. return str();
  367. }
  368. private:
  369. //
  370. std::stringstream ss_;
  371. };
  372. }
  373. }