gavl 0.1.5

A fast implementation for a map and a set using an AVL tree
Documentation
use std::{
    fmt,
    fmt::{
        Debug,
        Formatter,
    },
};

use super::{
    structs::Side,
    MapNode,
    Map,
    MapLink,
};

impl<KeyType:Ord+Debug, ContentType:Debug> Debug for MapNode<KeyType, ContentType>{
    fn fmt(&self, formater: &mut Formatter) -> fmt::Result {
        match *self {
            MapNode{
                ref father,
                ref key,
                ref content, 
                ref depth, 
                ref son,
                ..
            } => {
                let mut builder = formater.debug_struct("MapNode");
                if let Some(data) = son[Side::Left] {
                    unsafe {
                        let _ = builder.field("LeftSon", &&(data.as_ref()));
                    }
                }
                let _ = builder.field("LeftDepth", &&(depth[Side::Left]));
                let _ = builder.field("LeftDir", &&(son[Side::Left]));
                match father {
                    Some(data) => {
                        let _ = builder.field("father", &&(*data));
                    },
                    None => {
                        let _ = builder.field("father", &&(*father));
                    }
                }
                let _ = builder.field("key", &&(*key));
                let _ = builder.field("content", &&(*content));
                let _ = builder.field("rightDir", &&(son[Side::Right]));
                let _ = builder.field("RightDepth", &&(depth[Side::Right]));
                if let Some(data) = son[Side::Right] {
                    unsafe {
                        let _ = builder.field("RightSon", &&(data.as_ref()));
                    }
                }
                builder.finish()
            }
        }
    }
}

impl<KeyType:Ord+Debug, ContentType:Debug> Debug for Map<KeyType, ContentType>{
    fn fmt(&self, formater: &mut Formatter) -> fmt::Result {
        match *self {
            Map{
                ref size,
                ref head
            } => {
                let mut builder = formater.debug_struct("Map");
                let _ = builder.field("size", &&(*size));
                match head.as_ref() {
                    None => {
                        let _ = builder.field("head", &&(*head));
                        
                    },
                    Some(node) => unsafe {
                        let _ = builder.field("head", &&((node.as_ref())));
                    }
                }
                builder.finish()
            }
        }
    }
}

#[allow(dead_code)]
fn dbg_prnt<KeyType:Ord+Debug, ContentType:Debug>(node:MapLink<KeyType, ContentType>) {
    let node_ref = unsafe{ node.as_ref() };
    println!("\n<><>\nnode {:?} content{:?}\n<><>\n", node, node_ref.content);
}