1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
22 #define STREAMHELPER_HXX_HAD_NDEBUG
26 #if OSL_DEBUG_LEVEL == 0
31 #define Max( a, b ) (((a)>(b)) ? (a) : (b) )
32 #define Min( a, b ) (((a)<(b)) ? (a) : (b) )
36 class I_FIFO_OutOfBoundsException
:
40 class I_FIFO_OutOfMemoryException
:
49 virtual void write( const Sequence
<sal_Int8
> &) throw( I_FIFO_OutOfMemoryException
,
50 I_FIFO_OutOfBoundsException
)=0;
52 virtual void read( Sequence
<sal_Int8
> & , sal_Int32 nBytesToRead
)
53 throw( I_FIFO_OutOfBoundsException
)=0;
54 virtual void skip( sal_Int32 nBytesToSkip
)
55 throw( I_FIFO_OutOfBoundsException
)=0;
56 virtual sal_Int32
getSize() const throw( ) =0;
57 virtual void shrink() throw() = 0;
63 class IRingBuffer_OutOfBoundsException
:
67 class IRingBuffer_OutOfMemoryException
:
75 * overwrites data at given position. Size is automatically extended, when
76 * data is written beyond end.
80 virtual void writeAt( sal_Int32 nPos
, const Sequence
<sal_Int8
> &)
81 throw( IRingBuffer_OutOfMemoryException
,
82 IRingBuffer_OutOfBoundsException
)=0;
83 virtual void readAt( sal_Int32 nPos
, Sequence
<sal_Int8
> & , sal_Int32 nBytesToRead
) const
84 throw( IRingBuffer_OutOfBoundsException
)=0;
85 virtual sal_Int32
getSize() const throw( ) =0;
86 virtual void forgetFromStart( sal_Int32 nBytesToForget
) throw(IRingBuffer_OutOfBoundsException
)=0;
87 virtual void forgetFromEnd( sal_Int32 nBytesToForget
) throw(IRingBuffer_OutOfBoundsException
)=0;
88 virtual void shrink() throw() = 0;
89 virtual ~IRingBuffer() {};
98 virtual ~MemRingBuffer();
100 virtual void writeAt( sal_Int32 nPos
, const Sequence
<sal_Int8
> &)
101 throw( IRingBuffer_OutOfMemoryException
,
102 IRingBuffer_OutOfBoundsException
);
103 virtual void readAt( sal_Int32 nPos
, Sequence
<sal_Int8
> & , sal_Int32 nBytesToRead
) const
104 throw( IRingBuffer_OutOfBoundsException
);
105 virtual sal_Int32
getSize() const throw( );
106 virtual void forgetFromStart( sal_Int32 nBytesToForget
) throw(IRingBuffer_OutOfBoundsException
);
107 virtual void forgetFromEnd( sal_Int32 nBytesToForget
) throw(IRingBuffer_OutOfBoundsException
);
109 virtual void shrink() throw();
113 void resizeBuffer( sal_Int32 nMinSize
) throw( IRingBuffer_OutOfMemoryException
);
114 inline void checkInvariants()
116 assert( m_nBufferLen
>= 0 );
117 assert( m_nOccupiedBuffer
>= 0 );
118 assert( m_nOccupiedBuffer
<= m_nBufferLen
);
119 assert( m_nStart
>= 0 );
120 assert( 0 == m_nStart
|| m_nStart
< m_nBufferLen
);
124 sal_Int32 m_nBufferLen
;
126 sal_Int32 m_nOccupiedBuffer
;
132 private MemRingBuffer
135 virtual void write( const Sequence
<sal_Int8
> &) throw( I_FIFO_OutOfMemoryException
,
136 I_FIFO_OutOfBoundsException
);
137 virtual void read( Sequence
<sal_Int8
> & , sal_Int32 nBytesToRead
)
138 throw( I_FIFO_OutOfBoundsException
);
139 virtual void skip( sal_Int32 nBytesToSkip
) throw( I_FIFO_OutOfBoundsException
);
140 virtual sal_Int32
getSize() const throw( )
141 { return MemRingBuffer::getSize(); }
142 virtual void shrink() throw()
143 { MemRingBuffer::shrink(); }
147 // Restore NDEBUG state
148 #ifdef STREAMHELPER_HXX_HAD_NDEBUG
156 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */