Grok  7.6.6
Public Member Functions | Private Member Functions | Private Attributes | List of all members
grk::SparseBuffer< LBW, LBH > Class Template Reference

#include <SparseBuffer.h>

Inheritance diagram for grk::SparseBuffer< LBW, LBH >:
grk::ISparseBuffer

Public Member Functions

 SparseBuffer (grk_rect_u32 bds)
 Creates a new sparse buffer. More...
 
 SparseBuffer (uint32_t width, uint32_t height)
 Creates a new sparse buffer. More...
 
 ~SparseBuffer ()
 Frees a sparse buffer. More...
 
bool read (uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, int32_t *dest, const uint32_t dest_col_stride, const uint32_t dest_line_stride, bool forgiving)
 Read the content of a rectangular window of the sparse buffer into a user buffer. More...
 
bool read (grk_rect_u32 window, int32_t *dest, const uint32_t dest_col_stride, const uint32_t dest_line_stride, bool forgiving)
 Read the content of a rectangular window of the sparse buffer into a user buffer. More...
 
bool write (uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, const int32_t *src, const uint32_t src_col_stride, const uint32_t src_line_stride, bool forgiving)
 Write the content of a rectangular window into the sparse buffer from a user buffer. More...
 
bool alloc (grk_rect_u32 window)
 Allocate all blocks for a rectangular window into the sparse buffer from a user buffer. More...
 
- Public Member Functions inherited from grk::ISparseBuffer
virtual ~ISparseBuffer ()
 

Private Member Functions

bool alloc (uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1)
 
SparseBlockgetBlock (uint32_t block_x, uint32_t block_y)
 
bool is_window_valid (uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1)
 Returns whether window bounds are valid (non empty and within array bounds) More...
 
bool read_or_write (uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, int32_t *buf, const uint32_t buf_col_stride, const uint32_t buf_line_stride, bool forgiving, bool is_read_op)
 

Private Attributes

const uint32_t block_width
 
const uint32_t block_height
 
SparseBlock ** data_blocks
 
grk_rect_u32 bounds
 
grk_rect_u32 grid_bounds
 

Constructor & Destructor Documentation

◆ SparseBuffer() [1/2]

template<uint32_t LBW, uint32_t LBH>
grk::SparseBuffer< LBW, LBH >::SparseBuffer ( grk_rect_u32  bds)
inline

◆ SparseBuffer() [2/2]

template<uint32_t LBW, uint32_t LBH>
grk::SparseBuffer< LBW, LBH >::SparseBuffer ( uint32_t  width,
uint32_t  height 
)
inline

Creates a new sparse buffer.

Parameters
widthtotal width of the array.
heighttotal height of the array
Returns
a new sparse buffer instance, or NULL in case of failure.

◆ ~SparseBuffer()

template<uint32_t LBW, uint32_t LBH>
grk::SparseBuffer< LBW, LBH >::~SparseBuffer ( )
inline

Member Function Documentation

◆ alloc() [1/2]

template<uint32_t LBW, uint32_t LBH>
bool grk::SparseBuffer< LBW, LBH >::alloc ( grk_rect_u32  window)
inlinevirtual

Allocate all blocks for a rectangular window into the sparse buffer from a user buffer.

Blocks intersecting the window are allocated

Parameters
windowwindow to write into the sparse buffer.
Returns
true in case of success.

Implements grk::ISparseBuffer.

References grk::grk_rectangle< T >::x0, grk::grk_rectangle< T >::x1, grk::grk_rectangle< T >::y0, and grk::grk_rectangle< T >::y1.

◆ alloc() [2/2]

template<uint32_t LBW, uint32_t LBH>
bool grk::SparseBuffer< LBW, LBH >::alloc ( uint32_t  x0,
uint32_t  y0,
uint32_t  x1,
uint32_t  y1 
)
inlineprivate

◆ getBlock()

template<uint32_t LBW, uint32_t LBH>
SparseBlock* grk::SparseBuffer< LBW, LBH >::getBlock ( uint32_t  block_x,
uint32_t  block_y 
)
inlineprivate

◆ is_window_valid()

template<uint32_t LBW, uint32_t LBH>
bool grk::SparseBuffer< LBW, LBH >::is_window_valid ( uint32_t  x0,
uint32_t  y0,
uint32_t  x1,
uint32_t  y1 
)
inlineprivate

Returns whether window bounds are valid (non empty and within array bounds)

Parameters
x0left x coordinate of the window.
y0top x coordinate of the window.
x1right x coordinate (not included) of the window. Must be greater than x0.
y1bottom y coordinate (not included) of the window. Must be greater than y0.
Returns
true or false.

References grk::SparseBuffer< LBW, LBH >::bounds, grk::grk_rectangle< T >::height(), and grk::grk_rectangle< T >::width().

Referenced by grk::SparseBuffer< LBW, LBH >::alloc(), and grk::SparseBuffer< LBW, LBH >::read_or_write().

◆ read() [1/2]

template<uint32_t LBW, uint32_t LBH>
bool grk::SparseBuffer< LBW, LBH >::read ( grk_rect_u32  window,
int32_t *  dest,
const uint32_t  dest_col_stride,
const uint32_t  dest_line_stride,
bool  forgiving 
)
inlinevirtual

