OpenCV
4.1.0
Open Source Computer Vision
|
Automatically Allocated Buffer Class. More...
#include <opencv2/core/utility.hpp>
Public Types | |
typedef _Tp | value_type |
Public Member Functions | |
AutoBuffer () | |
the default constructor | |
AutoBuffer (size_t _size) | |
constructor taking the real buffer size | |
AutoBuffer (const AutoBuffer< _Tp, fixed_size > &buf) | |
the copy constructor | |
~AutoBuffer () | |
destructor. calls deallocate() | |
void | allocate (size_t _size) |
allocates the new buffer of size _size. if the _size is small enough, stack-allocated buffer is used | |
_Tp * | data () |
returns pointer to the real buffer, stack-allocated or heap-allocated | |
const _Tp * | data () const |
returns read-only pointer to the real buffer, stack-allocated or heap-allocated | |
void | deallocate () |
deallocates the buffer if it was dynamically allocated | |
operator _Tp * () | |
returns pointer to the real buffer, stack-allocated or heap-allocated | |
operator const _Tp * () const | |
returns read-only pointer to the real buffer, stack-allocated or heap-allocated | |
AutoBuffer< _Tp, fixed_size > & | operator= (const AutoBuffer< _Tp, fixed_size > &buf) |
the assignment operator | |
void | resize (size_t _size) |
resizes the buffer and preserves the content | |
size_t | size () const |
returns the current buffer size | |
Protected Attributes | |
_Tp | buf [(fixed_size > 0)?fixed_size:1] |
pre-allocated buffer. At least 1 element to confirm C++ standard requirements | |
_Tp * | ptr |
pointer to the real buffer, can point to buf if the buffer is small enough | |
size_t | sz |
size of the real buffer | |
Automatically Allocated Buffer Class.
The class is used for temporary buffers in functions and methods. If a temporary buffer is usually small (a few K's of memory), but its size depends on the parameters, it makes sense to create a small fixed-size array on stack and use it if it's large enough. If the required buffer size is larger than the fixed size, another buffer of sufficient size is allocated dynamically and released after the processing. Therefore, in typical cases, when the buffer size is small, there is no overhead associated with malloc()/free(). At the same time, there is no limit on the size of processed data.
This is what AutoBuffer does. The template takes 2 parameters - type of the buffer elements and the number of stack-allocated elements. Here is how the class is used:
typedef _Tp cv::AutoBuffer< _Tp, fixed_size >::value_type |
cv::AutoBuffer< _Tp, fixed_size >::AutoBuffer | ( | ) |
the default constructor
|
explicit |
constructor taking the real buffer size
cv::AutoBuffer< _Tp, fixed_size >::AutoBuffer | ( | const AutoBuffer< _Tp, fixed_size > & | buf | ) |
the copy constructor
cv::AutoBuffer< _Tp, fixed_size >::~AutoBuffer | ( | ) |
destructor. calls deallocate()
void cv::AutoBuffer< _Tp, fixed_size >::allocate | ( | size_t | _size | ) |
allocates the new buffer of size _size. if the _size is small enough, stack-allocated buffer is used
|
inline |
returns pointer to the real buffer, stack-allocated or heap-allocated
|
inline |
returns read-only pointer to the real buffer, stack-allocated or heap-allocated
void cv::AutoBuffer< _Tp, fixed_size >::deallocate | ( | ) |
deallocates the buffer if it was dynamically allocated
|
inline |
returns pointer to the real buffer, stack-allocated or heap-allocated
|
inline |
returns read-only pointer to the real buffer, stack-allocated or heap-allocated
AutoBuffer<_Tp, fixed_size>& cv::AutoBuffer< _Tp, fixed_size >::operator= | ( | const AutoBuffer< _Tp, fixed_size > & | buf | ) |
the assignment operator
void cv::AutoBuffer< _Tp, fixed_size >::resize | ( | size_t | _size | ) |
resizes the buffer and preserves the content
size_t cv::AutoBuffer< _Tp, fixed_size >::size | ( | ) | const |
returns the current buffer size
|
protected |
pre-allocated buffer. At least 1 element to confirm C++ standard requirements
|
protected |
pointer to the real buffer, can point to buf if the buffer is small enough
|
protected |
size of the real buffer