liblightning 0.0.2

High-performance general-purpose stackful coroutine library.
Documentation
use std::cell::RefCell;
use stack::Stack;

pub struct StackPool {
    stacks: RefCell<Vec<Stack>>,
    config: StackPoolConfig
}

pub struct StackPoolConfig {
    pub default_stack_size: usize,
    pub max_pool_size: usize
}

impl Default for StackPoolConfig {
    fn default() -> Self {
        StackPoolConfig {
            default_stack_size: 32768,
            max_pool_size: 4096
        }
    }
}

impl StackPool {
    pub fn new(config: StackPoolConfig) -> StackPool {
        StackPool {
            stacks: RefCell::new(Vec::new()),
            config: config
        }
    }

    pub fn get(&self) -> Stack {
        match self.stacks.borrow_mut().pop() {
            Some(v) => v,
            None => Stack::new(self.config.default_stack_size)
        }
    }

    pub fn put(&self, s: Stack) {
        let mut stacks = self.stacks.borrow_mut();
        if self.config.max_pool_size == 0 || stacks.len() < self.config.max_pool_size {
            stacks.push(s);
        }
    }
}