Flutter Impeller
impeller::Allocation Class Reference

Describes an allocation on the heap. More...

#include <allocation.h>

Public Member Functions

 Allocation ()
 Constructs a new zero-sized allocation. More...
 
 ~Allocation ()
 Destroys the allocation. More...
 
uint8_t * GetBuffer () const
 Gets the pointer to the start of the allocation. More...
 
Bytes GetLength () const
 Gets the length of the allocation. More...
 
Bytes GetReservedLength () const
 Gets the reserved length of the allocation. Calls to truncate may be ignored till the length exceeds the reserved length. More...
 
bool Truncate (Bytes length, bool npot=true)
 Resize the underlying allocation to at least given number of bytes. More...
 

Static Public Member Functions

static uint32_t NextPowerOfTwoSize (uint32_t x)
 Gets the next power of two size. More...
 

Detailed Description

Describes an allocation on the heap.

        Managing allocations through this utility makes it harder to
        miss allocation failures.

Definition at line 22 of file allocation.h.

Constructor & Destructor Documentation

◆ Allocation()

impeller::Allocation::Allocation ( )
default

Constructs a new zero-sized allocation.

◆ ~Allocation()

impeller::Allocation::~Allocation ( )

Destroys the allocation.

Definition at line 16 of file allocation.cc.

16  {
17  ::free(buffer_);
18 }

Member Function Documentation

◆ GetBuffer()

uint8_t * impeller::Allocation::GetBuffer ( ) const

Gets the pointer to the start of the allocation.

        This pointer is only valid till the next call to `Truncate`.
Returns
The pointer to the start of the allocation.

Definition at line 20 of file allocation.cc.

20  {
21  return buffer_;
22 }

Referenced by impeller::ProcTableGLES::GetProgramInfoLogString(), and impeller::interop::testing::TEST_P().

◆ GetLength()

Bytes impeller::Allocation::GetLength ( ) const

Gets the length of the allocation.

Returns
The length.

Definition at line 24 of file allocation.cc.

24  {
25  return length_;
26 }

◆ GetReservedLength()

Bytes impeller::Allocation::GetReservedLength ( ) const

Gets the reserved length of the allocation. Calls to truncate may be ignored till the length exceeds the reserved length.

Returns
The reserved length.

Definition at line 28 of file allocation.cc.

28  {
29  return reserved_;
30 }

◆ NextPowerOfTwoSize()

uint32_t impeller::Allocation::NextPowerOfTwoSize ( uint32_t  x)
static

Gets the next power of two size.

Parameters
[in]xThe size.
Returns
The next power of two of x.

Definition at line 41 of file allocation.cc.

41  {
42  if (x == 0) {
43  return 1;
44  }
45 
46  --x;
47 
48  x |= x >> 1;
49  x |= x >> 2;
50  x |= x >> 4;
51  x |= x >> 8;
52  x |= x >> 16;
53 
54  return x + 1;
55 }
int32_t x

References x.

◆ Truncate()

bool impeller::Allocation::Truncate ( Bytes  length,
bool  npot = true 
)

Resize the underlying allocation to at least given number of bytes.

In case of failure, false is returned and the underlying allocation remains unchanged.

Warning
Pointers to buffers obtained via previous calls to GetBuffer may become invalid at this point.
Parameters
[in]lengthThe length.
[in]npotWhether to round up the length to the next power of two.
Returns
If the underlying allocation was resized to the new size.

Definition at line 32 of file allocation.cc.

32  {
33  const auto reserved = npot ? ReserveNPOT(length) : Reserve(length);
34  if (!reserved) {
35  return false;
36  }
37  length_ = length;
38  return true;
39 }

Referenced by impeller::ProcTableGLES::GetProgramInfoLogString(), and impeller::interop::testing::TEST_P().


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