Google OR-Tools: ortools/base/container_logging.h Source File

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#ifndef ORTOOLS_BASE_CONTAINER_LOGGING_H_

35#define ORTOOLS_BASE_CONTAINER_LOGGING_H_

36

37#include <cstdint>

38#include <limits>

39#include <ostream>

40#include <sstream>

41#include <string>

42#include <type_traits>

43

44namespace gtl {

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

71

73 template <typename ElementT>

74 void Log(std::ostream& out, const ElementT& element) const {

75 out << element;

76 }

77 void LogEllipsis(std::ostream& out) const {

78 out << "...";

79 }

80};

81

88

95

102

103}

104

105

106

108 int64_t MaxElements() const { return std::numeric_limits<int64_t>::max(); }

109};

110

111

112

114 public:

115 explicit LogShortUpToN(int64_t max_elements) : max_elements_(max_elements) {}

116 int64_t MaxElements() const { return max_elements_; }

117

118 private:

119 int64_t max_elements_;

120};

121

122

123

127

128

129

130

131

132

133

135 int64_t MaxElements() const { return std::numeric_limits<int64_t>::max(); }

136};

137

138

139

141 public:

143 : max_elements_(max_elements) {}

144 int64_t MaxElements() const { return max_elements_; }

145

146 private:

147 int64_t max_elements_;

148};

149

150

151

155

156

157

162 int64_t MaxElements() const { return std::numeric_limits<int64_t>::max(); }

163};

164

165

167

168

169

170template <typename IteratorT, typename PolicyT>

172 IteratorT begin, IteratorT end,

173 const PolicyT& policy) {

174 policy.LogOpening(out);

175 for (int64_t i = 0; begin != end && i < policy.MaxElements(); ++i, ++begin) {

176 if (i == 0) {

177 policy.LogFirstSeparator(out);

178 } else {

179 policy.LogSeparator(out);

180 }

181 policy.Log(out, *begin);

182 }

183 if (begin != end) {

184 policy.LogSeparator(out);

185 policy.LogEllipsis(out);

186 }

187 policy.LogClosing(out);

188}

189

191

192

193

194

195

196

197

198template <typename IteratorT, typename PolicyT>

200 public:

201 RangeLogger(const IteratorT& begin, const IteratorT& end,

202 const PolicyT& policy)

203 : begin_(begin), end_(end), policy_(policy) {}

204

207 range.policy_);

208 return out;

209 }

210

211

212

213 std::string str() const {

214 std::stringstream ss;

215 ss << *this;

216 return ss.str();

217 }

218

219 private:

220 IteratorT begin_;

221 IteratorT end_;

222 PolicyT policy_;

223};

224

225template <typename E>

227 public:

229

231 using I = typename std::underlying_type<E>::type;

232 return out << static_cast<I>(v.e_);

233 }

234

235 private:

236 E e_;

237};

238

239}

240

241

242

243

244

245

246

247template <typename IteratorT, typename PolicyT>

249 const IteratorT& end,

250 const PolicyT& policy) {

252}

253

254

255

256

257

258

259

260template <typename IteratorT>

262 const IteratorT& end) {

264}

265

266

267

268

269

270

271

272template <typename ContainerT, typename PolicyT>

273auto LogContainer(const ContainerT& container, const PolicyT& policy)

274 -> decltype(gtl::LogRange(container.begin(), container.end(), policy)) {

275 return gtl::LogRange(container.begin(), container.end(), policy);

276}

277

278

279

280

281

282

283

284template <typename ContainerT>

289

290

291

292

293

294template <typename E>

296 static_assert(std::is_enum<E>::value, "must be an enum");

298}

299

300}

301

302#endif

LogMultilineUpToN(int64_t max_elements)

Definition container_logging.h:142

int64_t MaxElements() const

Definition container_logging.h:144

int64_t MaxElements() const

Definition container_logging.h:116

LogShortUpToN(int64_t max_elements)

Definition container_logging.h:115

EnumLogger(E e)

Definition container_logging.h:228

friend std::ostream & operator<<(std::ostream &out, const EnumLogger &v)

Definition container_logging.h:230

friend std::ostream & operator<<(std::ostream &out, const RangeLogger &range)

Definition container_logging.h:205

RangeLogger(const IteratorT &begin, const IteratorT &end, const PolicyT &policy)

Definition container_logging.h:201

std::string str() const

Definition container_logging.h:213

auto LogContainer(const ContainerT &container, const PolicyT &policy) -> decltype(gtl::LogRange(container.begin(), container.end(), policy))

Definition container_logging.h:273

LogShortUpTo100 LogDefault

Definition container_logging.h:166

detail::EnumLogger< E > LogEnum(E e)

Definition container_logging.h:295

detail::RangeLogger< IteratorT, PolicyT > LogRange(const IteratorT &begin, const IteratorT &end, const PolicyT &policy)

Definition container_logging.h:248

void LogRangeToStream(std::ostream &out, IteratorT begin, IteratorT end, const PolicyT &policy)

Definition container_logging.h:171

int64_t MaxElements() const

Definition container_logging.h:159

int64_t MaxElements() const

Definition container_logging.h:162

LogMultilineUpTo100()

Definition container_logging.h:153

int64_t MaxElements() const

Definition container_logging.h:135

LogShortUpTo100()

Definition container_logging.h:125

int64_t MaxElements() const

Definition container_logging.h:108

void Log(std::ostream &out, const ElementT &element) const

Definition container_logging.h:74

void LogEllipsis(std::ostream &out) const

Definition container_logging.h:77

void LogOpening(std::ostream &out) const

Definition container_logging.h:97

void LogSeparator(std::ostream &out) const

Definition container_logging.h:100

void LogFirstSeparator(std::ostream &out) const

Definition container_logging.h:99

void LogClosing(std::ostream &out) const

Definition container_logging.h:98

void LogSeparator(std::ostream &out) const

Definition container_logging.h:93

void LogClosing(std::ostream &out) const

Definition container_logging.h:91

void LogOpening(std::ostream &out) const

Definition container_logging.h:90

void LogFirstSeparator(std::ostream &out) const

Definition container_logging.h:92

void LogFirstSeparator(std::ostream &out) const

Definition container_logging.h:85

void LogOpening(std::ostream &out) const

Definition container_logging.h:83

void LogClosing(std::ostream &out) const

Definition container_logging.h:84

void LogSeparator(std::ostream &out) const

Definition container_logging.h:86