Methods
Public Class
Public Instance
Public Instance Aliases
each | -> | each_forward |
length | -> | size |
reverse_each | -> | each_backward |
Public Class methods
new
(*args)
[show source]
static VALUE deque_init(int argc, VALUE *argv, VALUE self) { long len, i; VALUE ary; if(argc == 0) { return self; } else if(argc > 1) { rb_raise(rb_eArgError, "wrong number of arguments"); } else { ary = rb_check_array_type(argv[0]); if(!NIL_P(ary)) { len = RARRAY_LEN(ary); for (i = 0; i < len; i++) { deque_push_back(self, RARRAY_PTR(ary)[i]); } } } return self; }
Public Instance methods
back
()
[show source]
static VALUE deque_back(VALUE self) { deque *deque = get_deque_from_self(self); if(deque->back) return deque->back->obj; return Qnil; }
clear
()
[show source]
static VALUE deque_clear(VALUE self) { deque *deque = get_deque_from_self(self); clear_deque(deque); return Qnil; }
each_backward
()
[show source]
static VALUE deque_each_backward(VALUE self) { deque *deque = get_deque_from_self(self); deque_node *node = deque->back; while(node) { rb_yield(node->obj); node = node->left; } return self; }
each_forward
()
[show source]
static VALUE deque_each_forward(VALUE self) { deque *deque = get_deque_from_self(self); deque_node *node = deque->front; while(node) { rb_yield(node->obj); node = node->right; } return self; }
empty?
()
[show source]
static VALUE deque_is_empty(VALUE self) { deque *deque = get_deque_from_self(self); return (deque->size == 0) ? Qtrue : Qfalse; }
front
()
[show source]
static VALUE deque_front(VALUE self) { deque *deque = get_deque_from_self(self); if(deque->front) return deque->front->obj; return Qnil; }
pop_back
()
[show source]
static VALUE deque_pop_back(VALUE self) { deque *deque = get_deque_from_self(self); VALUE obj; if(!deque->back) return Qnil; deque_node *node = deque->back; obj = node->obj; if(deque->size == 1) { clear_deque(deque); return obj; } deque->back->left->right = NULL; deque->back = deque->back->left; deque->size--; return obj; }
pop_front
()
[show source]
static VALUE deque_pop_front(VALUE self) { deque *deque = get_deque_from_self(self); VALUE obj; if(!deque->front) return Qnil; deque_node *node = deque->front; obj = node->obj; if(deque->size == 1) { clear_deque(deque); return obj; } deque->front->right->left = NULL; deque->front = deque->front->right; deque->size--; return obj; }
push_back
(p1)
[show source]
static VALUE deque_push_back(VALUE self, VALUE obj) { deque *deque = get_deque_from_self(self); deque_node *node = create_node(obj); if(deque->back) { node->left = deque->back; deque->back->right = node; deque->back = node; } else { deque->front = node; deque->back = node; } deque->size++; return obj; }
push_front
(p1)
[show source]
static VALUE deque_push_front(VALUE self, VALUE obj) { deque *deque = get_deque_from_self(self); deque_node *node = create_node(obj); if(deque->front) { node->right = deque->front; deque->front->left = node; deque->front = node; } else { deque->front = node; deque->back = node; } deque->size++; return obj; }
size
()
[show source]
static VALUE deque_size(VALUE self) { deque *deque = get_deque_from_self(self); return INT2NUM(deque->size); }