22 #ifndef ReadingRegion_hxx
23 #define ReadingRegion_hxx
31 template<
class WritingRegion>
65 void SizeChanged(
const int & newSize);
67 ProperStream* mAttachedStream;
73 template<
class WritingRegion>
75 : mAttachedStream(0), mProducingRegion(0)
79 template<
class WritingRegion>
83 mProducingRegion->RemoveRegion( *
this );
86 template<
class WritingRegion>
89 mAttachedStream = &stream;
90 mAttachedStream->NewReadingRegionSize( *
this );
93 template<
class WritingRegion>
96 return *(mAttachedStream);
99 template<
class WritingRegion>
102 if(!mProducingRegion)
104 return ProducerRegion()->Pos() >= Pos()+Size();
107 template<
class WritingRegion>
110 CLAM_DEBUG_ASSERT( CanConsume(),
"ReadingRegion::Consume() - region can't consume" );
111 Pos( Pos() + Hop() );
112 mAttachedStream->ReaderHasAdvanced( *
this );
115 template<
class WritingRegion>
118 mProducingRegion = &writing;
120 Pos( writing.
Pos() );
124 template<
class WritingRegion>
127 CLAM_DEBUG_ASSERT( mAttachedStream,
"ReadingRegion operator[] - No attached stream" );
128 CLAM_DEBUG_ASSERT( 0 <= offset && offset < Size(),
"ReadingRegion operator[] - Index out of bounds" );
129 CLAM_DEBUG_ASSERT( CanConsume(),
"ReadingRegion operator[] - region can't consume" );
131 int physicalIndex = BeginDistance() + offset;
133 return mAttachedStream->operator[](physicalIndex);
136 template<
class WritingRegion>
139 return mProducingRegion;
142 template<
class WritingRegion>
145 mProducingRegion = 0;
149 template<
class WritingRegion>
155 template<
class WritingRegion>
161 template<
class WritingRegion>
165 mAttachedStream->NewReadingRegionSize(*
this);
170 #endif // __ReadingRegion_hxx__