Module safe_index::examples::basic[][src]

Expand description

A basic example.

safe_index::new!{
    /// Index of a variable.
    VarIndex,
    /// Set of variable indexes.
    btree set: VarBSet,
    /// Map of variable indexes.
    btree map: VarBMap,
    /// Vector indexed by variable indexes.
    map: VarMap,
}
fn main() {
    use std::mem::size_of;
    assert_eq!( size_of::<VarIndex>(), size_of::<usize>() );
    assert_eq!( size_of::<VarMap<String>>(), size_of::<Vec<String>>() );

    let mut var_values = VarMap::with_capacity(3);
    let v_0 = var_values.push(7);
    let v_1 = var_values.push(3);
    let v_2 = var_values.push(11);
    assert_eq! { var_values[v_0], 7  }
    assert_eq! { var_values[v_1], 3  }
    assert_eq! { var_values[v_2], 11 }

    let mut iter = var_values[v_0..v_2].into_iter();
    assert_eq! { iter.next(), Some(&7)  }
    assert_eq! { iter.next(), Some(&3)  }
    assert_eq! { iter.next(), None      }
    let mut iter = var_values[v_0..=v_2].into_iter();
    assert_eq! { iter.next(), Some(&7)  }
    assert_eq! { iter.next(), Some(&3)  }
    assert_eq! { iter.next(), Some(&11) }
    assert_eq! { iter.next(), None      }
    let mut iter = var_values[..=v_2].into_iter();
    assert_eq! { iter.next(), Some(&7)  }
    assert_eq! { iter.next(), Some(&3)  }
    assert_eq! { iter.next(), Some(&11) }
    assert_eq! { iter.next(), None      }
    let mut iter = var_values[..=v_2].into_iter();
    assert_eq! { iter.next(), Some(&7)  }
    assert_eq! { iter.next(), Some(&3)  }
    assert_eq! { iter.next(), Some(&11) }
    assert_eq! { iter.next(), None      }

    let mut check = vec![11, 3, 7];
    for val in &var_values {
        assert_eq! { *val, check.pop().unwrap() }
    }

    let mut check = vec![(v_2, 11), (v_1, 3), (v_0, 7)];
    for (idx, val) in var_values.index_iter() {
        let (i, v) = check.pop().unwrap();
        assert_eq! {  idx, i }
        assert_eq! { *val, v }
    }

    let mut check = vec![11, 3, 7];
    for idx in var_values.indices() {
        assert_eq! { var_values[idx], check.pop().unwrap() }
    }

    var_values.swap(v_0, v_2);
    assert_eq! { var_values[v_0], 11 }
    assert_eq! { var_values[v_1], 3  }
    assert_eq! { var_values[v_2], 7  }
}

Structs

Index of a variable.

Vector indexed by variable indexes.

Type Definitions

Map of variable indexes.

Set of variable indexes.