Merge with trunk r37757.
[blender.git] / intern / audaspace / intern / AUD_Buffer.h
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * Copyright 2009-2011 Jörg Hermann Müller
7  *
8  * This file is part of AudaSpace.
9  *
10  * Audaspace is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * AudaSpace is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Audaspace; if not, write to the Free Software Foundation,
22  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23  *
24  * ***** END GPL LICENSE BLOCK *****
25  */
26
27 /** \file audaspace/intern/AUD_Buffer.h
28  *  \ingroup audaspaceintern
29  */
30
31
32 #ifndef AUD_BUFFER
33 #define AUD_BUFFER
34
35 #include "AUD_Space.h"
36
37 /**
38  * This class is a simple buffer in RAM which is 16 Byte aligned and provides
39  * resize functionality.
40  */
41 class AUD_Buffer
42 {
43 private:
44         /// The size of the buffer in bytes.
45         int m_size;
46
47         /// The pointer to the buffer memory.
48         data_t* m_buffer;
49
50         // hide copy constructor and operator=
51         AUD_Buffer(const AUD_Buffer&);
52         AUD_Buffer& operator=(const AUD_Buffer&);
53
54 public:
55         /**
56          * Creates a new buffer.
57          * \param size The size of the buffer in bytes.
58          */
59         AUD_Buffer(int size = 0);
60
61         /**
62          * Destroys the buffer.
63          */
64         ~AUD_Buffer();
65
66         /**
67          * Returns the pointer to the buffer in memory.
68          */
69         sample_t* getBuffer() const;
70
71         /**
72          * Returns the size of the buffer in bytes.
73          */
74         int getSize() const;
75
76         /**
77          * Resizes the buffer.
78          * \param size The new size of the buffer, measured in bytes.
79          * \param keep Whether to keep the old data. If the new buffer is smaller,
80          *        the data at the end will be lost.
81          */
82         void resize(int size, bool keep = false);
83
84         /**
85          * Makes sure the buffer has a minimum size.
86          * If size is >= current size, nothing will happen.
87          * Otherwise the buffer is resized with keep as parameter.
88          * \param size The new minimum size of the buffer, measured in bytes.
89          * \param keep Whether to keep the old data. If the new buffer is smaller,
90          *        the data at the end will be lost.
91          */
92         void assureSize(int size, bool keep = false);
93 };
94
95 #endif //AUD_BUFFER