rbtree.rs 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791
  1. // Copyright 2017-2018 By [email protected].
  2. //
  3. // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
  4. // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
  5. // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
  6. // option. This file may not be copied, modified, or distributed
  7. // except according to those terms.
  8. // This file brings from https://github.com/tickbh/rbtree-rs/blob/master/src/lib.rs
  9. // Thanks to the author tickbh
  10. #![allow(dead_code)]
  11. use core::cmp::Ord;
  12. use core::fmt::{self, Debug};
  13. use core::cmp::Ordering;
  14. use core::ptr;
  15. use core::iter::{IntoIterator, FromIterator};
  16. use core::marker;
  17. use core::mem;
  18. use core::ops::Index;
  19. use alloc::boxed::Box;
  20. use crate::kdebug;
  21. #[derive(Debug, Copy, Clone, PartialEq, Eq)]
  22. enum Color {
  23. Red,
  24. Black,
  25. }
  26. /*****************RBTreeNode***************************/
  27. struct RBTreeNode<K: Ord, V> {
  28. color: Color,
  29. left: NodePtr<K, V>,
  30. right: NodePtr<K, V>,
  31. parent: NodePtr<K, V>,
  32. key: K,
  33. value: V,
  34. }
  35. impl<K: Ord, V> RBTreeNode<K, V> {
  36. #[inline]
  37. fn pair(self) -> (K, V) {
  38. (self.key, self.value)
  39. }
  40. }
  41. impl<K, V> Debug for RBTreeNode<K, V>
  42. where
  43. K: Ord + Debug,
  44. V: Debug,
  45. {
  46. fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  47. write!(f, "k:{:?} v:{:?} c:{:?}", self.key, self.value, self.color)
  48. }
  49. }
  50. /*****************NodePtr***************************/
  51. #[derive(Debug)]
  52. struct NodePtr<K: Ord, V>(*mut RBTreeNode<K, V>);
  53. impl<K: Ord, V> Clone for NodePtr<K, V> {
  54. fn clone(&self) -> NodePtr<K, V> {
  55. NodePtr(self.0)
  56. }
  57. }
  58. impl<K: Ord, V> Copy for NodePtr<K, V> {}
  59. impl<K: Ord, V> Ord for NodePtr<K, V> {
  60. fn cmp(&self, other: &NodePtr<K, V>) -> Ordering {
  61. unsafe { (*self.0).key.cmp(&(*other.0).key) }
  62. }
  63. }
  64. impl<K: Ord, V> PartialOrd for NodePtr<K, V> {
  65. fn partial_cmp(&self, other: &NodePtr<K, V>) -> Option<Ordering> {
  66. unsafe { Some((*self.0).key.cmp(&(*other.0).key)) }
  67. }
  68. }
  69. impl<K: Ord, V> PartialEq for NodePtr<K, V> {
  70. fn eq(&self, other: &NodePtr<K, V>) -> bool {
  71. self.0 == other.0
  72. }
  73. }
  74. impl<K: Ord, V> Eq for NodePtr<K, V> {}
  75. impl<K: Ord, V> NodePtr<K, V> {
  76. fn new(k: K, v: V) -> NodePtr<K, V> {
  77. let node = RBTreeNode {
  78. color: Color::Black,
  79. left: NodePtr::null(),
  80. right: NodePtr::null(),
  81. parent: NodePtr::null(),
  82. key: k,
  83. value: v,
  84. };
  85. NodePtr(Box::into_raw(Box::new(node)))
  86. }
  87. #[inline]
  88. fn set_color(&mut self, color: Color) {
  89. if self.is_null() {
  90. return;
  91. }
  92. unsafe {
  93. (*self.0).color = color;
  94. }
  95. }
  96. #[inline]
  97. fn set_red_color(&mut self) {
  98. self.set_color(Color::Red);
  99. }
  100. #[inline]
  101. fn set_black_color(&mut self) {
  102. self.set_color(Color::Black);
  103. }
  104. #[inline]
  105. fn get_color(&self) -> Color {
  106. if self.is_null() {
  107. return Color::Black;
  108. }
  109. unsafe { (*self.0).color }
  110. }
  111. #[inline]
  112. fn is_red_color(&self) -> bool {
  113. if self.is_null() {
  114. return false;
  115. }
  116. unsafe { (*self.0).color == Color::Red }
  117. }
  118. #[inline]
  119. fn is_black_color(&self) -> bool {
  120. if self.is_null() {
  121. return true;
  122. }
  123. unsafe { (*self.0).color == Color::Black }
  124. }
  125. #[inline]
  126. fn is_left_child(&self) -> bool {
  127. self.parent().left() == *self
  128. }
  129. #[inline]
  130. fn is_right_child(&self) -> bool {
  131. self.parent().right() == *self
  132. }
  133. #[inline]
  134. fn min_node(self) -> NodePtr<K, V> {
  135. let mut temp = self.clone();
  136. while !temp.left().is_null() {
  137. temp = temp.left();
  138. }
  139. return temp;
  140. }
  141. #[inline]
  142. fn max_node(self) -> NodePtr<K, V> {
  143. let mut temp = self.clone();
  144. while !temp.right().is_null() {
  145. temp = temp.right();
  146. }
  147. return temp;
  148. }
  149. #[inline]
  150. fn next(self) -> NodePtr<K, V> {
  151. if !self.right().is_null() {
  152. self.right().min_node()
  153. } else {
  154. let mut temp = self;
  155. loop {
  156. if temp.parent().is_null() {
  157. return NodePtr::null();
  158. }
  159. if temp.is_left_child() {
  160. return temp.parent();
  161. }
  162. temp = temp.parent();
  163. }
  164. }
  165. }
  166. #[inline]
  167. fn prev(self) -> NodePtr<K, V> {
  168. if !self.left().is_null() {
  169. self.left().max_node()
  170. } else {
  171. let mut temp = self;
  172. loop {
  173. if temp.parent().is_null() {
  174. return NodePtr::null();
  175. }
  176. if temp.is_right_child() {
  177. return temp.parent();
  178. }
  179. temp = temp.parent();
  180. }
  181. }
  182. }
  183. #[inline]
  184. fn set_parent(&mut self, parent: NodePtr<K, V>) {
  185. if self.is_null() {
  186. return;
  187. }
  188. unsafe { (*self.0).parent = parent }
  189. }
  190. #[inline]
  191. fn set_left(&mut self, left: NodePtr<K, V>) {
  192. if self.is_null() {
  193. return;
  194. }
  195. unsafe { (*self.0).left = left }
  196. }
  197. #[inline]
  198. fn set_right(&mut self, right: NodePtr<K, V>) {
  199. if self.is_null() {
  200. return;
  201. }
  202. unsafe { (*self.0).right = right }
  203. }
  204. #[inline]
  205. fn parent(&self) -> NodePtr<K, V> {
  206. if self.is_null() {
  207. return NodePtr::null();
  208. }
  209. unsafe { (*self.0).parent.clone() }
  210. }
  211. #[inline]
  212. fn left(&self) -> NodePtr<K, V> {
  213. if self.is_null() {
  214. return NodePtr::null();
  215. }
  216. unsafe { (*self.0).left.clone() }
  217. }
  218. #[inline]
  219. fn right(&self) -> NodePtr<K, V> {
  220. if self.is_null() {
  221. return NodePtr::null();
  222. }
  223. unsafe { (*self.0).right.clone() }
  224. }
  225. #[inline]
  226. fn null() -> NodePtr<K, V> {
  227. NodePtr(ptr::null_mut())
  228. }
  229. #[inline]
  230. fn is_null(&self) -> bool {
  231. self.0.is_null()
  232. }
  233. }
  234. impl<K: Ord + Clone, V: Clone> NodePtr<K, V> {
  235. unsafe fn deep_clone(&self) -> NodePtr<K, V> {
  236. let mut node = NodePtr::new((*self.0).key.clone(), (*self.0).value.clone());
  237. if !self.left().is_null() {
  238. node.set_left(self.left().deep_clone());
  239. node.left().set_parent(node);
  240. }
  241. if !self.right().is_null() {
  242. node.set_right(self.right().deep_clone());
  243. node.right().set_parent(node);
  244. }
  245. node
  246. }
  247. }
  248. /// A red black tree implemented with Rust
  249. /// It is required that the keys implement the [`Ord`] traits.
  250. /// # Examples
  251. /// ```rust
  252. /// use rbtree::RBTree;
  253. /// // type inference lets us omit an explicit type signature (which
  254. /// // would be `RBTree<&str, &str>` in this example).
  255. /// let mut book_reviews = RBTree::new();
  256. ///
  257. /// // review some books.
  258. /// book_reviews.insert("Adventures of Huckleberry Finn", "My favorite book.");
  259. /// book_reviews.insert("Grimms' Fairy Tales", "Masterpiece.");
  260. /// book_reviews.insert("Pride and Prejudice", "Very enjoyable.");
  261. /// book_reviews.insert("The Adventures of Sherlock Holmes", "Eye lyked it alot.");
  262. ///
  263. /// // check for a specific one.
  264. /// if !book_reviews.contains_key(&"Les Misérables") {
  265. /// kdebug!(
  266. /// "We've got {} reviews, but Les Misérables ain't one.",
  267. /// book_reviews.len()
  268. /// );
  269. /// }
  270. ///
  271. /// // oops, this review has a lot of spelling mistakes, let's delete it.
  272. /// book_reviews.remove(&"The Adventures of Sherlock Holmes");
  273. ///
  274. /// // look up the values associated with some keys.
  275. /// let to_find = ["Pride and Prejudice", "Alice's Adventure in Wonderland"];
  276. /// for book in &to_find {
  277. /// match book_reviews.get(book) {
  278. /// Some(review) => kdebug!("{}: {}", book, review),
  279. /// None => kdebug!("{} is unreviewed.", book),
  280. /// }
  281. /// }
  282. ///
  283. /// // iterate over everything.
  284. /// for (book, review) in book_reviews.iter() {
  285. /// kdebug!("{}: \"{}\"", book, review);
  286. /// }
  287. ///
  288. /// book_reviews.print_tree();
  289. /// ```
  290. ///
  291. /// // A `RBTree` with fixed list of elements can be initialized from an array:
  292. /// ```
  293. /// use rbtree::RBTree;
  294. /// let timber_resources: RBTree<&str, i32> =
  295. /// [("Norway", 100),
  296. /// ("Denmark", 50),
  297. /// ("Iceland", 10)]
  298. /// .iter().cloned().collect();
  299. /// // use the values stored in rbtree
  300. /// ```
  301. pub struct RBTree<K: Ord, V> {
  302. root: NodePtr<K, V>,
  303. len: usize,
  304. }
  305. // Drop all owned pointers if the tree is dropped
  306. impl<K: Ord, V> Drop for RBTree<K, V> {
  307. #[inline]
  308. fn drop(&mut self) {
  309. self.clear();
  310. }
  311. }
  312. /// If key and value are both impl Clone, we can call clone to get a copy.
  313. impl<K: Ord + Clone, V: Clone> Clone for RBTree<K, V> {
  314. fn clone(&self) -> RBTree<K, V> {
  315. unsafe {
  316. let mut new = RBTree::new();
  317. new.root = self.root.deep_clone();
  318. new.len = self.len;
  319. new
  320. }
  321. }
  322. }
  323. impl<K, V> Debug for RBTree<K, V>
  324. where
  325. K: Ord + Debug,
  326. V: Debug,
  327. {
  328. fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  329. f.debug_map().entries(self.iter()).finish()
  330. }
  331. }
  332. /// This is a method to help us to get inner struct.
  333. impl<K: Ord + Debug, V: Debug> RBTree<K, V> {
  334. fn tree_print(&self, node: NodePtr<K, V>, direction: i32) {
  335. if node.is_null() {
  336. return;
  337. }
  338. if direction == 0 {
  339. unsafe {
  340. kdebug!("'{:?}' is root node", (*node.0));
  341. }
  342. } else {
  343. let direct = if direction == -1 { "left" } else { "right" };
  344. unsafe {
  345. kdebug!(
  346. "{:?} is {:?}'s {:?} child ",
  347. (*node.0),
  348. *node.parent().0,
  349. direct
  350. );
  351. }
  352. }
  353. self.tree_print(node.left(), -1);
  354. self.tree_print(node.right(), 1);
  355. }
  356. pub fn print_tree(&self) {
  357. if self.root.is_null() {
  358. kdebug!("This is a empty tree");
  359. return;
  360. }
  361. kdebug!("This tree size = {:?}, begin:-------------", self.len());
  362. self.tree_print(self.root, 0);
  363. kdebug!("end--------------------------");
  364. }
  365. }
  366. /// all key be same, but it has multi key, if has multi key, it perhaps no correct
  367. impl<K, V> PartialEq for RBTree<K, V>
  368. where
  369. K: Eq + Ord,
  370. V: PartialEq,
  371. {
  372. fn eq(&self, other: &RBTree<K, V>) -> bool {
  373. if self.len() != other.len() {
  374. return false;
  375. }
  376. self.iter().all(|(key, value)| {
  377. other.get(key).map_or(false, |v| *value == *v)
  378. })
  379. }
  380. }
  381. impl<K, V> Eq for RBTree<K, V>
  382. where
  383. K: Eq + Ord,
  384. V: Eq,
  385. {
  386. }
  387. impl<'a, K, V> Index<&'a K> for RBTree<K, V>
  388. where
  389. K: Ord,
  390. {
  391. type Output = V;
  392. #[inline]
  393. fn index(&self, index: &K) -> &V {
  394. self.get(index).expect("no entry found for key")
  395. }
  396. }
  397. impl<K: Ord, V> FromIterator<(K, V)> for RBTree<K, V> {
  398. fn from_iter<T: IntoIterator<Item = (K, V)>>(iter: T) -> RBTree<K, V> {
  399. let mut tree = RBTree::new();
  400. tree.extend(iter);
  401. tree
  402. }
  403. }
  404. /// RBTree into iter
  405. impl<K: Ord, V> Extend<(K, V)> for RBTree<K, V> {
  406. fn extend<T: IntoIterator<Item = (K, V)>>(&mut self, iter: T) {
  407. let iter = iter.into_iter();
  408. for (k, v) in iter {
  409. self.insert(k, v);
  410. }
  411. }
  412. }
  413. /// provide the rbtree all keys
  414. /// # Examples
  415. /// ```
  416. /// use rbtree::RBTree;
  417. /// let mut m = RBTree::new();
  418. /// for i in 1..6 {
  419. /// m.insert(i, i);
  420. /// }
  421. /// let vec = vec![1, 2, 3, 4, 5];
  422. /// let key_vec: Vec<_> = m.keys().cloned().collect();
  423. /// assert_eq!(vec, key_vec);
  424. /// ```
  425. pub struct Keys<'a, K: Ord + 'a, V: 'a> {
  426. inner: Iter<'a, K, V>,
  427. }
  428. impl<'a, K: Ord, V> Clone for Keys<'a, K, V> {
  429. fn clone(&self) -> Keys<'a, K, V> {
  430. Keys { inner: self.inner.clone() }
  431. }
  432. }
  433. impl<'a, K: Ord + Debug, V> fmt::Debug for Keys<'a, K, V> {
  434. fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  435. f.debug_list().entries(self.clone()).finish()
  436. }
  437. }
  438. impl<'a, K: Ord, V> Iterator for Keys<'a, K, V> {
  439. type Item = &'a K;
  440. #[inline]
  441. fn next(&mut self) -> Option<&'a K> {
  442. self.inner.next().map(|(k, _)| k)
  443. }
  444. #[inline]
  445. fn size_hint(&self) -> (usize, Option<usize>) {
  446. self.inner.size_hint()
  447. }
  448. }
  449. /// provide the rbtree all values order by key
  450. /// # Examples
  451. /// ```
  452. /// use rbtree::RBTree;
  453. /// let mut m = RBTree::new();
  454. /// m.insert(2, 5);
  455. /// m.insert(1, 6);
  456. /// m.insert(3, 8);
  457. /// m.insert(4, 9);
  458. /// let vec = vec![6, 5, 8, 9];
  459. /// let key_vec: Vec<_> = m.values().cloned().collect();
  460. /// assert_eq!(vec, key_vec);
  461. /// ```
  462. pub struct Values<'a, K: 'a + Ord, V: 'a> {
  463. inner: Iter<'a, K, V>,
  464. }
  465. impl<'a, K: Ord, V> Clone for Values<'a, K, V> {
  466. fn clone(&self) -> Values<'a, K, V> {
  467. Values { inner: self.inner.clone() }
  468. }
  469. }
  470. impl<'a, K: Ord + Debug, V: Debug> fmt::Debug for Values<'a, K, V> {
  471. fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  472. f.debug_list().entries(self.clone()).finish()
  473. }
  474. }
  475. impl<'a, K: Ord, V> Iterator for Values<'a, K, V> {
  476. type Item = &'a V;
  477. #[inline]
  478. fn next(&mut self) -> Option<&'a V> {
  479. self.inner.next().map(|(_, v)| v)
  480. }
  481. #[inline]
  482. fn size_hint(&self) -> (usize, Option<usize>) {
  483. self.inner.size_hint()
  484. }
  485. }
  486. /// provide the rbtree all values and it can be modify
  487. /// # Examples
  488. /// ```
  489. /// use rbtree::RBTree;
  490. /// let mut m = RBTree::new();
  491. /// for i in 0..32 {
  492. /// m.insert(i, i);
  493. /// }
  494. /// assert_eq!(m.len(), 32);
  495. /// for v in m.values_mut() {
  496. /// *v *= 2;
  497. /// }
  498. /// for i in 0..32 {
  499. /// assert_eq!(m.get(&i).unwrap(), &(i * 2));
  500. /// }
  501. /// ```
  502. pub struct ValuesMut<'a, K: 'a + Ord, V: 'a> {
  503. inner: IterMut<'a, K, V>,
  504. }
  505. impl<'a, K: Ord, V> Clone for ValuesMut<'a, K, V> {
  506. fn clone(&self) -> ValuesMut<'a, K, V> {
  507. ValuesMut { inner: self.inner.clone() }
  508. }
  509. }
  510. impl<'a, K: Ord + Debug, V: Debug> fmt::Debug for ValuesMut<'a, K, V> {
  511. fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  512. f.debug_list().entries(self.clone()).finish()
  513. }
  514. }
  515. impl<'a, K: Ord, V> Iterator for ValuesMut<'a, K, V> {
  516. type Item = &'a mut V;
  517. #[inline]
  518. fn next(&mut self) -> Option<&'a mut V> {
  519. self.inner.next().map(|(_, v)| v)
  520. }
  521. #[inline]
  522. fn size_hint(&self) -> (usize, Option<usize>) {
  523. self.inner.size_hint()
  524. }
  525. }
  526. /// Convert RBTree to iter, move out the tree.
  527. pub struct IntoIter<K: Ord, V> {
  528. head: NodePtr<K, V>,
  529. tail: NodePtr<K, V>,
  530. len: usize,
  531. }
  532. // Drop all owned pointers if the collection is dropped
  533. impl<K: Ord, V> Drop for IntoIter<K, V> {
  534. #[inline]
  535. fn drop(&mut self) {
  536. for (_, _) in self {}
  537. }
  538. }
  539. impl<K: Ord, V> Iterator for IntoIter<K, V> {
  540. type Item = (K, V);
  541. fn next(&mut self) -> Option<(K, V)> {
  542. if self.len == 0 {
  543. return None;
  544. }
  545. if self.head.is_null() {
  546. return None;
  547. }
  548. let next = self.head.next();
  549. let (k, v) = unsafe {
  550. (
  551. core::ptr::read(&(*self.head.0).key),
  552. core::ptr::read(&(*self.head.0).value),
  553. )
  554. };
  555. self.head = next;
  556. self.len -= 1;
  557. Some((k, v))
  558. }
  559. fn size_hint(&self) -> (usize, Option<usize>) {
  560. (self.len, Some(self.len))
  561. }
  562. }
  563. impl<K: Ord, V> DoubleEndedIterator for IntoIter<K, V> {
  564. #[inline]
  565. fn next_back(&mut self) -> Option<(K, V)> {
  566. if self.len == 0 {
  567. return None;
  568. }
  569. if self.tail.is_null() {
  570. return None;
  571. }
  572. let prev = self.tail.prev();
  573. let obj = unsafe { Box::from_raw(self.tail.0) };
  574. let (k, v) = obj.pair();
  575. self.tail = prev;
  576. self.len -= 1;
  577. Some((k, v))
  578. }
  579. }
  580. /// provide iter ref for RBTree
  581. /// # Examples
  582. /// ```
  583. /// use rbtree::RBTree;
  584. /// let mut m = RBTree::new();
  585. /// for i in 0..32 {
  586. /// m.insert(i, i * 2);
  587. /// }
  588. /// assert_eq!(m.len(), 32);
  589. /// let mut observed: u32 = 0;
  590. /// for (k, v) in m.iter() {
  591. /// assert_eq!(*v, *k * 2);
  592. /// observed |= 1 << *k;
  593. /// }
  594. /// assert_eq!(observed, 0xFFFF_FFFF);
  595. /// ```
  596. pub struct Iter<'a, K: Ord + 'a, V: 'a> {
  597. head: NodePtr<K, V>,
  598. tail: NodePtr<K, V>,
  599. len: usize,
  600. _marker: marker::PhantomData<&'a ()>,
  601. }
  602. impl<'a, K: Ord + 'a, V: 'a> Clone for Iter<'a, K, V> {
  603. fn clone(&self) -> Iter<'a, K, V> {
  604. Iter {
  605. head: self.head,
  606. tail: self.tail,
  607. len: self.len,
  608. _marker: self._marker,
  609. }
  610. }
  611. }
  612. impl<'a, K: Ord + 'a, V: 'a> Iterator for Iter<'a, K, V> {
  613. type Item = (&'a K, &'a V);
  614. fn next(&mut self) -> Option<(&'a K, &'a V)> {
  615. if self.len == 0 {
  616. return None;
  617. }
  618. if self.head.is_null() {
  619. return None;
  620. }
  621. let (k, v) = unsafe { (&(*self.head.0).key, &(*self.head.0).value) };
  622. self.head = self.head.next();
  623. self.len -= 1;
  624. Some((k, v))
  625. }
  626. fn size_hint(&self) -> (usize, Option<usize>) {
  627. (self.len, Some(self.len))
  628. }
  629. }
  630. impl<'a, K: Ord + 'a, V: 'a> DoubleEndedIterator for Iter<'a, K, V> {
  631. #[inline]
  632. fn next_back(&mut self) -> Option<(&'a K, &'a V)> {
  633. // kdebug!("len = {:?}", self.len);
  634. if self.len == 0 {
  635. return None;
  636. }
  637. if self.tail == self.head {
  638. return None;
  639. }
  640. let (k, v) = unsafe { (&(*self.tail.0).key, &(*self.tail.0).value) };
  641. self.tail = self.tail.prev();
  642. self.len -= 1;
  643. Some((k, v))
  644. }
  645. }
  646. /// provide iter mut ref for RBTree
  647. /// # Examples
  648. /// ```
  649. /// use rbtree::RBTree;
  650. /// let mut m = RBTree::new();
  651. /// for i in 0..32 {
  652. /// m.insert(i, i);
  653. /// }
  654. /// assert_eq!(m.len(), 32);
  655. /// for (_, v) in m.iter_mut() {
  656. /// *v *= 2;
  657. /// }
  658. /// for i in 0..32 {
  659. /// assert_eq!(m.get(&i).unwrap(), &(i * 2));
  660. /// }
  661. /// ```
  662. pub struct IterMut<'a, K: Ord + 'a, V: 'a> {
  663. head: NodePtr<K, V>,
  664. tail: NodePtr<K, V>,
  665. len: usize,
  666. _marker: marker::PhantomData<&'a ()>,
  667. }
  668. impl<'a, K: Ord + 'a, V: 'a> Clone for IterMut<'a, K, V> {
  669. fn clone(&self) -> IterMut<'a, K, V> {
  670. IterMut {
  671. head: self.head,
  672. tail: self.tail,
  673. len: self.len,
  674. _marker: self._marker,
  675. }
  676. }
  677. }
  678. impl<'a, K: Ord + 'a, V: 'a> Iterator for IterMut<'a, K, V> {
  679. type Item = (&'a K, &'a mut V);
  680. fn next(&mut self) -> Option<(&'a K, &'a mut V)> {
  681. if self.len == 0 {
  682. return None;
  683. }
  684. if self.head.is_null() {
  685. return None;
  686. }
  687. let (k, v) = unsafe { (&(*self.head.0).key, &mut (*self.head.0).value) };
  688. self.head = self.head.next();
  689. self.len -= 1;
  690. Some((k, v))
  691. }
  692. fn size_hint(&self) -> (usize, Option<usize>) {
  693. (self.len, Some(self.len))
  694. }
  695. }
  696. impl<'a, K: Ord + 'a, V: 'a> DoubleEndedIterator for IterMut<'a, K, V> {
  697. #[inline]
  698. fn next_back(&mut self) -> Option<(&'a K, &'a mut V)> {
  699. if self.len == 0 {
  700. return None;
  701. }
  702. if self.tail == self.head {
  703. return None;
  704. }
  705. let (k, v) = unsafe { (&(*self.tail.0).key, &mut (*self.tail.0).value) };
  706. self.tail = self.tail.prev();
  707. self.len -= 1;
  708. Some((k, v))
  709. }
  710. }
  711. impl<K: Ord, V> IntoIterator for RBTree<K, V> {
  712. type Item = (K, V);
  713. type IntoIter = IntoIter<K, V>;
  714. #[inline]
  715. fn into_iter(mut self) -> IntoIter<K, V> {
  716. let iter = if self.root.is_null() {
  717. IntoIter {
  718. head: NodePtr::null(),
  719. tail: NodePtr::null(),
  720. len: self.len,
  721. }
  722. } else {
  723. IntoIter {
  724. head: self.first_child(),
  725. tail: self.last_child(),
  726. len: self.len,
  727. }
  728. };
  729. self.fast_clear();
  730. iter
  731. }
  732. }
  733. impl<K: Ord, V> RBTree<K, V> {
  734. /// Creates an empty `RBTree`.
  735. pub fn new() -> RBTree<K, V> {
  736. RBTree {
  737. root: NodePtr::null(),
  738. len: 0,
  739. }
  740. }
  741. /// Returns the len of `RBTree`.
  742. #[inline]
  743. pub fn len(&self) -> usize {
  744. self.len
  745. }
  746. /// Returns `true` if the `RBTree` is empty.
  747. #[inline]
  748. pub fn is_empty(&self) -> bool {
  749. self.root.is_null()
  750. }
  751. /*
  752. * 对红黑树的节点(x)进行左旋转
  753. *
  754. * 左旋示意图(对节点x进行左旋):
  755. * px px
  756. * / /
  757. * x y
  758. * / \ --(左旋)--> / \ #
  759. * lx y x ry
  760. * / \ / \
  761. * ly ry lx ly
  762. *
  763. *
  764. */
  765. #[inline]
  766. unsafe fn left_rotate(&mut self, mut node: NodePtr<K, V>) {
  767. let mut temp = node.right();
  768. node.set_right(temp.left());
  769. if !temp.left().is_null() {
  770. temp.left().set_parent(node.clone());
  771. }
  772. temp.set_parent(node.parent());
  773. if node == self.root {
  774. self.root = temp.clone();
  775. } else if node == node.parent().left() {
  776. node.parent().set_left(temp.clone());
  777. } else {
  778. node.parent().set_right(temp.clone());
  779. }
  780. temp.set_left(node.clone());
  781. node.set_parent(temp.clone());
  782. }
  783. /*
  784. * 对红黑树的节点(y)进行右旋转
  785. *
  786. * 右旋示意图(对节点y进行左旋):
  787. * py py
  788. * / /
  789. * y x
  790. * / \ --(右旋)--> / \ #
  791. * x ry lx y
  792. * / \ / \ #
  793. * lx rx rx ry
  794. *
  795. */
  796. #[inline]
  797. unsafe fn right_rotate(&mut self, mut node: NodePtr<K, V>) {
  798. let mut temp = node.left();
  799. node.set_left(temp.right());
  800. if !temp.right().is_null() {
  801. temp.right().set_parent(node.clone());
  802. }
  803. temp.set_parent(node.parent());
  804. if node == self.root {
  805. self.root = temp.clone();
  806. } else if node == node.parent().right() {
  807. node.parent().set_right(temp.clone());
  808. } else {
  809. node.parent().set_left(temp.clone());
  810. }
  811. temp.set_right(node.clone());
  812. node.set_parent(temp.clone());
  813. }
  814. /// replace value if key exist, if not exist insert it.
  815. /// # Examples
  816. /// ```
  817. /// use rbtree::RBTree;
  818. /// let mut m = RBTree::new();
  819. /// assert_eq!(m.len(), 0);
  820. /// m.insert(2, 4);
  821. /// assert_eq!(m.len(), 1);
  822. /// assert_eq!(m.replace_or_insert(2, 6).unwrap(), 4);
  823. /// assert_eq!(m.len(), 1);
  824. /// assert_eq!(*m.get(&2).unwrap(), 6);
  825. /// ```
  826. #[inline]
  827. pub fn replace_or_insert(&mut self, k: K, mut v: V) -> Option<V> {
  828. let node = self.find_node(&k);
  829. if node.is_null() {
  830. self.insert(k, v);
  831. return None;
  832. }
  833. unsafe {
  834. mem::swap(&mut v, &mut (*node.0).value);
  835. }
  836. Some(v)
  837. }
  838. #[inline]
  839. unsafe fn insert_fixup(&mut self, mut node: NodePtr<K, V>) {
  840. let mut parent;
  841. let mut gparent;
  842. while node.parent().is_red_color() {
  843. parent = node.parent();
  844. gparent = parent.parent();
  845. //若“父节点”是“祖父节点的左孩子”
  846. if parent == gparent.left() {
  847. // Case 1条件:叔叔节点是红色
  848. let mut uncle = gparent.right();
  849. if !uncle.is_null() && uncle.is_red_color() {
  850. uncle.set_black_color();
  851. parent.set_black_color();
  852. gparent.set_red_color();
  853. node = gparent;
  854. continue;
  855. }
  856. // Case 2条件:叔叔是黑色,且当前节点是右孩子
  857. if parent.right() == node {
  858. self.left_rotate(parent);
  859. let temp = parent;
  860. parent = node;
  861. node = temp;
  862. }
  863. // Case 3条件:叔叔是黑色,且当前节点是左孩子。
  864. parent.set_black_color();
  865. gparent.set_red_color();
  866. self.right_rotate(gparent);
  867. } else {
  868. // Case 1条件:叔叔节点是红色
  869. let mut uncle = gparent.left();
  870. if !uncle.is_null() && uncle.is_red_color() {
  871. uncle.set_black_color();
  872. parent.set_black_color();
  873. gparent.set_red_color();
  874. node = gparent;
  875. continue;
  876. }
  877. // Case 2条件:叔叔是黑色,且当前节点是右孩子
  878. if parent.left() == node {
  879. self.right_rotate(parent);
  880. let temp = parent;
  881. parent = node;
  882. node = temp;
  883. }
  884. // Case 3条件:叔叔是黑色,且当前节点是左孩子。
  885. parent.set_black_color();
  886. gparent.set_red_color();
  887. self.left_rotate(gparent);
  888. }
  889. }
  890. self.root.set_black_color();
  891. }
  892. #[inline]
  893. pub fn insert(&mut self, k: K, v: V) {
  894. self.len += 1;
  895. let mut node = NodePtr::new(k, v);
  896. let mut y = NodePtr::null();
  897. let mut x = self.root;
  898. while !x.is_null() {
  899. y = x;
  900. match node.cmp(&&mut x) {
  901. Ordering::Less => {
  902. x = x.left();
  903. }
  904. _ => {
  905. x = x.right();
  906. }
  907. };
  908. }
  909. node.set_parent(y);
  910. if y.is_null() {
  911. self.root = node;
  912. } else {
  913. match node.cmp(&&mut y) {
  914. Ordering::Less => {
  915. y.set_left(node);
  916. }
  917. _ => {
  918. y.set_right(node);
  919. }
  920. };
  921. }
  922. node.set_red_color();
  923. unsafe {
  924. self.insert_fixup(node);
  925. }
  926. }
  927. #[inline]
  928. fn find_node(&self, k: &K) -> NodePtr<K, V> {
  929. if self.root.is_null() {
  930. return NodePtr::null();
  931. }
  932. let mut temp = &self.root;
  933. unsafe {
  934. loop {
  935. let next = match k.cmp(&(*temp.0).key) {
  936. Ordering::Less => &mut (*temp.0).left,
  937. Ordering::Greater => &mut (*temp.0).right,
  938. Ordering::Equal => return *temp,
  939. };
  940. if next.is_null() {
  941. break;
  942. }
  943. temp = next;
  944. }
  945. }
  946. NodePtr::null()
  947. }
  948. #[inline]
  949. fn first_child(&self) -> NodePtr<K, V> {
  950. if self.root.is_null() {
  951. NodePtr::null()
  952. } else {
  953. let mut temp = self.root;
  954. while !temp.left().is_null() {
  955. temp = temp.left();
  956. }
  957. return temp;
  958. }
  959. }
  960. #[inline]
  961. fn last_child(&self) -> NodePtr<K, V> {
  962. if self.root.is_null() {
  963. NodePtr::null()
  964. } else {
  965. let mut temp = self.root;
  966. while !temp.right().is_null() {
  967. temp = temp.right();
  968. }
  969. return temp;
  970. }
  971. }
  972. #[inline]
  973. pub fn get_first(&self) -> Option<(&K, &V)> {
  974. let first = self.first_child();
  975. if first.is_null() {
  976. return None;
  977. }
  978. unsafe { Some((&(*first.0).key, &(*first.0).value)) }
  979. }
  980. #[inline]
  981. pub fn get_last(&self) -> Option<(&K, &V)> {
  982. let last = self.last_child();
  983. if last.is_null() {
  984. return None;
  985. }
  986. unsafe { Some((&(*last.0).key, &(*last.0).value)) }
  987. }
  988. #[inline]
  989. pub fn pop_first(&mut self) -> Option<(K, V)> {
  990. let first = self.first_child();
  991. if first.is_null() {
  992. return None;
  993. }
  994. unsafe { Some(self.delete(first)) }
  995. }
  996. #[inline]
  997. pub fn pop_last(&mut self) -> Option<(K, V)> {
  998. let last = self.last_child();
  999. if last.is_null() {
  1000. return None;
  1001. }
  1002. unsafe { Some(self.delete(last)) }
  1003. }
  1004. #[inline]
  1005. pub fn get_first_mut(&mut self) -> Option<(&K, &mut V)> {
  1006. let first = self.first_child();
  1007. if first.is_null() {
  1008. return None;
  1009. }
  1010. unsafe { Some((&(*first.0).key, &mut (*first.0).value)) }
  1011. }
  1012. #[inline]
  1013. pub fn get_last_mut(&mut self) -> Option<(&K, &mut V)> {
  1014. let last = self.last_child();
  1015. if last.is_null() {
  1016. return None;
  1017. }
  1018. unsafe { Some((&(*last.0).key, &mut (*last.0).value)) }
  1019. }
  1020. #[inline]
  1021. pub fn get(&self, k: &K) -> Option<&V> {
  1022. let node = self.find_node(k);
  1023. if node.is_null() {
  1024. return None;
  1025. }
  1026. unsafe { Some(&(*node.0).value) }
  1027. }
  1028. #[inline]
  1029. pub fn get_mut(&mut self, k: &K) -> Option<&mut V> {
  1030. let node = self.find_node(k);
  1031. if node.is_null() {
  1032. return None;
  1033. }
  1034. unsafe { Some(&mut (*node.0).value) }
  1035. }
  1036. #[inline]
  1037. pub fn contains_key(&self, k: &K) -> bool {
  1038. let node = self.find_node(k);
  1039. if node.is_null() {
  1040. return false;
  1041. }
  1042. true
  1043. }
  1044. #[inline]
  1045. fn clear_recurse(&mut self, current: NodePtr<K, V>) {
  1046. if !current.is_null() {
  1047. unsafe {
  1048. self.clear_recurse(current.left());
  1049. self.clear_recurse(current.right());
  1050. drop(Box::from_raw(current.0));
  1051. }
  1052. }
  1053. }
  1054. #[inline]
  1055. pub fn clear(&mut self) {
  1056. let root = self.root;
  1057. self.root = NodePtr::null();
  1058. self.clear_recurse(root);
  1059. }
  1060. /// Empties the `RBTree` without freeing objects in it.
  1061. #[inline]
  1062. fn fast_clear(&mut self) {
  1063. self.root = NodePtr::null();
  1064. }
  1065. #[inline]
  1066. pub fn remove(&mut self, k: &K) -> Option<V> {
  1067. let node = self.find_node(k);
  1068. if node.is_null() {
  1069. return None;
  1070. }
  1071. unsafe { Some(self.delete(node).1) }
  1072. }
  1073. #[inline]
  1074. unsafe fn delete_fixup(&mut self, mut node: NodePtr<K, V>, mut parent: NodePtr<K, V>) {
  1075. let mut other;
  1076. while node != self.root && node.is_black_color() {
  1077. if parent.left() == node {
  1078. other = parent.right();
  1079. //x的兄弟w是红色的
  1080. if other.is_red_color() {
  1081. other.set_black_color();
  1082. parent.set_red_color();
  1083. self.left_rotate(parent);
  1084. other = parent.right();
  1085. }
  1086. //x的兄弟w是黑色,且w的俩个孩子也都是黑色的
  1087. if other.left().is_black_color() && other.right().is_black_color() {
  1088. other.set_red_color();
  1089. node = parent;
  1090. parent = node.parent();
  1091. } else {
  1092. //x的兄弟w是黑色的,并且w的左孩子是红色,右孩子为黑色。
  1093. if other.right().is_black_color() {
  1094. other.left().set_black_color();
  1095. other.set_red_color();
  1096. self.right_rotate(other);
  1097. other = parent.right();
  1098. }
  1099. //x的兄弟w是黑色的;并且w的右孩子是红色的,左孩子任意颜色。
  1100. other.set_color(parent.get_color());
  1101. parent.set_black_color();
  1102. other.right().set_black_color();
  1103. self.left_rotate(parent);
  1104. node = self.root;
  1105. break;
  1106. }
  1107. } else {
  1108. other = parent.left();
  1109. //x的兄弟w是红色的
  1110. if other.is_red_color() {
  1111. other.set_black_color();
  1112. parent.set_red_color();
  1113. self.right_rotate(parent);
  1114. other = parent.left();
  1115. }
  1116. //x的兄弟w是黑色,且w的俩个孩子也都是黑色的
  1117. if other.left().is_black_color() && other.right().is_black_color() {
  1118. other.set_red_color();
  1119. node = parent;
  1120. parent = node.parent();
  1121. } else {
  1122. //x的兄弟w是黑色的,并且w的左孩子是红色,右孩子为黑色。
  1123. if other.left().is_black_color() {
  1124. other.right().set_black_color();
  1125. other.set_red_color();
  1126. self.left_rotate(other);
  1127. other = parent.left();
  1128. }
  1129. //x的兄弟w是黑色的;并且w的右孩子是红色的,左孩子任意颜色。
  1130. other.set_color(parent.get_color());
  1131. parent.set_black_color();
  1132. other.left().set_black_color();
  1133. self.right_rotate(parent);
  1134. node = self.root;
  1135. break;
  1136. }
  1137. }
  1138. }
  1139. node.set_black_color();
  1140. }
  1141. #[inline]
  1142. unsafe fn delete(&mut self, node: NodePtr<K, V>) -> (K, V) {
  1143. let mut child;
  1144. let mut parent;
  1145. let color;
  1146. self.len -= 1;
  1147. // 被删除节点的"左右孩子都不为空"的情况。
  1148. if !node.left().is_null() && !node.right().is_null() {
  1149. // 被删节点的后继节点。(称为"取代节点")
  1150. // 用它来取代"被删节点"的位置,然后再将"被删节点"去掉。
  1151. let mut replace = node.right().min_node();
  1152. if node == self.root {
  1153. self.root = replace;
  1154. } else {
  1155. if node.parent().left() == node {
  1156. node.parent().set_left(replace);
  1157. } else {
  1158. node.parent().set_right(replace);
  1159. }
  1160. }
  1161. // child是"取代节点"的右孩子,也是需要"调整的节点"。
  1162. // "取代节点"肯定不存在左孩子!因为它是一个后继节点。
  1163. child = replace.right();
  1164. parent = replace.parent();
  1165. color = replace.get_color();
  1166. if parent == node {
  1167. parent = replace;
  1168. } else {
  1169. if !child.is_null() {
  1170. child.set_parent(parent);
  1171. }
  1172. parent.set_left(child);
  1173. replace.set_right(node.right());
  1174. node.right().set_parent(replace);
  1175. }
  1176. replace.set_parent(node.parent());
  1177. replace.set_color(node.get_color());
  1178. replace.set_left(node.left());
  1179. node.left().set_parent(replace);
  1180. if color == Color::Black {
  1181. self.delete_fixup(child, parent);
  1182. }
  1183. let obj = Box::from_raw(node.0);
  1184. return obj.pair();
  1185. }
  1186. if !node.left().is_null() {
  1187. child = node.left();
  1188. } else {
  1189. child = node.right();
  1190. }
  1191. parent = node.parent();
  1192. color = node.get_color();
  1193. if !child.is_null() {
  1194. child.set_parent(parent);
  1195. }
  1196. if self.root == node {
  1197. self.root = child
  1198. } else {
  1199. if parent.left() == node {
  1200. parent.set_left(child);
  1201. } else {
  1202. parent.set_right(child);
  1203. }
  1204. }
  1205. if color == Color::Black {
  1206. self.delete_fixup(child, parent);
  1207. }
  1208. let obj = Box::from_raw(node.0);
  1209. return obj.pair();
  1210. }
  1211. /// Return the keys iter
  1212. #[inline]
  1213. pub fn keys(&self) -> Keys<K, V> {
  1214. Keys { inner: self.iter() }
  1215. }
  1216. /// Return the value iter
  1217. #[inline]
  1218. pub fn values(&self) -> Values<K, V> {
  1219. Values { inner: self.iter() }
  1220. }
  1221. /// Return the value iter mut
  1222. #[inline]
  1223. pub fn values_mut(&mut self) -> ValuesMut<K, V> {
  1224. ValuesMut { inner: self.iter_mut() }
  1225. }
  1226. /// Return the key and value iter
  1227. #[inline]
  1228. pub fn iter(&self) -> Iter<K, V> {
  1229. Iter {
  1230. head: self.first_child(),
  1231. tail: self.last_child(),
  1232. len: self.len,
  1233. _marker: marker::PhantomData,
  1234. }
  1235. }
  1236. /// Return the key and mut value iter
  1237. #[inline]
  1238. pub fn iter_mut(&mut self) -> IterMut<K, V> {
  1239. IterMut {
  1240. head: self.first_child(),
  1241. tail: self.last_child(),
  1242. len: self.len,
  1243. _marker: marker::PhantomData,
  1244. }
  1245. }
  1246. }
  1247. mod tests {
  1248. #[test]
  1249. fn test_insert() {
  1250. let mut m = RBTree::new();
  1251. assert_eq!(m.len(), 0);
  1252. m.insert(1, 2);
  1253. assert_eq!(m.len(), 1);
  1254. m.insert(2, 4);
  1255. assert_eq!(m.len(), 2);
  1256. m.insert(2, 6);
  1257. assert_eq!(m.len(), 3);
  1258. assert_eq!(*m.get(&1).unwrap(), 2);
  1259. assert_eq!(*m.get(&2).unwrap(), 4);
  1260. assert_eq!(*m.get(&2).unwrap(), 4);
  1261. }
  1262. #[test]
  1263. fn test_replace() {
  1264. let mut m = RBTree::new();
  1265. assert_eq!(m.len(), 0);
  1266. m.insert(2, 4);
  1267. assert_eq!(m.len(), 1);
  1268. assert_eq!(m.replace_or_insert(2, 6).unwrap(), 4);
  1269. assert_eq!(m.len(), 1);
  1270. assert_eq!(*m.get(&2).unwrap(), 6);
  1271. }
  1272. #[test]
  1273. fn test_clone() {
  1274. let mut m = RBTree::new();
  1275. assert_eq!(m.len(), 0);
  1276. m.insert(1, 2);
  1277. assert_eq!(m.len(), 1);
  1278. m.insert(2, 4);
  1279. assert_eq!(m.len(), 2);
  1280. let m2 = m.clone();
  1281. m.clear();
  1282. assert_eq!(*m2.get(&1).unwrap(), 2);
  1283. assert_eq!(*m2.get(&2).unwrap(), 4);
  1284. assert_eq!(m2.len(), 2);
  1285. }
  1286. #[test]
  1287. fn test_empty_remove() {
  1288. let mut m: RBTree<isize, bool> = RBTree::new();
  1289. assert_eq!(m.remove(&0), None);
  1290. }
  1291. #[test]
  1292. fn test_empty_iter() {
  1293. let mut m: RBTree<isize, bool> = RBTree::new();
  1294. assert_eq!(m.iter().next(), None);
  1295. assert_eq!(m.iter_mut().next(), None);
  1296. assert_eq!(m.len(), 0);
  1297. assert!(m.is_empty());
  1298. assert_eq!(m.into_iter().next(), None);
  1299. }
  1300. #[test]
  1301. fn test_lots_of_insertions() {
  1302. let mut m = RBTree::new();
  1303. // Try this a few times to make sure we never screw up the hashmap's
  1304. // internal state.
  1305. for _ in 0..10 {
  1306. assert!(m.is_empty());
  1307. for i in 1..101 {
  1308. m.insert(i, i);
  1309. for j in 1..i + 1 {
  1310. let r = m.get(&j);
  1311. assert_eq!(r, Some(&j));
  1312. }
  1313. for j in i + 1..101 {
  1314. let r = m.get(&j);
  1315. assert_eq!(r, None);
  1316. }
  1317. }
  1318. for i in 101..201 {
  1319. assert!(!m.contains_key(&i));
  1320. }
  1321. // remove forwards
  1322. for i in 1..101 {
  1323. assert!(m.remove(&i).is_some());
  1324. for j in 1..i + 1 {
  1325. assert!(!m.contains_key(&j));
  1326. }
  1327. for j in i + 1..101 {
  1328. assert!(m.contains_key(&j));
  1329. }
  1330. }
  1331. for i in 1..101 {
  1332. assert!(!m.contains_key(&i));
  1333. }
  1334. for i in 1..101 {
  1335. m.insert(i, i);
  1336. }
  1337. // remove backwards
  1338. for i in (1..101).rev() {
  1339. assert!(m.remove(&i).is_some());
  1340. for j in i..101 {
  1341. assert!(!m.contains_key(&j));
  1342. }
  1343. for j in 1..i {
  1344. assert!(m.contains_key(&j));
  1345. }
  1346. }
  1347. }
  1348. }
  1349. #[test]
  1350. fn test_find_mut() {
  1351. let mut m = RBTree::new();
  1352. m.insert(1, 12);
  1353. m.insert(2, 8);
  1354. m.insert(5, 14);
  1355. let new = 100;
  1356. match m.get_mut(&5) {
  1357. None => panic!(),
  1358. Some(x) => *x = new,
  1359. }
  1360. assert_eq!(m.get(&5), Some(&new));
  1361. }
  1362. #[test]
  1363. fn test_remove() {
  1364. let mut m = RBTree::new();
  1365. m.insert(1, 2);
  1366. assert_eq!(*m.get(&1).unwrap(), 2);
  1367. m.insert(5, 3);
  1368. assert_eq!(*m.get(&5).unwrap(), 3);
  1369. m.insert(9, 4);
  1370. assert_eq!(*m.get(&1).unwrap(), 2);
  1371. assert_eq!(*m.get(&5).unwrap(), 3);
  1372. assert_eq!(*m.get(&9).unwrap(), 4);
  1373. assert_eq!(m.remove(&1).unwrap(), 2);
  1374. assert_eq!(m.remove(&5).unwrap(), 3);
  1375. assert_eq!(m.remove(&9).unwrap(), 4);
  1376. assert_eq!(m.len(), 0);
  1377. }
  1378. #[test]
  1379. fn test_is_empty() {
  1380. let mut m = RBTree::new();
  1381. m.insert(1, 2);
  1382. assert!(!m.is_empty());
  1383. assert!(m.remove(&1).is_some());
  1384. assert!(m.is_empty());
  1385. }
  1386. #[test]
  1387. fn test_pop() {
  1388. let mut m = RBTree::new();
  1389. m.insert(2, 4);
  1390. m.insert(1, 2);
  1391. m.insert(3, 6);
  1392. assert_eq!(m.len(), 3);
  1393. assert_eq!(m.pop_first(), Some((1, 2)));
  1394. assert_eq!(m.len(), 2);
  1395. assert_eq!(m.pop_last(), Some((3, 6)));
  1396. assert_eq!(m.len(), 1);
  1397. assert_eq!(m.get_first(), Some((&2, &4)));
  1398. assert_eq!(m.get_last(), Some((&2, &4)));
  1399. }
  1400. #[test]
  1401. fn test_iterate() {
  1402. let mut m = RBTree::new();
  1403. for i in 0..32 {
  1404. m.insert(i, i * 2);
  1405. }
  1406. assert_eq!(m.len(), 32);
  1407. let mut observed: u32 = 0;
  1408. for (k, v) in m.iter() {
  1409. assert_eq!(*v, *k * 2);
  1410. observed |= 1 << *k;
  1411. }
  1412. assert_eq!(observed, 0xFFFF_FFFF);
  1413. }
  1414. #[test]
  1415. fn test_keys() {
  1416. let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')];
  1417. let map: RBTree<_, _> = vec.into_iter().collect();
  1418. let keys: Vec<_> = map.keys().cloned().collect();
  1419. assert_eq!(keys.len(), 3);
  1420. assert!(keys.contains(&1));
  1421. assert!(keys.contains(&2));
  1422. assert!(keys.contains(&3));
  1423. }
  1424. #[test]
  1425. fn test_values() {
  1426. let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')];
  1427. let map: RBTree<_, _> = vec.into_iter().collect();
  1428. let values: Vec<_> = map.values().cloned().collect();
  1429. assert_eq!(values.len(), 3);
  1430. assert!(values.contains(&'a'));
  1431. assert!(values.contains(&'b'));
  1432. assert!(values.contains(&'c'));
  1433. }
  1434. #[test]
  1435. fn test_values_mut() {
  1436. let vec = vec![(1, 1), (2, 2), (3, 3)];
  1437. let mut map: RBTree<_, _> = vec.into_iter().collect();
  1438. for value in map.values_mut() {
  1439. *value = (*value) * 2
  1440. }
  1441. let values: Vec<_> = map.values().cloned().collect();
  1442. assert_eq!(values.len(), 3);
  1443. assert!(values.contains(&2));
  1444. assert!(values.contains(&4));
  1445. assert!(values.contains(&6));
  1446. }
  1447. #[test]
  1448. fn test_find() {
  1449. let mut m = RBTree::new();
  1450. assert!(m.get(&1).is_none());
  1451. m.insert(1, 2);
  1452. match m.get(&1) {
  1453. None => panic!(),
  1454. Some(v) => assert_eq!(*v, 2),
  1455. }
  1456. }
  1457. #[test]
  1458. fn test_eq() {
  1459. let mut m1 = RBTree::new();
  1460. m1.insert(1, 2);
  1461. m1.insert(2, 3);
  1462. m1.insert(3, 4);
  1463. let mut m2 = RBTree::new();
  1464. m2.insert(1, 2);
  1465. m2.insert(2, 3);
  1466. assert!(m1 != m2);
  1467. m2.insert(3, 4);
  1468. assert_eq!(m1, m2);
  1469. }
  1470. #[test]
  1471. fn test_show() {
  1472. let mut map = RBTree::new();
  1473. let empty: RBTree<i32, i32> = RBTree::new();
  1474. map.insert(1, 2);
  1475. map.insert(3, 4);
  1476. let map_str = format!("{:?}", map);
  1477. assert!(map_str == "{1: 2, 3: 4}" || map_str == "{3: 4, 1: 2}");
  1478. assert_eq!(format!("{:?}", empty), "{}");
  1479. }
  1480. #[test]
  1481. fn test_from_iter() {
  1482. let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)];
  1483. let map: RBTree<_, _> = xs.iter().cloned().collect();
  1484. for &(k, v) in &xs {
  1485. assert_eq!(map.get(&k), Some(&v));
  1486. }
  1487. }
  1488. #[test]
  1489. fn test_size_hint() {
  1490. let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)];
  1491. let map: RBTree<_, _> = xs.iter().cloned().collect();
  1492. let mut iter = map.iter();
  1493. for _ in iter.by_ref().take(3) {}
  1494. assert_eq!(iter.size_hint(), (3, Some(3)));
  1495. }
  1496. #[test]
  1497. fn test_iter_len() {
  1498. let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)];
  1499. let map: RBTree<_, _> = xs.iter().cloned().collect();
  1500. let mut iter = map.iter();
  1501. for _ in iter.by_ref().take(3) {}
  1502. assert_eq!(iter.count(), 3);
  1503. }
  1504. #[test]
  1505. fn test_mut_size_hint() {
  1506. let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)];
  1507. let mut map: RBTree<_, _> = xs.iter().cloned().collect();
  1508. let mut iter = map.iter_mut();
  1509. for _ in iter.by_ref().take(3) {}
  1510. assert_eq!(iter.size_hint(), (3, Some(3)));
  1511. }
  1512. #[test]
  1513. fn test_iter_mut_len() {
  1514. let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)];
  1515. let mut map: RBTree<_, _> = xs.iter().cloned().collect();
  1516. let mut iter = map.iter_mut();
  1517. for _ in iter.by_ref().take(3) {}
  1518. assert_eq!(iter.count(), 3);
  1519. }
  1520. #[test]
  1521. fn test_index() {
  1522. let mut map = RBTree::new();
  1523. map.insert(1, 2);
  1524. map.insert(2, 1);
  1525. map.insert(3, 4);
  1526. assert_eq!(map[&2], 1);
  1527. }
  1528. #[test]
  1529. #[should_panic]
  1530. fn test_index_nonexistent() {
  1531. let mut map = RBTree::new();
  1532. map.insert(1, 2);
  1533. map.insert(2, 1);
  1534. map.insert(3, 4);
  1535. map[&4];
  1536. }
  1537. #[test]
  1538. fn test_extend_iter() {
  1539. let mut a = RBTree::new();
  1540. a.insert(1, "one");
  1541. let mut b = RBTree::new();
  1542. b.insert(2, "two");
  1543. b.insert(3, "three");
  1544. a.extend(b.into_iter());
  1545. assert_eq!(a.len(), 3);
  1546. assert_eq!(a[&1], "one");
  1547. assert_eq!(a[&2], "two");
  1548. assert_eq!(a[&3], "three");
  1549. }
  1550. }