Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core3/src/util/OutputBuffer.h @ 1882

Last change on this file since 1882 was 1716, checked in by landauf, 16 years ago

Added new 'MultiType', replacing MultiTypePrimitive, MultiTypeString and MultiTypeMath. MultiType can hold all types MultiTypeMath was able to hold, namely all primitives, pointers, string and several math objects (vector2, 3 and 4, quaternion, colourvalue, radian, degree).

The new MultiType has a completely changed behaviour, I'll explain this on a wiki page somewhen.
But to say the most important things in a few words:
The MultiType has a fixed type. This type is determined by the first assigned value (by using setValue(value), operator=(value) or MultiType(value)). Every other value getting assigned later, will be converted to the first type. But you can change the type (setType<T>()), convert the value (convert<T>()) or force the type of a newly assigned value manually (setValue<T>(value)) by using template functions.

In contrast, the old MultiTypeMath changed it's internal type whenever a new type was assigned. So be aware of this important change.

At the moment I can't see any issues, but there might very well be several problems yet to discover, so further tests will be done.

  • Property svn:eol-style set to native
File size: 3.2 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#ifndef _OutputBuffer_H__
30#define _OutputBuffer_H__
31
32#include <list>
33#include <sstream>
34#include <iostream>
35
36#include "UtilPrereqs.h"
37
38namespace orxonox
39{
40    class _UtilExport OutputBufferListener
41    {
42        friend class OutputBuffer;
43
44        public:
45            virtual ~OutputBufferListener() {}
46
47        private:
48            virtual void outputChanged() = 0;
49    };
50
51    class _UtilExport OutputBuffer
52    {
53        public:
54            OutputBuffer() {}
55            ~OutputBuffer() {}
56
57            template <class T>
58            inline OutputBuffer& operator<<(T object)
59            {
60                this->stream_ << object;
61                this->callListeners();
62                return *this;
63            }
64
65            template <const OutputBuffer&>
66            inline OutputBuffer& operator<<(const OutputBuffer& object)
67            {
68                this->stream_ << object.stream_.rdbuf();
69                this->callListeners();
70                return *this;
71            }
72
73            OutputBuffer& operator<<(std::ostream& (*manipulator)(std::ostream&));
74            OutputBuffer& operator<<(std::ios& (*manipulator)(std::ios&));
75            OutputBuffer& operator<<(std::ios_base& (*manipulator)(std::ios_base&));
76
77            template <class T>
78            inline void add(T object)
79            {
80                this->stream_ << object;
81                this->callListeners();
82            }
83
84            template <class T>
85            inline void addLine(T object)
86            {
87                this->stream_ << object << std::endl;
88                this->callListeners();
89            }
90
91            inline void newline()
92            {
93                this->stream_ << std::endl;
94                this->callListeners();
95            }
96
97            inline void flush()
98            {
99                this->stream_.flush();
100            }
101
102            bool getLine(std::string* output);
103
104            void registerListener(OutputBufferListener* listener);
105            void unregisterListener(OutputBufferListener* listener);
106
107            inline std::stringstream& getStream()
108                { return this->stream_; }
109
110        private:
111            void callListeners();
112
113            std::stringstream stream_;
114            std::list<OutputBufferListener*> listeners_;
115    };
116}
117
118#endif /* _OutputBuffer_H__ */
Note: See TracBrowser for help on using the repository browser.