use alloc::arc::Arc;
use alloc::boxed::Box;
use core::clone::Clone;
use core::fmt::{mod, Formatter, Show};
use core::kinds::marker::{NoSend, NoSync};
use core::mem;
use core::ops::Drop;
use core::result::{Result, Ok, Err};
use core::slice::SlicePrelude;
use core::str::StrPrelude;
use raw::{Prim, Allocator, RawIobuf};
use iobuf::Iobuf;
#[unsafe_no_drop_flag]
pub struct ROIobuf<'a> {
raw: RawIobuf<'a>,
nosend: NoSend,
nosync: NoSync,
}
#[test]
fn check_sane_roiobuf_size() {
assert_eq!(mem::size_of::<ROIobuf<'static>>(), mem::size_of::<*mut u8>() + 16);
}
impl<'a> Clone for ROIobuf<'a> {
#[inline(always)]
fn clone(&self) -> ROIobuf<'a> {
ROIobuf {
raw: self.raw.clone_nonatomic(),
nosend: NoSend,
nosync: NoSync,
}
}
#[inline(always)]
fn clone_from(&mut self, source: &ROIobuf<'a>) { self.raw.clone_from_nonatomic(&source.raw) }
}
#[unsafe_destructor]
impl<'a> Drop for ROIobuf<'a> {
#[inline(always)]
fn drop(&mut self) { self.raw.drop_nonatomic() }
}
#[unsafe_no_drop_flag]
pub struct RWIobuf<'a> {
raw: RawIobuf<'a>,
nosend: NoSend,
nosync: NoSync,
}
#[test]
fn check_sane_rwiobuf_size() {
assert_eq!(mem::size_of::<RWIobuf<'static>>(), mem::size_of::<*mut u8>() + 16);
}
impl<'a> Clone for RWIobuf<'a> {
#[inline(always)]
fn clone(&self) -> RWIobuf<'a> {
RWIobuf {
raw: self.raw.clone_nonatomic(),
nosend: NoSend,
nosync: NoSync,
}
}
#[inline(always)]
fn clone_from(&mut self, source: &RWIobuf<'a>) { self.raw.clone_from_nonatomic(&source.raw) }
}
#[unsafe_destructor]
impl<'a> Drop for RWIobuf<'a> {
#[inline(always)]
fn drop(&mut self) { self.raw.drop_nonatomic() }
}
#[unsafe_no_drop_flag]
pub struct AROIobuf {
raw: RawIobuf<'static>,
}
impl<'a> Clone for AROIobuf {
#[inline(always)]
fn clone(&self) -> AROIobuf { AROIobuf { raw: self.raw.clone_atomic() } }
#[inline(always)]
fn clone_from(&mut self, source: &AROIobuf) { self.raw.clone_from_atomic(&source.raw) }
}
impl Drop for AROIobuf {
#[inline(always)]
fn drop(&mut self) { self.raw.drop_atomic() }
}
impl<'a> ROIobuf<'a> {
#[inline(always)]
pub fn empty() -> ROIobuf<'static> {
ROIobuf { raw: RawIobuf::empty(), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn from_str<'a>(s: &'a str) -> ROIobuf<'a> {
ROIobuf { raw: RawIobuf::from_str(s), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn from_str_copy(s: &str) -> ROIobuf<'static> {
ROIobuf { raw: RawIobuf::from_str_copy(s), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn from_str_copy_with_allocator(s: &str, allocator: Arc<Box<Allocator>>) -> ROIobuf<'static> {
ROIobuf { raw: RawIobuf::from_str_copy_with_allocator(s, allocator), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn from_slice_copy(s: &[u8]) -> ROIobuf<'static> {
ROIobuf { raw: RawIobuf::from_slice_copy(s), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn from_slice_copy_with_allocator(s: &[u8], allocator: Arc<Box<Allocator>>) -> ROIobuf<'static> {
ROIobuf { raw: RawIobuf::from_slice_copy_with_allocator(s, allocator), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn from_slice<'a>(s: &'a [u8]) -> ROIobuf<'a> {
ROIobuf { raw: RawIobuf::from_slice(s), nosync: NoSync, nosend: NoSend }
}
}
impl<'a> RWIobuf<'a> {
#[inline(always)]
pub fn empty() -> RWIobuf<'static> {
RWIobuf { raw: RawIobuf::empty(), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn new(len: uint) -> RWIobuf<'static> {
RWIobuf { raw: RawIobuf::new(len), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn new_with_allocator(len: uint, allocator: Arc<Box<Allocator>>) -> RWIobuf<'static> {
RWIobuf { raw: RawIobuf::new_with_allocator(len, allocator), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn from_str_copy(s: &str) -> RWIobuf<'static> {
RWIobuf { raw: RawIobuf::from_str_copy(s), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn from_str_copy_with_allocator(s: &str, allocator: Arc<Box<Allocator>>) -> RWIobuf<'static> {
RWIobuf { raw: RawIobuf::from_str_copy_with_allocator(s, allocator), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn from_slice<'a>(s: &'a mut [u8]) -> RWIobuf<'a> {
RWIobuf { raw: RawIobuf::from_slice(s), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn from_slice_copy(s: &[u8]) -> RWIobuf<'static> {
RWIobuf { raw: RawIobuf::from_slice_copy(s), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn from_slice_copy_with_allocator(s: &[u8], allocator: Arc<Box<Allocator>>) -> RWIobuf<'static> {
RWIobuf { raw: RawIobuf::from_slice_copy_with_allocator(s, allocator), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub unsafe fn as_mut_window_slice<'b>(&'b self) -> &'b mut [u8] {
self.raw.as_mut_window_slice()
}
#[inline(always)]
pub unsafe fn as_mut_limit_slice<'b>(&'b self) -> &'b mut [u8] {
self.raw.as_mut_limit_slice()
}
#[inline(always)]
pub fn read_only(&self) -> ROIobuf<'a> {
ROIobuf { raw: self.raw.clone_nonatomic(), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
pub fn compact(&mut self) { self.raw.compact() }
#[inline(always)]
pub fn poke(&self, pos: u32, src: &[u8]) -> Result<(), ()> { self.raw.poke(pos, src) }
#[inline(always)]
pub fn poke_be<T: Prim>(&self, pos: u32, t: T) -> Result<(), ()> { self.raw.poke_be(pos, t) }
#[inline(always)]
pub fn poke_le<T: Prim>(&self, pos: u32, t: T) -> Result<(), ()> { self.raw.poke_le(pos, t) }
#[inline(always)]
pub fn fill(&mut self, src: &[u8]) -> Result<(), ()> { self.raw.fill(src) }
#[inline(always)]
pub fn fill_be<T: Prim>(&mut self, t: T) -> Result<(), ()> { self.raw.fill_be(t) }
#[inline(always)]
pub fn fill_le<T: Prim>(&mut self, t: T) -> Result<(), ()> { self.raw.fill_le(t) }
#[inline(always)]
pub unsafe fn unsafe_poke(&self, pos: u32, src: &[u8]) { self.raw.unsafe_poke(pos, src) }
#[inline(always)]
pub unsafe fn unsafe_poke_be<T: Prim>(&self, pos: u32, t: T) { self.raw.unsafe_poke_be(pos, t) }
#[inline(always)]
pub unsafe fn unsafe_poke_le<T: Prim>(&self, pos: u32, t: T) { self.raw.unsafe_poke_le(pos, t) }
#[inline(always)]
pub unsafe fn unsafe_fill(&mut self, src: &[u8]) { self.raw.unsafe_fill(src) }
#[inline(always)]
pub unsafe fn unsafe_fill_be<T: Prim>(&mut self, t: T) { self.raw.unsafe_fill_be(t) }
#[inline(always)]
pub unsafe fn unsafe_fill_le<T: Prim>(&mut self, t: T) { self.raw.unsafe_fill_le(t) }
}
impl<'a> Iobuf for ROIobuf<'a> {
#[inline(always)]
fn deep_clone(&self) -> RWIobuf<'static> { RWIobuf { raw: self.raw.deep_clone(), nosync: NoSync, nosend: NoSend } }
#[inline(always)]
fn deep_clone_with_allocator(&self, allocator: Arc<Box<Allocator>>) -> RWIobuf<'static> {
RWIobuf { raw: self.raw.deep_clone_with_allocator(allocator), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
fn atomic_read_only(self) -> Result<AROIobuf, ROIobuf<'a>> {
unsafe {
match self.raw.atomic_read_only() {
Ok (()) => Ok(mem::transmute(self)),
Err(()) => Err(self),
}
}
}
#[inline(always)]
fn len(&self) -> u32 { self.raw.len() }
#[inline(always)]
fn cap(&self) -> u32 { self.raw.cap() }
#[inline(always)]
fn is_empty(&self) -> bool { self.raw.is_empty() }
#[inline(always)]
unsafe fn as_window_slice<'b>(&'b self) -> &'b [u8] { self.raw.as_window_slice() }
#[inline(always)]
unsafe fn as_limit_slice<'b>(&'b self) -> &'b [u8] { self.raw.as_limit_slice() }
#[inline(always)]
fn sub_window(&mut self, pos: u32, len: u32) -> Result<(), ()> { self.raw.sub_window(pos, len) }
#[inline(always)]
fn sub_window_from(&mut self, pos: u32) -> Result<(), ()> { self.raw.sub_window_from(pos) }
#[inline(always)]
fn sub_window_to(&mut self, len: u32) -> Result<(), ()> { self.raw.sub_window_to(len) }
#[inline(always)]
unsafe fn unsafe_sub_window(&mut self, pos: u32, len: u32) { self.raw.unsafe_sub_window(pos, len) }
#[inline(always)]
unsafe fn unsafe_sub_window_from(&mut self, pos: u32) { self.raw.unsafe_sub_window_from(pos) }
#[inline(always)]
unsafe fn unsafe_sub_window_to(&mut self, len: u32) { self.raw.unsafe_sub_window_to(len) }
#[inline(always)]
fn sub(&mut self, pos: u32, len: u32) -> Result<(), ()> { self.raw.sub(pos, len) }
#[inline(always)]
fn sub_from(&mut self, pos: u32) -> Result<(), ()> { self.raw.sub_from(pos) }
#[inline(always)]
fn sub_to(&mut self, len: u32) -> Result<(), ()> { self.raw.sub_to(len) }
#[inline(always)]
unsafe fn unsafe_sub(&mut self, pos: u32, len: u32) { self.raw.unsafe_sub(pos, len) }
#[inline(always)]
unsafe fn unsafe_sub_from(&mut self, pos: u32) { self.raw.unsafe_sub_from(pos) }
#[inline(always)]
unsafe fn unsafe_sub_to(&mut self, len: u32) { self.raw.unsafe_sub_to(len) }
#[inline(always)]
fn set_limits_and_window(&mut self, limits: (u32, u32), window: (u32, u32)) -> Result<(), ()> { self.raw.set_limits_and_window(limits, window) }
#[inline(always)]
fn narrow(&mut self) { self.raw.narrow() }
#[inline(always)]
fn advance(&mut self, len: u32) -> Result<(), ()> { self.raw.advance(len) }
#[inline(always)]
unsafe fn unsafe_advance(&mut self, len: u32) { self.raw.unsafe_advance(len) }
#[inline(always)]
fn extend(&mut self, len: u32) -> Result<(), ()> { self.raw.extend(len) }
#[inline(always)]
unsafe fn unsafe_extend(&mut self, len: u32) { self.raw.unsafe_extend(len) }
#[inline(always)]
fn is_extended_by<Buf: Iobuf>(&self, other: &Buf) -> bool { unsafe { self.raw.is_extended_by(other.as_raw()) } }
#[inline(always)]
fn extend_with<Buf: Iobuf>(&mut self, other: &Buf) -> Result<(), ()> { unsafe { self.raw.extend_with(other.as_raw()) } }
#[inline(always)]
fn resize(&mut self, len: u32) -> Result<(), ()> { self.raw.resize(len) }
#[inline(always)]
unsafe fn unsafe_resize(&mut self, len: u32) { self.raw.unsafe_resize(len) }
#[inline(always)]
fn split_at(&self, pos: u32) -> Result<(ROIobuf<'a>, ROIobuf<'a>), ()> {
self.raw.split_at_nonatomic(pos).map(
|(a, b)| (ROIobuf { raw: a, nosync: NoSync, nosend: NoSend },
ROIobuf { raw: b, nosync: NoSync, nosend: NoSend }))
}
#[inline(always)]
unsafe fn unsafe_split_at(&self, pos: u32) -> (ROIobuf<'a>, ROIobuf<'a>) {
let (a, b) = self.raw.unsafe_split_at_nonatomic(pos);
(ROIobuf { raw: a, nosync: NoSync, nosend: NoSend },
ROIobuf { raw: b, nosync: NoSync, nosend: NoSend })
}
#[inline(always)]
fn split_start_at(&mut self, pos: u32) -> Result<ROIobuf<'a>, ()> {
self.raw.split_start_at_nonatomic(pos).map(
|b| ROIobuf { raw: b, nosync: NoSync, nosend: NoSend })
}
#[inline(always)]
unsafe fn unsafe_split_start_at(&mut self, pos: u32) -> ROIobuf<'a> {
ROIobuf { raw: self.raw.unsafe_split_start_at_nonatomic(pos), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
fn rewind(&mut self) { self.raw.rewind() }
#[inline(always)]
fn reset(&mut self) { self.raw.reset() }
#[inline(always)]
fn flip_lo(&mut self) { self.raw.flip_lo() }
#[inline(always)]
fn flip_hi(&mut self) { self.raw.flip_hi() }
#[inline(always)]
fn lo_space(&self) -> u32 { self.raw.lo_space() }
#[inline(always)]
fn hi_space(&self) -> u32 { self.raw.hi_space() }
#[inline(always)]
fn peek(&self, pos: u32, dst: &mut [u8]) -> Result<(), ()> { self.raw.peek(pos, dst) }
#[inline(always)]
fn peek_be<T: Prim>(&self, pos: u32) -> Result<T, ()> { self.raw.peek_be(pos) }
#[inline(always)]
fn peek_le<T: Prim>(&self, pos: u32) -> Result<T, ()> { self.raw.peek_le(pos) }
#[inline(always)]
fn consume(&mut self, dst: &mut [u8]) -> Result<(), ()> { self.raw.consume(dst) }
#[inline(always)]
fn consume_be<T: Prim>(&mut self) -> Result<T, ()> { self.raw.consume_be::<T>() }
#[inline(always)]
fn consume_le<T: Prim>(&mut self) -> Result<T, ()> { self.raw.consume_le::<T>() }
#[inline(always)]
fn check_range(&self, pos: u32, len: u32) -> Result<(), ()> { self.raw.check_range_u32(pos, len) }
#[inline(always)]
fn check_range_uint(&self, pos: u32, len: uint) -> Result<(), ()> { self.raw.check_range_uint(pos, len) }
#[inline(always)]
fn check_range_fail(&self, pos: u32, len: u32) { self.raw.check_range_u32_fail(pos, len) }
#[inline(always)]
fn check_range_uint_fail(&self, pos: u32, len: uint) { self.raw.check_range_uint_fail(pos, len) }
#[inline(always)]
unsafe fn unsafe_peek(&self, pos: u32, dst: &mut [u8]) { self.raw.unsafe_peek(pos, dst) }
#[inline(always)]
unsafe fn unsafe_peek_be<T: Prim>(&self, pos: u32) -> T { self.raw.unsafe_peek_be(pos) }
#[inline(always)]
unsafe fn unsafe_peek_le<T: Prim>(&self, pos: u32) -> T { self.raw.unsafe_peek_le(pos) }
#[inline(always)]
unsafe fn unsafe_consume(&mut self, dst: &mut [u8]) { self.raw.unsafe_consume(dst) }
#[inline(always)]
unsafe fn unsafe_consume_be<T: Prim>(&mut self) -> T { self.raw.unsafe_consume_be::<T>() }
#[inline(always)]
unsafe fn unsafe_consume_le<T: Prim>(&mut self) -> T { self.raw.unsafe_consume_le::<T>() }
#[inline(always)]
unsafe fn as_raw<'a>(&self) -> &RawIobuf<'a> { mem::transmute(&self.raw) }
#[inline(always)]
fn ptr(&self) -> *mut u8 { self.raw.ptr() }
#[inline(always)]
fn is_owned(&self) -> bool { self.raw.is_owned() }
#[inline(always)]
fn lo_min(&self) -> u32 { self.raw.lo_min() }
#[inline(always)]
fn lo(&self) -> u32 { self.raw.lo() }
#[inline(always)]
fn hi(&self) -> u32 { self.raw.hi() }
#[inline(always)]
fn hi_max(&self) -> u32 { self.raw.hi_max() }
}
impl Iobuf for AROIobuf {
#[inline(always)]
fn deep_clone(&self) -> RWIobuf<'static> {
RWIobuf { raw: self.raw.deep_clone(), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
fn deep_clone_with_allocator(&self, allocator: Arc<Box<Allocator>>) -> RWIobuf<'static> {
RWIobuf { raw: self.raw.deep_clone_with_allocator(allocator), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
fn atomic_read_only(self) -> Result<AROIobuf, AROIobuf> {
Ok(self)
}
#[inline(always)]
fn len(&self) -> u32 { self.raw.len() }
#[inline(always)]
fn cap(&self) -> u32 { self.raw.cap() }
#[inline(always)]
fn is_empty(&self) -> bool { self.raw.is_empty() }
#[inline(always)]
unsafe fn as_window_slice<'b>(&'b self) -> &'b [u8] { self.raw.as_window_slice() }
#[inline(always)]
unsafe fn as_limit_slice<'b>(&'b self) -> &'b [u8] { self.raw.as_limit_slice() }
#[inline(always)]
fn sub_window(&mut self, pos: u32, len: u32) -> Result<(), ()> { self.raw.sub_window(pos, len) }
#[inline(always)]
fn sub_window_from(&mut self, pos: u32) -> Result<(), ()> { self.raw.sub_window_from(pos) }
#[inline(always)]
fn sub_window_to(&mut self, len: u32) -> Result<(), ()> { self.raw.sub_window_to(len) }
#[inline(always)]
unsafe fn unsafe_sub_window(&mut self, pos: u32, len: u32) { self.raw.unsafe_sub_window(pos, len) }
#[inline(always)]
unsafe fn unsafe_sub_window_from(&mut self, pos: u32) { self.raw.unsafe_sub_window_from(pos) }
#[inline(always)]
unsafe fn unsafe_sub_window_to(&mut self, len: u32) { self.raw.unsafe_sub_window_to(len) }
#[inline(always)]
fn sub(&mut self, pos: u32, len: u32) -> Result<(), ()> { self.raw.sub(pos, len) }
#[inline(always)]
fn sub_from(&mut self, pos: u32) -> Result<(), ()> { self.raw.sub_from(pos) }
#[inline(always)]
fn sub_to(&mut self, len: u32) -> Result<(), ()> { self.raw.sub_to(len) }
#[inline(always)]
unsafe fn unsafe_sub(&mut self, pos: u32, len: u32) { self.raw.unsafe_sub(pos, len) }
#[inline(always)]
unsafe fn unsafe_sub_from(&mut self, pos: u32) { self.raw.unsafe_sub_from(pos) }
#[inline(always)]
unsafe fn unsafe_sub_to(&mut self, len: u32) { self.raw.unsafe_sub_to(len) }
#[inline(always)]
fn set_limits_and_window(&mut self, limits: (u32, u32), window: (u32, u32)) -> Result<(), ()> { self.raw.set_limits_and_window(limits, window) }
#[inline(always)]
fn narrow(&mut self) { self.raw.narrow() }
#[inline(always)]
fn advance(&mut self, len: u32) -> Result<(), ()> { self.raw.advance(len) }
#[inline(always)]
unsafe fn unsafe_advance(&mut self, len: u32) { self.raw.unsafe_advance(len) }
#[inline(always)]
fn extend(&mut self, len: u32) -> Result<(), ()> { self.raw.extend(len) }
#[inline(always)]
unsafe fn unsafe_extend(&mut self, len: u32) { self.raw.unsafe_extend(len) }
#[inline(always)]
fn is_extended_by<Buf: Iobuf>(&self, other: &Buf) -> bool { unsafe { self.raw.is_extended_by(other.as_raw()) } }
#[inline(always)]
fn extend_with<Buf: Iobuf>(&mut self, other: &Buf) -> Result<(), ()> { unsafe { self.raw.extend_with(other.as_raw()) } }
#[inline(always)]
fn resize(&mut self, len: u32) -> Result<(), ()> { self.raw.resize(len) }
#[inline(always)]
unsafe fn unsafe_resize(&mut self, len: u32) { self.raw.unsafe_resize(len) }
#[inline(always)]
fn split_at(&self, pos: u32) -> Result<(AROIobuf, AROIobuf), ()> {
self.raw.split_at_atomic(pos).map(
|(a, b)| (AROIobuf { raw: a },
AROIobuf { raw: b }))
}
#[inline(always)]
unsafe fn unsafe_split_at(&self, pos: u32) -> (AROIobuf, AROIobuf) {
let (a, b) = self.raw.unsafe_split_at_atomic(pos);
(AROIobuf { raw: a },
AROIobuf { raw: b })
}
#[inline(always)]
fn split_start_at(&mut self, pos: u32) -> Result<AROIobuf, ()> {
self.raw.split_start_at_atomic(pos).map(
|b| AROIobuf { raw: b })
}
#[inline(always)]
unsafe fn unsafe_split_start_at(&mut self, pos: u32) -> AROIobuf {
AROIobuf { raw: self.raw.unsafe_split_start_at_atomic(pos) }
}
#[inline(always)]
fn rewind(&mut self) { self.raw.rewind() }
#[inline(always)]
fn reset(&mut self) { self.raw.reset() }
#[inline(always)]
fn flip_lo(&mut self) { self.raw.flip_lo() }
#[inline(always)]
fn flip_hi(&mut self) { self.raw.flip_hi() }
#[inline(always)]
fn lo_space(&self) -> u32 { self.raw.lo_space() }
#[inline(always)]
fn hi_space(&self) -> u32 { self.raw.hi_space() }
#[inline(always)]
fn peek(&self, pos: u32, dst: &mut [u8]) -> Result<(), ()> { self.raw.peek(pos, dst) }
#[inline(always)]
fn peek_be<T: Prim>(&self, pos: u32) -> Result<T, ()> { self.raw.peek_be(pos) }
#[inline(always)]
fn peek_le<T: Prim>(&self, pos: u32) -> Result<T, ()> { self.raw.peek_le(pos) }
#[inline(always)]
fn consume(&mut self, dst: &mut [u8]) -> Result<(), ()> { self.raw.consume(dst) }
#[inline(always)]
fn consume_be<T: Prim>(&mut self) -> Result<T, ()> { self.raw.consume_be::<T>() }
#[inline(always)]
fn consume_le<T: Prim>(&mut self) -> Result<T, ()> { self.raw.consume_le::<T>() }
#[inline(always)]
fn check_range(&self, pos: u32, len: u32) -> Result<(), ()> { self.raw.check_range_u32(pos, len) }
#[inline(always)]
fn check_range_uint(&self, pos: u32, len: uint) -> Result<(), ()> { self.raw.check_range_uint(pos, len) }
#[inline(always)]
fn check_range_fail(&self, pos: u32, len: u32) { self.raw.check_range_u32_fail(pos, len) }
#[inline(always)]
fn check_range_uint_fail(&self, pos: u32, len: uint) { self.raw.check_range_uint_fail(pos, len) }
#[inline(always)]
unsafe fn unsafe_peek(&self, pos: u32, dst: &mut [u8]) { self.raw.unsafe_peek(pos, dst) }
#[inline(always)]
unsafe fn unsafe_peek_be<T: Prim>(&self, pos: u32) -> T { self.raw.unsafe_peek_be(pos) }
#[inline(always)]
unsafe fn unsafe_peek_le<T: Prim>(&self, pos: u32) -> T { self.raw.unsafe_peek_le(pos) }
#[inline(always)]
unsafe fn unsafe_consume(&mut self, dst: &mut [u8]) { self.raw.unsafe_consume(dst) }
#[inline(always)]
unsafe fn unsafe_consume_be<T: Prim>(&mut self) -> T { self.raw.unsafe_consume_be::<T>() }
#[inline(always)]
unsafe fn unsafe_consume_le<T: Prim>(&mut self) -> T { self.raw.unsafe_consume_le::<T>() }
#[inline(always)]
unsafe fn as_raw<'a>(&self) -> &RawIobuf<'a> { mem::transmute(&self.raw) }
#[inline(always)]
fn ptr(&self) -> *mut u8 { self.raw.ptr() }
#[inline(always)]
fn is_owned(&self) -> bool { self.raw.is_owned() }
#[inline(always)]
fn lo_min(&self) -> u32 { self.raw.lo_min() }
#[inline(always)]
fn lo(&self) -> u32 { self.raw.lo() }
#[inline(always)]
fn hi(&self) -> u32 { self.raw.hi() }
#[inline(always)]
fn hi_max(&self) -> u32 { self.raw.hi_max() }
}
impl<'a> Iobuf for RWIobuf<'a> {
#[inline(always)]
fn deep_clone(&self) -> RWIobuf<'static> { RWIobuf { raw: self.raw.deep_clone(), nosync: NoSync, nosend: NoSend } }
#[inline(always)]
fn deep_clone_with_allocator(&self, allocator: Arc<Box<Allocator>>) -> RWIobuf<'static> {
RWIobuf { raw: self.raw.deep_clone_with_allocator(allocator), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
fn atomic_read_only(self) -> Result<AROIobuf, RWIobuf<'a>> {
unsafe {
match self.raw.atomic_read_only() {
Ok (()) => Ok(mem::transmute(self)),
Err(()) => Err(self),
}
}
}
#[inline(always)]
fn len(&self) -> u32 { self.raw.len() }
#[inline(always)]
fn cap(&self) -> u32 { self.raw.cap() }
#[inline(always)]
fn is_empty(&self) -> bool { self.raw.is_empty() }
#[inline(always)]
unsafe fn as_window_slice<'b>(&'b self) -> &'b [u8] { self.raw.as_window_slice() }
#[inline(always)]
unsafe fn as_limit_slice<'b>(&'b self) -> &'b [u8] { self.raw.as_limit_slice() }
#[inline(always)]
fn sub_window(&mut self, pos: u32, len: u32) -> Result<(), ()> { self.raw.sub_window(pos, len) }
#[inline(always)]
fn sub_window_from(&mut self, pos: u32) -> Result<(), ()> { self.raw.sub_window_from(pos) }
#[inline(always)]
fn sub_window_to(&mut self, len: u32) -> Result<(), ()> { self.raw.sub_window_to(len) }
#[inline(always)]
unsafe fn unsafe_sub_window(&mut self, pos: u32, len: u32) { self.raw.unsafe_sub_window(pos, len) }
#[inline(always)]
unsafe fn unsafe_sub_window_from(&mut self, pos: u32) { self.raw.unsafe_sub_window_from(pos) }
#[inline(always)]
unsafe fn unsafe_sub_window_to(&mut self, len: u32) { self.raw.unsafe_sub_window_to(len) }
#[inline(always)]
fn sub(&mut self, pos: u32, len: u32) -> Result<(), ()> { self.raw.sub(pos, len) }
#[inline(always)]
fn sub_from(&mut self, pos: u32) -> Result<(), ()> { self.raw.sub_from(pos) }
#[inline(always)]
fn sub_to(&mut self, len: u32) -> Result<(), ()> { self.raw.sub_to(len) }
#[inline(always)]
unsafe fn unsafe_sub(&mut self, pos: u32, len: u32) { self.raw.unsafe_sub(pos, len) }
#[inline(always)]
unsafe fn unsafe_sub_from(&mut self, pos: u32) { self.raw.unsafe_sub_from(pos) }
#[inline(always)]
unsafe fn unsafe_sub_to(&mut self, len: u32) { self.raw.unsafe_sub_to(len) }
#[inline(always)]
fn set_limits_and_window(&mut self, limits: (u32, u32), window: (u32, u32)) -> Result<(), ()> { self.raw.set_limits_and_window(limits, window) }
#[inline(always)]
fn narrow(&mut self) { self.raw.narrow() }
#[inline(always)]
fn advance(&mut self, len: u32) -> Result<(), ()> { self.raw.advance(len) }
#[inline(always)]
unsafe fn unsafe_advance(&mut self, len: u32) { self.raw.unsafe_advance(len) }
#[inline(always)]
fn extend(&mut self, len: u32) -> Result<(), ()> { self.raw.extend(len) }
#[inline(always)]
unsafe fn unsafe_extend(&mut self, len: u32) { self.raw.unsafe_extend(len) }
#[inline(always)]
fn is_extended_by<Buf: Iobuf>(&self, other: &Buf) -> bool { unsafe { self.raw.is_extended_by(other.as_raw()) } }
#[inline(always)]
fn extend_with<Buf: Iobuf>(&mut self, other: &Buf) -> Result<(), ()> { unsafe { self.raw.extend_with(other.as_raw()) } }
#[inline(always)]
fn resize(&mut self, len: u32) -> Result<(), ()> { self.raw.resize(len) }
#[inline(always)]
unsafe fn unsafe_resize(&mut self, len: u32) { self.raw.unsafe_resize(len) }
#[inline(always)]
fn split_at(&self, pos: u32) -> Result<(RWIobuf<'a>, RWIobuf<'a>), ()> {
self.raw.split_at_nonatomic(pos).map(
|(a, b)| (RWIobuf { raw: a, nosync: NoSync, nosend: NoSend },
RWIobuf { raw: b, nosync: NoSync, nosend: NoSend }))
}
#[inline(always)]
unsafe fn unsafe_split_at(&self, pos: u32) -> (RWIobuf<'a>, RWIobuf<'a>) {
let (a, b) = self.raw.unsafe_split_at_nonatomic(pos);
(RWIobuf { raw: a, nosync: NoSync, nosend: NoSend },
RWIobuf { raw: b, nosync: NoSync, nosend: NoSend })
}
#[inline(always)]
fn split_start_at(&mut self, pos: u32) -> Result<RWIobuf<'a>, ()> {
self.raw.split_start_at_nonatomic(pos).map(
|b| RWIobuf { raw: b, nosync: NoSync, nosend: NoSend })
}
#[inline(always)]
unsafe fn unsafe_split_start_at(&mut self, pos: u32) -> RWIobuf<'a> {
RWIobuf { raw: self.raw.unsafe_split_start_at_nonatomic(pos), nosync: NoSync, nosend: NoSend }
}
#[inline(always)]
fn rewind(&mut self) { self.raw.rewind() }
#[inline(always)]
fn reset(&mut self) { self.raw.reset() }
#[inline(always)]
fn flip_lo(&mut self) { self.raw.flip_lo() }
#[inline(always)]
fn flip_hi(&mut self) { self.raw.flip_hi() }
#[inline(always)]
fn lo_space(&self) -> u32 { self.raw.lo_space() }
#[inline(always)]
fn hi_space(&self) -> u32 { self.raw.hi_space() }
#[inline(always)]
fn peek(&self, pos: u32, dst: &mut [u8]) -> Result<(), ()> { self.raw.peek(pos, dst) }
#[inline(always)]
fn peek_be<T: Prim>(&self, pos: u32) -> Result<T, ()> { self.raw.peek_be(pos) }
#[inline(always)]
fn peek_le<T: Prim>(&self, pos: u32) -> Result<T, ()> { self.raw.peek_le(pos) }
#[inline(always)]
fn consume(&mut self, dst: &mut [u8]) -> Result<(), ()> { self.raw.consume(dst) }
#[inline(always)]
fn consume_be<T: Prim>(&mut self) -> Result<T, ()> { self.raw.consume_be::<T>() }
#[inline(always)]
fn consume_le<T: Prim>(&mut self) -> Result<T, ()> { self.raw.consume_le::<T>() }
#[inline(always)]
fn check_range(&self, pos: u32, len: u32) -> Result<(), ()> { self.raw.check_range_u32(pos, len) }
#[inline(always)]
fn check_range_uint(&self, pos: u32, len: uint) -> Result<(), ()> { self.raw.check_range_uint(pos, len) }
#[inline(always)]
fn check_range_fail(&self, pos: u32, len: u32) { self.raw.check_range_u32_fail(pos, len) }
#[inline(always)]
fn check_range_uint_fail(&self, pos: u32, len: uint) { self.raw.check_range_uint_fail(pos, len) }
#[inline(always)]
unsafe fn unsafe_peek(&self, pos: u32, dst: &mut [u8]) { self.raw.unsafe_peek(pos, dst) }
#[inline(always)]
unsafe fn unsafe_peek_be<T: Prim>(&self, pos: u32) -> T { self.raw.unsafe_peek_be(pos) }
#[inline(always)]
unsafe fn unsafe_peek_le<T: Prim>(&self, pos: u32) -> T { self.raw.unsafe_peek_le(pos) }
#[inline(always)]
unsafe fn unsafe_consume(&mut self, dst: &mut [u8]) { self.raw.unsafe_consume(dst) }
#[inline(always)]
unsafe fn unsafe_consume_be<T: Prim>(&mut self) -> T { self.raw.unsafe_consume_be::<T>() }
#[inline(always)]
unsafe fn unsafe_consume_le<T: Prim>(&mut self) -> T { self.raw.unsafe_consume_le::<T>() }
#[inline(always)]
unsafe fn as_raw<'a>(&self) -> &RawIobuf<'a> { mem::transmute(&self.raw) }
#[inline(always)]
fn ptr(&self) -> *mut u8 { self.raw.ptr() }
#[inline(always)]
fn is_owned(&self) -> bool { self.raw.is_owned() }
#[inline(always)]
fn lo_min(&self) -> u32 { self.raw.lo_min() }
#[inline(always)]
fn lo(&self) -> u32 { self.raw.lo() }
#[inline(always)]
fn hi(&self) -> u32 { self.raw.hi() }
#[inline(always)]
fn hi_max(&self) -> u32 { self.raw.hi_max() }
}
impl<'a> Show for ROIobuf<'a> {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
self.raw.show(f, "read-only")
}
}
impl<'a> Show for RWIobuf<'a> {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
self.raw.show(f, "read-write")
}
}
impl Show for AROIobuf {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
self.raw.show(f, "atomic read-only")
}
}