# [−][src]Struct smithay_client_toolkit::utils::MemPool

    pub struct MemPool { /* fields omitted */ }

A wrapper handling an SHM memory pool backed by a shared memory file

This wrapper handles for you the creation of the shared memory file and its synchronization with the protocol.

Mempool internally tracks the lifetime of all buffers created from it and to ensure that this buffer count is correct all buffers must be attached to a surface. Once a buffer is attached to a surface it must be immediately committed to that surface before another buffer is attached.

Mempool will also handle the destruction of buffers and as such the `destroy()` method should not be used on buffers created from Mempool.

Overwriting the contents of the memory pool before it is completely freed may cause graphical glitches due to the possible corruption of data while the compositor is reading it.

Mempool requires an implementation that will be called when the pool becomes free, this happens when all the pools buffers are released by the server.

## Methods

### `impl MemPool`[src]

#### `pub fn new<Impl>(shm: &Proxy<WlShm>, implementation: Impl) -> Result<MemPool> where
Impl: FnMut() + Send + 'static,` [src]

Create a new memory pool associated with given shm

#### `pub fn resize(&mut self, newsize: usize) -> Result<()>`[src]

Resize the memory pool

This affect the size as it is seen by the wayland server. Even if you extend the temporary file size by writing to it, you need to call this method otherwise the server won't see the new size.

Memory pools can only be extented, as such this method will do nothing if the requested new size is smaller than the current size.

This method allows you to ensure the underlying pool is large enough to hold what you want to write to it.

#### `pub fn buffer(
&self,
offset: i32,
width: i32,
height: i32,
stride: i32,
format: Format
) -> Proxy<WlBuffer>`[src]

Create a new buffer to this pool

The parameters are:

- `offset`: the offset (in bytes) from the beginning of the pool at which this buffer starts
- `width`: the width of this buffer (in pixels)
- `height`: the height of this buffer (in pixels)
- `stride`: distance (in bytes) between the beginning of a row and the next one
- `format`: the encoding format of the pixels. Using a format that was not advertised to the `wl_shm` global by the server is a protocol error and will terminate your connection

#### `pub fn mmap(&mut self) -> &mut MmapMut`[src]

Uses the memmap crate to map the underlying shared memory file

#### `pub fn is_used(&self) -> bool`[src]

Returns true if the pool contains buffers that are currently in use by the server otherwise it returns false

## Trait Implementations

### `impl Drop for MemPool`[src]

#### `fn drop(&mut self)`[src]

Executes the destructor for this type. Read more

### `impl Seek for MemPool`[src]

#### `fn seek(&mut self, pos: SeekFrom) -> Result<u64>`[src]

Seek to an offset, in bytes, in a stream. Read more

#### `fn stream_len(&mut self) -> Result<u64, Error>`[src]

🔬 This is a nightly-only experimental API. (`seek_convenience`)

Returns the length of this stream (in bytes). Read more

#### `fn stream_position(&mut self) -> Result<u64, Error>`[src]

🔬 This is a nightly-only experimental API. (`seek_convenience`)

Returns the current seek position from the start of the stream. Read more

### `impl Write for MemPool`[src]

#### `fn write(&mut self, buf: &[u8]) -> Result<usize>`[src]

Write a buffer into this writer, returning how many bytes were written. Read more

#### `fn flush(&mut self) -> Result<()>`[src]

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more

#### `fn write_vectored(&mut self, bufs: &[IoSlice]) -> Result<usize, Error>`1.36.0[src]

Like `write`, except that it writes from a slice of buffers. Read more

#### `fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>`1.0.0[src]

Attempts to write an entire buffer into this writer. Read more

#### `fn write_fmt(&mut self, fmt: Arguments) -> Result<(), Error>`1.0.0[src]

Writes a formatted string into this writer, returning any error encountered. Read more

#### `fn by_ref(&mut self) -> &mut Self` 1.0.0[src]

Creates a "by reference" adaptor for this instance of `Write`. Read more

## Auto Trait Implementations

### `impl Send for MemPool`

### `impl Unpin for MemPool`

### `impl Sync for MemPool`

### `impl !UnwindSafe for MemPool`

### `impl !RefUnwindSafe for MemPool`

## Blanket Implementations

### `impl<T, U> Into<U> for T where
U: From<T>,` [src]

#### `fn into(self) -> U`[src]

Performs the conversion.

### `impl<T> From<T> for T`[src]

#### `fn from(t: T) -> T`[src]

Performs the conversion.

### `impl<T, U> TryFrom<U> for T where
U: Into<T>,` [src]

#### `type Error = Infallible`

The type returned in the event of a conversion error.

#### `fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>`[src]

Performs the conversion.

### `impl<T, U> TryInto<U> for T where
U: TryFrom<T>,` [src]

#### `type Error = <U as TryFrom<T>>::Error`

The type returned in the event of a conversion error.

#### `fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>`[src]

Performs the conversion.

### `impl<T> BorrowMut<T> for T where
T: ?Sized,` [src]

#### `fn borrow_mut(&mut self) -> &mut T`[src]

Mutably borrows from an owned value. Read more

### `impl<T> Borrow<T> for T where
T: ?Sized,` [src]

#### `fn borrow(&self) -> &T`[src]

Immutably borrows from an owned value. Read more

### `impl<T> Any for T where
T: 'static + ?Sized,` [src]

