FilterPool

Struct FilterPool 

Source
pub struct FilterPool { /* private fields */ }
Expand description

A memory pool for efficient filter construction.

Uses bump allocation to minimize allocations when building complex filter trees. The pool can be reused by calling reset() after each filter is built.

§Performance

  • Filter construction in the pool: O(1) allocation per filter tree
  • Materialization to owned filter: O(n) where n is the number of nodes
  • Pool reset: O(1) (just resets the bump pointer)

§Thread Safety

FilterPool is not thread-safe. Each thread should have its own pool.

Implementations§

Source§

impl FilterPool

Source

pub fn new() -> Self

Create a new filter pool with default capacity.

The pool starts with a small initial allocation and grows as needed.

Source

pub fn with_capacity(capacity: usize) -> Self

Create a new filter pool with the specified initial capacity in bytes.

Use this when you know approximately how much memory your filters will need.

Source

pub fn reset(&mut self)

Reset the pool, freeing all allocated memory for reuse.

This is very fast (O(1)) as it just resets the bump pointer. Call this between filter constructions to reuse memory.

Source

pub fn allocated_bytes(&self) -> usize

Get the amount of memory currently allocated in the pool.

Source

pub fn build<F>(&self, f: F) -> Filter
where F: for<'a> FnOnce(&'a FilterBuilder<'a>) -> PooledFilter<'a>,

Build a filter using the pool’s arena for temporary allocations.

The closure receives a FilterBuilder that provides efficient methods for constructing nested filters. The resulting filter is materialized into an owned Filter that can be used after the pool is reset.

§Examples
use prax_query::pool::FilterPool;
use prax_query::Filter;

let mut pool = FilterPool::new();
let filter = pool.build(|b| {
    b.and(vec![
        b.eq("active", true),
        b.gt("score", 100),
    ])
});

Trait Implementations§

Source§

impl Default for FilterPool

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more