summaryrefslogtreecommitdiff
path: root/lib/streamSupport.cpp
blob: 32c1fcea518add2afe8f40251fd34d451ed2a4c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "streamSupport.h"
#include "bitset.h"
#include "compileTimeFormatter.h"
#include "dbTypes.h"
#include <cstdint>
#include <string_view>
#include <type_traits>
struct timespec;
struct tm;

namespace std {
	std::ostream &
	operator<<(std::ostream & strm, const std::byte byt)
	{
		return AdHoc::scprintf<"%#02x">(strm, std::to_integer<uint8_t>(byt));
	}

	std::ostream &
	operator<<(std::ostream & s, const MARIADB_STRING & str)
	{
		return s << std::string_view(str.str, str.length);
	}

	std::ostream &
	operator<<(std::ostream & s, const tm & tm)
	{
		return AdHoc::scprintf<"%04d-%02d-%02d %02d:%02d:%02d">(
				s, tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
	}

	std::ostream &
	operator<<(std::ostream & s, const timespec & ts)
	{
		return AdHoc::scprintf<"%d.%09d">(s, ts.tv_sec, ts.tv_nsec);
	}

	std::ostream &
	operator<<(std::ostream & s, const MyGrate::Date & d)
	{
		return AdHoc::scprintf<"%04d-%02d-%02d">(s, d.year, d.month, d.day);
	}

	std::ostream &
	operator<<(std::ostream & s, const MyGrate::Time & t)
	{
		return AdHoc::scprintf<"%02d:%02d:%02d">(s, t.hour, t.minute, t.second);
	}

	std::ostream &
	operator<<(std::ostream & s, const MyGrate::DateTime & dt)
	{
		return AdHoc::scprintf<"%? %?">(s, (const MyGrate::Date)dt, (const MyGrate::Time)dt);
	}

	std::ostream &
	operator<<(std::ostream & s, const MyGrate::BitSet & bs)
	{
		return s << std::make_pair(bs.begin(), bs.end());
	}
}