Read the content of a rectangular window of the sparse buffer into a user buffer.

Windows not written with write() are read as 0.

Parameters
windowwindow to read in the sparse buffer.
destuser buffer to fill. Must be at least sizeof(int32) * ( (y1 - y0 - 1) * dest_line_stride + (x1 - x0 - 1) * dest_col_stride + 1) bytes large.
dest_col_stridespacing (in elements, not in bytes) in x dimension between consecutive elements of the user buffer.
dest_line_stridespacing (in elements, not in bytes) in y dimension between consecutive elements of the user buffer.
forgivingif set to TRUE and the window is invalid, true will still be returned.
Returns
true in case of success.

Implements grk::ISparseBuffer.

References grk::SparseBuffer< LBW, LBH >::read(), grk::grk_rectangle< T >::x0, grk::grk_rectangle< T >::x1, grk::grk_rectangle< T >::y0, and grk::grk_rectangle< T >::y1.

◆ read() [2/2]

template<uint32_t LBW, uint32_t LBH>
bool grk::SparseBuffer< LBW, LBH >::read ( uint32_t  x0,
uint32_t  y0,
uint32_t  x1,
uint32_t  y1,
int32_t *  dest,
const uint32_t  dest_col_stride,
const uint32_t  dest_line_stride,
bool  forgiving 
)
inlinevirtual

Read the content of a rectangular window of the sparse buffer into a user buffer.

Windows not written with write() are read as 0.

Parameters
x0left x coordinate of the window to read in the sparse buffer.
y0top x coordinate of the window to read in the sparse buffer.
x1right x coordinate (not included) of the window to read in the sparse buffer. Must be greater than x0.
y1bottom y coordinate (not included) of the window to read in the sparse buffer. Must be greater than y0.
destuser buffer to fill. Must be at least sizeof(int32) * ( (y1 - y0 - 1) * dest_line_stride + (x1 - x0 - 1) * dest_col_stride + 1) bytes large.
dest_col_stridespacing (in elements, not in bytes) in x dimension between consecutive elements of the user buffer.
dest_line_stridespacing (in elements, not in bytes) in y dimension between consecutive elements of the user buffer.
forgivingif set to TRUE and the window is invalid, true will still be returned.
Returns
true in case of success.

Implements grk::ISparseBuffer.

References grk::SparseBuffer< LBW, LBH >::read_or_write().

Referenced by grk::SparseBuffer< LBW, LBH >::read().

◆ read_or_write()

template<uint32_t LBW, uint32_t LBH>
bool grk::SparseBuffer< LBW, LBH >::read_or_write ( uint32_t  x0,
uint32_t  y0,
uint32_t  x1,
uint32_t  y1,
int32_t *  buf,
const uint32_t  buf_col_stride,
const uint32_t  buf_line_stride,
bool  forgiving,
bool  is_read_op 
)
inlineprivate

◆ write()

template<uint32_t LBW, uint32_t LBH>
bool grk::SparseBuffer< LBW, LBH >::write ( uint32_t  x0,
uint32_t  y0,
uint32_t  x1,
uint32_t  y1,
const int32_t *  src,
const uint32_t  src_col_stride,
const uint32_t  src_line_stride,
bool  forgiving 
)
inlinevirtual

Write the content of a rectangular window into the sparse buffer from a user buffer.

Blocks intersecting the window are allocated, if not already done.

Parameters
x0left x coordinate of the window to write into the sparse buffer.
y0top x coordinate of the window to write into the sparse buffer.
x1right x coordinate (not included) of the window to write into the sparse buffer. Must be greater than x0.
y1bottom y coordinate (not included) of the window to write into the sparse buffer. Must be greater than y0.
srcuser buffer to fill. Must be at least sizeof(int32) * ( (y1 - y0 - 1) * src_line_stride + (x1 - x0 - 1) * src_col_stride + 1) bytes large.
src_col_stridespacing (in elements, not in bytes) in x dimension between consecutive elements of the user buffer.
src_line_stridespacing (in elements, not in bytes) in y dimension between consecutive elements of the user buffer.
forgivingif set to TRUE and the window is invalid, true will still be returned.
Returns
true in case of success.

Implements grk::ISparseBuffer.

References grk::SparseBuffer< LBW, LBH >::read_or_write().

Member Data Documentation

◆ block_height

template<uint32_t LBW, uint32_t LBH>
const uint32_t grk::SparseBuffer< LBW, LBH >::block_height
private

◆ block_width

template<uint32_t LBW, uint32_t LBH>
const uint32_t grk::SparseBuffer< LBW, LBH >::block_width
private

◆ bounds

template<uint32_t LBW, uint32_t LBH>
grk_rect_u32 grk::SparseBuffer< LBW, LBH >::bounds
private

◆ data_blocks

template<uint32_t LBW, uint32_t LBH>
SparseBlock** grk::SparseBuffer< LBW, LBH >::data_blocks
private

◆ grid_bounds

template<uint32_t LBW, uint32_t LBH>
grk_rect_u32 grk::SparseBuffer< LBW, LBH >::grid_bounds
private

The documentation for this class was generated from the following file: