// std/collections - Collection types (HashMap, HashSet, etc.)
// Wraps Rust's std::collections with Windjammer-friendly APIs
use std::collections::HashMap as RustHashMap
use std::collections::HashSet as RustHashSet
use std::collections::BTreeMap as RustBTreeMap
use std::collections::BTreeSet as RustBTreeSet
use std::collections::VecDeque as RustVecDeque
// HashMap - Hash table implementation
pub struct HashMap<K, V> {
inner: RustHashMap<K, V>,
}
impl<K, V> HashMap<K, V> {
pub fn new() -> Self {
HashMap { inner: RustHashMap::new() }
}
pub fn with_capacity(capacity: int) -> Self {
HashMap { inner: RustHashMap::with_capacity(capacity as usize) }
}
pub fn insert(self, key: K, value: V) -> Option<V> {
self.inner.insert(key, value)
}
pub fn get(self, key: K) -> Option<&V> {
self.inner.get(key)
}
pub fn get_mut(self, key: K) -> Option<&mut V> {
self.inner.get_mut(key)
}
pub fn remove(self, key: K) -> Option<V> {
self.inner.remove(key)
}
pub fn contains_key(self, key: K) -> bool {
self.inner.contains_key(key)
}
pub fn len(self) -> int {
self.inner.len() as i64
}
pub fn is_empty(self) -> bool {
self.inner.is_empty()
}
pub fn clear(self) {
self.inner.clear()
}
}
// HashSet - Hash set implementation
pub struct HashSet<T> {
inner: RustHashSet<T>,
}
impl<T> HashSet<T> {
pub fn new() -> Self {
HashSet { inner: RustHashSet::new() }
}
pub fn with_capacity(capacity: int) -> Self {
HashSet { inner: RustHashSet::with_capacity(capacity as usize) }
}
pub fn insert(self, value: T) -> bool {
self.inner.insert(value)
}
pub fn remove(self, value: T) -> bool {
self.inner.remove(value)
}
pub fn contains(self, value: T) -> bool {
self.inner.contains(value)
}
pub fn len(self) -> int {
self.inner.len() as i64
}
pub fn is_empty(self) -> bool {
self.inner.is_empty()
}
pub fn clear(self) {
self.inner.clear()
}
}
// BTreeMap - Sorted map implementation
pub struct BTreeMap<K, V> {
inner: RustBTreeMap<K, V>,
}
impl<K, V> BTreeMap<K, V> {
pub fn new() -> Self {
BTreeMap { inner: RustBTreeMap::new() }
}
pub fn insert(self, key: K, value: V) -> Option<V> {
self.inner.insert(key, value)
}
pub fn get(self, key: K) -> Option<&V> {
self.inner.get(key)
}
pub fn remove(self, key: K) -> Option<V> {
self.inner.remove(key)
}
pub fn contains_key(self, key: K) -> bool {
self.inner.contains_key(key)
}
pub fn len(self) -> int {
self.inner.len() as i64
}
pub fn is_empty(self) -> bool {
self.inner.is_empty()
}
}
// BTreeSet - Sorted set implementation
pub struct BTreeSet<T> {
inner: RustBTreeSet<T>,
}
impl<T> BTreeSet<T> {
pub fn new() -> Self {
BTreeSet { inner: RustBTreeSet::new() }
}
pub fn insert(self, value: T) -> bool {
self.inner.insert(value)
}
pub fn remove(self, value: T) -> bool {
self.inner.remove(value)
}
pub fn contains(self, value: T) -> bool {
self.inner.contains(value)
}
pub fn len(self) -> int {
self.inner.len() as i64
}
pub fn is_empty(self) -> bool {
self.inner.is_empty()
}
}
// VecDeque - Double-ended queue
pub struct VecDeque<T> {
inner: RustVecDeque<T>,
}
impl<T> VecDeque<T> {
pub fn new() -> Self {
VecDeque { inner: RustVecDeque::new() }
}
pub fn with_capacity(capacity: int) -> Self {
VecDeque { inner: RustVecDeque::with_capacity(capacity as usize) }
}
pub fn push_front(self, value: T) {
self.inner.push_front(value)
}
pub fn push_back(self, value: T) {
self.inner.push_back(value)
}
pub fn pop_front(self) -> Option<T> {
self.inner.pop_front()
}
pub fn pop_back(self) -> Option<T> {
self.inner.pop_back()
}
pub fn len(self) -> int {
self.inner.len() as i64
}
pub fn is_empty(self) -> bool {
self.inner.is_empty()
}
pub fn clear(self) {
self.inner.clear()
}
}