summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2016-09-22 09:48:01 -0600
committerMike Buland <eichlan@xagasoft.com>2016-09-22 09:48:01 -0600
commitd44ece9babc5d70e1194a29a54b72dae1fe70ceb (patch)
tree6ca4f002e08f14845323c4097bcca592bb46f5f1 /src
parenta612205584558c52ae2fedd616d7eb735d5ba84a (diff)
downloadlibbu++-d44ece9babc5d70e1194a29a54b72dae1fe70ceb.tar.gz
libbu++-d44ece9babc5d70e1194a29a54b72dae1fe70ceb.tar.bz2
libbu++-d44ece9babc5d70e1194a29a54b72dae1fe70ceb.tar.xz
libbu++-d44ece9babc5d70e1194a29a54b72dae1fe70ceb.zip
Included the experimental TeeStream.
This allows you to write data to multiple streams simultaneously and easily. It's pretty much complete, but it feels like it could use more...features somehow.
Diffstat (limited to 'src')
-rw-r--r--src/unstable/teestream.cpp117
-rw-r--r--src/unstable/teestream.h65
2 files changed, 182 insertions, 0 deletions
diff --git a/src/unstable/teestream.cpp b/src/unstable/teestream.cpp
new file mode 100644
index 0000000..52802ef
--- /dev/null
+++ b/src/unstable/teestream.cpp
@@ -0,0 +1,117 @@
1/*
2 Bu::TeeStream::* Copyright (C) 2007-2014 Xagasoft, All rights reserved.
3 Bu::TeeStream::*
4 Bu::TeeStream::* This file is part of the libbu++ library and is released under the
5 Bu::TeeStream::* terms of the license contained in the file LICENSE.
6 Bu::TeeStream::*/
7
8#include "bu/teestream.h"
9
10Bu::TeeStream::TeeStream()
11{
12}
13
14Bu::TeeStream::~TeeStream()
15{
16}
17
18void Bu::TeeStream::addStream( Bu::Stream &rStream )
19{
20 lStream.append( StreamWrapper( rStream ) );
21}
22
23#define delegate \
24 for( StreamRefList::iterator i = lStream.begin(); i; i++ ) \
25 (*i).rStream
26
27void Bu::TeeStream::close()
28{
29 delegate.close();
30}
31
32Bu::size Bu::TeeStream::tell()
33{
34 return 0;
35}
36
37void Bu::TeeStream::seek( Bu::size )
38{
39}
40
41void Bu::TeeStream::setPos( Bu::size )
42{
43}
44
45void Bu::TeeStream::setPosEnd( Bu::size )
46{
47}
48
49bool Bu::TeeStream::isEos()
50{
51 return false;
52}
53
54bool Bu::TeeStream::isOpen()
55{
56 return true;
57}
58
59void Bu::TeeStream::flush()
60{
61 delegate.flush();
62}
63
64bool Bu::TeeStream::canRead()
65{
66 return false;
67}
68
69bool Bu::TeeStream::canWrite()
70{
71 return true;
72}
73
74bool Bu::TeeStream::isReadable()
75{
76 return false;
77}
78
79bool Bu::TeeStream::isWritable()
80{
81 return true;
82}
83
84bool Bu::TeeStream::isSeekable()
85{
86 return false;
87}
88
89bool Bu::TeeStream::isBlocking()
90{
91 return true;
92}
93
94void Bu::TeeStream::setBlocking( bool bBlocking )
95{
96 delegate.setBlocking( bBlocking );
97}
98
99void Bu::TeeStream::setSize( Bu::size )
100{
101}
102
103Bu::size Bu::TeeStream::getSize() const
104{
105 return 0;
106}
107
108Bu::size Bu::TeeStream::getBlockSize() const
109{
110 return 0;
111}
112
113Bu::String Bu::TeeStream::getLocation() const
114{
115 return "Invalid";
116}
117
diff --git a/src/unstable/teestream.h b/src/unstable/teestream.h
new file mode 100644
index 0000000..f7287f1
--- /dev/null
+++ b/src/unstable/teestream.h
@@ -0,0 +1,65 @@
1/*
2 * Copyright (C) 2007-2014 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libbu++ library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
8#ifndef BU_TEE_STREAM_H
9#define BU_TEE_STREAM_H
10
11#include "bu/filter.h"
12
13namespace Bu
14{
15 class TeeStream : public Bu::Stream
16 {
17 public:
18 TeeStream();
19 virtual ~TeeStream();
20
21 void addStream( Bu::Stream &rStream );
22
23 virtual void close();
24 virtual Bu::size tell();
25 virtual void seek( Bu::size offset );
26 virtual void setPos( Bu::size pos );
27 virtual void setPosEnd( Bu::size pos );
28 virtual bool isEos();
29 virtual bool isOpen();
30
31 virtual void flush();
32
33 virtual bool canRead();
34 virtual bool canWrite();
35
36 virtual bool isReadable();
37 virtual bool isWritable();
38 virtual bool isSeekable();
39
40 virtual bool isBlocking();
41 virtual void setBlocking( bool bBlocking=true );
42
43 /**
44 * Most filters won't re-implement this, it doesn't make a lot of sense
45 * for filters, in general.
46 */
47 virtual void setSize( Bu::size iSize );
48
49 virtual size getSize() const;
50 virtual size getBlockSize() const;
51 virtual Bu::String getLocation() const;
52
53 private:
54 class StreamWrapper
55 {
56 public:
57 StreamWrapper( Bu::Stream &r ) : rStream( r ) { }
58 Bu::Stream &rStream;
59 };
60 typedef Bu::List<StreamWrapper> StreamRefList;
61 StreamRefList lStream;
62 };
63}
64
65#endif