# litert::OwningBufferRef


`#include <litert_buffer_ref.h>`

A writable and owning buffer reference.

## Summary

This class can allocate new buffers internally and take ownership of existing ones. It does not support resizing.
Details Template Parameters `ByteT` The byte type of the buffer. `Allocator` The allocator to use for memory management.

### Inheritance

Inherits from: [litert::MutableBufferRef\< ByteT \>](https://developers.google.com/edge/api/litert/c/classlitert/1-1-mutable-buffer-ref)

| ### Constructors and Destructors ||
|---|---|
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1ae50c1589a94243c926a1c203868d7061()` Constructs a null buffer. ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1a2cfec5a57ba9e9764156548443339933(size_t size)` Initializes a new buffer reference and allocates it internally. ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1a8934f9966743991b08f6112d6dd32d48(ByteT *data, size_t size, size_t offset)` Takes ownership of a given buffer. ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1aad901109884c9945ca3c1d47de879dce(void *data, size_t size, size_t offset)` ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1a58714bb4de8de10b09ce83fd7ed1c4ef(absl::Span< ByteT > data)` ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1af7c8bda05de15949357b59ec0b06c8b3(const ByteT *data, size_t size)` Copies the given buffer. ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1ae8c9058d69403a9f62cb761e9e3bac11(absl::Span< const ByteT > data)` ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1a542ded87bc9aa0e598d3f41a013efdbc(absl::string_view data)` Copies data from a given string. ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1aa89d13f68d3fe533352cb3b399a459ca(const char *data)` Copies data from a given C-style string. ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1a75df70e29defb7d3d8263df8c715b75c(https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref && other)` ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1a42cbd9db6b5c602cde3b7e49e1ef10da(const https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref & other)` ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1a0ebdf122a4b735c0e1627565a76ff8b3()` ||

| ### Public types ||
|---|---|
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1ae58c8df6c0bde5ac98cdc1c7c162d7cb` | using `std::tuple< ByteT *const, const size_t, const size_t >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1a0eaef127c474b9e47efe04690ad59cb1` | using `std::tuple< ByteT *&, size_t &, size_t & >` |

| ### Public functions ||
|---|---|
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1abd1aa4a7f4ca3f4a3be7d6d8be220f88(const ByteT *buf, size_t end_offset, size_t start_offset)` | `void` Resets any existing data and copies in the given buffer. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1a40de6c4596f227c4ba2385bdca6484ea()` | `void` Drops the reference to any owned memory. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1a3e6095b3d778ca61dbd8ff902c759e16()` | `WeakTupleT` Returns weak references to buffer data. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1aab1374d1f4d797ef9a1a3bb48412e9d7()` | `TupleT` Returns the buffer details and drops references to them. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1ad43e6d5d764649ee0467f88538f47b16()` | `void` Frees any owned memory. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1ac7ce6d3903c3fa693bcf05a70ac2003a(https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref && other)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref &` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1ac534ffef91f109e0072fd5926a182154(const https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref & other)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref &` |

| ### Protected functions ||
|---|---|
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-owning-buffer-ref#classlitert_1_1_owning_buffer_ref_1afdfa36a9606d49245cf306416de04e42() const override` | `virtual absl::string_view` Returns the debug name of the class. |

## Public types

### TupleT

```
std::tuple< ByteT *const, const size_t, const size_t > TupleT
```

### WeakTupleT

```
std::tuple< ByteT *&, size_t &, size_t & > WeakTupleT
```

## Public functions

### Assign

```
void Assign(
  const ByteT *buf,
  size_t end_offset,
  size_t start_offset
)
```
Resets any existing data and copies in the given buffer.

### Drop

```
void Drop()
```
Drops the reference to any owned memory.

### GetWeak

```
WeakTupleT GetWeak()
```
Returns weak references to buffer data.

Takes ownership of any data that is swapped in.

### OwningBufferRef

```
 OwningBufferRef()
```
Constructs a null buffer.

### OwningBufferRef

```
 OwningBufferRef(
  size_t size
)
```
Initializes a new buffer reference and allocates it internally.

<br />

Details Parameters `size` The size of the buffer to allocate.

### OwningBufferRef

```
 OwningBufferRef(
  ByteT *data,
  size_t size,
  size_t offset
)
```
Takes ownership of a given buffer.

### OwningBufferRef

```
 OwningBufferRef(
  void *data,
  size_t size,
  size_t offset
)
```

### OwningBufferRef

```
 OwningBufferRef(
  absl::Span< ByteT > data
)
```

### OwningBufferRef

```
 OwningBufferRef(
  const ByteT *data,
  size_t size
)
```
Copies the given buffer.

### OwningBufferRef

```
 OwningBufferRef(
  absl::Span< const ByteT > data
)
```

### OwningBufferRef

```
 OwningBufferRef(
  absl::string_view data
)
```
Copies data from a given string.

### OwningBufferRef

```
 OwningBufferRef(
  const char *data
)
```
Copies data from a given C-style string.

### OwningBufferRef

```
 OwningBufferRef(
  OwningBufferRef && other
)
```

### OwningBufferRef

```
 OwningBufferRef(
  const OwningBufferRef & other
)
```

### Release

```
TupleT Release()
```
Returns the buffer details and drops references to them.

### Reset

```
void Reset()
```
Frees any owned memory.

### operator=

```
OwningBufferRef & operator=(
  OwningBufferRef && other
)
```

### operator=

```
OwningBufferRef & operator=(
  const OwningBufferRef & other
)
```

### \~OwningBufferRef

```
 ~OwningBufferRef() override
```

## Protected functions

### TypeName

```
virtual absl::string_view TypeName() const override
```
Returns the debug name of the class.