globjects  2.0.0.4363356ae2ef
Strict OpenGL objects wrapper.
Loading...
Searching...
No Matches
LogMessageBuilder.h
Go to the documentation of this file.
1
2#pragma once
3
4
5#include <iosfwd>
6#include <string>
7#include <vector>
8#include <array>
9#include <memory>
10#include <iomanip>
11
12#include <globjects/globjects_api.h>
14
15
16namespace globjects
17{
18
19
20class AbstractLogHandler;
21
22
47class GLOBJECTS_API LogMessageBuilder
48{
49public:
50 // These types are unspecified by the C++ standard -> we need to query the compiler specific types
51 using PrecisionManipulator = decltype(std::setprecision(0));
52 using FillManipulator = decltype(std::setfill('0'));
53 using WidthManipulator = decltype(std::setw(0));
54
55public:
59
60 LogMessageBuilder & operator<<(const char * c);
61 LogMessageBuilder & operator<<(const std::string & str);
67 LogMessageBuilder & operator<<(long double d);
71 LogMessageBuilder & operator<<(unsigned long ul);
72 LogMessageBuilder & operator<<(unsigned char uc);
73 LogMessageBuilder & operator<<(const void * pointer);
74
75 // manipulators
76 LogMessageBuilder & operator<<(std::ostream & (*manipulator)(std::ostream&));
79
80#ifndef _MSC_VER
81 // in Windows PrecisionManipulator = WidthManipulator
83#endif
84
85 // pointers
86 template <typename T>
87 LogMessageBuilder & operator<<(const T * pointer);
88
89 // array types
90 template <typename T>
91 LogMessageBuilder & operator<<(const std::vector<T> & vector);
92 template <typename T>
93 LogMessageBuilder & operator<<(const std::vector<T *> & vector);
94
95 template <typename T>
96 LogMessageBuilder & operator<<(const std::vector<std::unique_ptr<T>> & vector);
97
98 template <typename T, std::size_t Count>
99 LogMessageBuilder & operator<<(const std::array<T, Count> & array);
100 template <typename T, std::size_t Count>
101 LogMessageBuilder & operator<<(const std::array<T *, Count> & array);
102 template <typename T, std::size_t Count>
103 LogMessageBuilder & operator<<(const std::array<std::unique_ptr<T>, Count> & array);
104
105protected:
108 std::shared_ptr<std::stringstream> m_stream;
109};
110
111
112} // namespace globjects
113
114
115#include <globjects/base/LogMessageBuilder.inl>
Abstract interface to handle LogMessages.
Definition: AbstractLogHandler.h:26
Builds a LogMessage from different kinds of primitive types.
Definition: LogMessageBuilder.h:48
LogMessageBuilder & operator<<(std::ostream &(*manipulator)(std::ostream &))
LogMessageBuilder & operator<<(const std::vector< T * > &vector)
LogMessageBuilder & operator<<(unsigned char uc)
decltype(std::setw(0)) WidthManipulator
Definition: LogMessageBuilder.h:53
LogMessageBuilder & operator<<(const std::string &str)
LogMessageBuilder & operator<<(FillManipulator manipulator)
LogMessageBuilder & operator<<(long l)
LogMessageBuilder & operator<<(double d)
LogMessageBuilder & operator<<(const std::array< std::unique_ptr< T >, Count > &array)
LogMessageBuilder(const LogMessageBuilder &builder)
LogMessageBuilder & operator<<(const std::vector< T > &vector)
LogMessageBuilder & operator<<(char c)
LogMessageBuilder & operator<<(long long l)
LogMessageBuilder & operator<<(float f)
LogMessageBuilder & operator<<(unsigned u)
LogMessageBuilder & operator<<(const char *c)
LogMessageBuilder & operator<<(const std::array< T, Count > &array)
LogMessageBuilder & operator<<(PrecisionManipulator manipulator)
LogMessageBuilder & operator<<(const void *pointer)
LogMessageBuilder & operator<<(int i)
LogMessageBuilder & operator<<(WidthManipulator manipulator)
LogMessageLevel m_level
Definition: LogMessageBuilder.h:106
LogMessageBuilder & operator<<(bool b)
decltype(std::setfill( '0')) FillManipulator
Definition: LogMessageBuilder.h:52
LogMessageBuilder & operator<<(const std::vector< std::unique_ptr< T > > &vector)
AbstractLogHandler * m_handler
Definition: LogMessageBuilder.h:107
decltype(std::setprecision(0)) PrecisionManipulator
Definition: LogMessageBuilder.h:51
LogMessageBuilder & operator<<(const T *pointer)
LogMessageBuilder & operator<<(const std::array< T *, Count > &array)
LogMessageBuilder & operator<<(unsigned long ul)
std::shared_ptr< std::stringstream > m_stream
Definition: LogMessageBuilder.h:108
LogMessageBuilder(LogMessageLevel level, AbstractLogHandler *handler)
LogMessageBuilder & operator<<(long double d)
Contains all the classes that wrap OpenGL functionality.
LogMessageLevel
Definition: LogMessageLevel.h:10