#### `fn type_id(&self) -> TypeId`[src]

Gets the `TypeId` of `self`. Read more

### `impl<W> WriteBytesExt for W where
W: Write + ?Sized,` [src]

#### `fn write_u8(&mut self, n: u8) -> Result<(), Error>`[src]

Writes an unsigned 8 bit integer to the underlying writer. Read more

#### `fn write_i8(&mut self, n: i8) -> Result<(), Error>`[src]

Writes a signed 8 bit integer to the underlying writer. Read more

#### `fn write_u16<T>(&mut self, n: u16) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes an unsigned 16 bit integer to the underlying writer. Read more

#### `fn write_i16<T>(&mut self, n: i16) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes a signed 16 bit integer to the underlying writer. Read more

#### `fn write_u24<T>(&mut self, n: u32) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes an unsigned 24 bit integer to the underlying writer. Read more

#### `fn write_i24<T>(&mut self, n: i32) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes a signed 24 bit integer to the underlying writer. Read more

#### `fn write_u32<T>(&mut self, n: u32) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes an unsigned 32 bit integer to the underlying writer. Read more

#### `fn write_i32<T>(&mut self, n: i32) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes a signed 32 bit integer to the underlying writer. Read more

#### `fn write_u48<T>(&mut self, n: u64) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes an unsigned 48 bit integer to the underlying writer. Read more

#### `fn write_i48<T>(&mut self, n: i64) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes a signed 48 bit integer to the underlying writer. Read more

#### `fn write_u64<T>(&mut self, n: u64) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes an unsigned 64 bit integer to the underlying writer. Read more

#### `fn write_i64<T>(&mut self, n: i64) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes a signed 64 bit integer to the underlying writer. Read more

#### `fn write_u128<T>(&mut self, n: u128) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes an unsigned 128 bit integer to the underlying writer.

#### `fn write_i128<T>(&mut self, n: i128) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes a signed 128 bit integer to the underlying writer.

#### `fn write_uint<T>(&mut self, n: u64, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes an unsigned n-bytes integer to the underlying writer. Read more

#### `fn write_int<T>(&mut self, n: i64, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes a signed n-bytes integer to the underlying writer. Read more

#### `fn write_uint128<T>(&mut self, n: u128, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes an unsigned n-bytes integer to the underlying writer. Read more

#### `fn write_int128<T>(&mut self, n: i128, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes a signed n-bytes integer to the underlying writer. Read more

#### `fn write_f32<T>(&mut self, n: f32) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes a IEEE754 single-precision (4 bytes) floating point number to the underlying writer. Read more

#### `fn write_f64<T>(&mut self, n: f64) -> Result<(), Error> where
T: ByteOrder,` [src]

Writes a IEEE754 double-precision (8 bytes) floating point number to the underlying writer. Read more

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g., `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g., `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g., `str,u8` or `String,struct:Vec,test`)