diff --git a/src/array_string.rs b/src/array_string.rs index 639fe74..c4712a0 100644 --- a/src/array_string.rs +++ b/src/array_string.rs @@ -82,11 +82,11 @@ impl ArrayString /// Return the length of the string. #[inline] - pub fn len(&self) -> usize { self.len as usize } + pub const fn len(&self) -> usize { self.len as usize } /// Returns whether the string is empty. #[inline] - pub fn is_empty(&self) -> bool { self.len() == 0 } + pub const fn is_empty(&self) -> bool { self.len() == 0 } /// Create a new `ArrayString` from a `str`. /// @@ -160,7 +160,7 @@ impl ArrayString /// assert_eq!(string.capacity(), 3); /// ``` #[inline(always)] - pub fn capacity(&self) -> usize { CAP } + pub const fn capacity(&self) -> usize { CAP } /// Return if the `ArrayString` is completely filled. /// @@ -172,7 +172,20 @@ impl ArrayString /// string.push_str("A"); /// assert!(string.is_full()); /// ``` - pub fn is_full(&self) -> bool { self.len() == self.capacity() } + pub const fn is_full(&self) -> bool { self.len() == self.capacity() } + + /// Returns the capacity left in the `ArrayString`. + /// + /// ``` + /// use arrayvec::ArrayString; + /// + /// let mut string = ArrayString::<3>::from("abc").unwrap(); + /// string.pop(); + /// assert_eq!(string.remaining_capacity(), 1); + /// ``` + pub const fn remaining_capacity(&self) -> usize { + self.capacity() - self.len() + } /// Adds the given char to the end of the string. /// diff --git a/src/arrayvec.rs b/src/arrayvec.rs index 1fe6adf..e69e60c 100644 --- a/src/arrayvec.rs +++ b/src/arrayvec.rs @@ -108,7 +108,7 @@ impl ArrayVec { /// assert_eq!(array.len(), 2); /// ``` #[inline(always)] - pub fn len(&self) -> usize { self.len as usize } + pub const fn len(&self) -> usize { self.len as usize } /// Returns whether the `ArrayVec` is empty. /// @@ -120,7 +120,7 @@ impl ArrayVec { /// assert_eq!(array.is_empty(), true); /// ``` #[inline] - pub fn is_empty(&self) -> bool { self.len() == 0 } + pub const fn is_empty(&self) -> bool { self.len() == 0 } /// Return the capacity of the `ArrayVec`. /// @@ -131,7 +131,7 @@ impl ArrayVec { /// assert_eq!(array.capacity(), 3); /// ``` #[inline(always)] - pub fn capacity(&self) -> usize { CAP } + pub const fn capacity(&self) -> usize { CAP } /// Return true if the `ArrayVec` is completely filled to its capacity, false otherwise. /// @@ -143,7 +143,7 @@ impl ArrayVec { /// array.push(1); /// assert!(array.is_full()); /// ``` - pub fn is_full(&self) -> bool { self.len() == self.capacity() } + pub const fn is_full(&self) -> bool { self.len() == self.capacity() } /// Returns the capacity left in the `ArrayVec`. /// @@ -154,7 +154,7 @@ impl ArrayVec { /// array.pop(); /// assert_eq!(array.remaining_capacity(), 1); /// ``` - pub fn remaining_capacity(&self) -> usize { + pub const fn remaining_capacity(&self) -> usize { self.capacity() - self.len() } diff --git a/src/errors.rs b/src/errors.rs index 380742a..7ca3ebc 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -12,7 +12,7 @@ pub struct CapacityError { impl CapacityError { /// Create a new `CapacityError` from `element`. - pub fn new(element: T) -> CapacityError { + pub const fn new(element: T) -> CapacityError { CapacityError { element: element, }