[][src]Struct exonum_merkledb::list_index::ListIndex

pub struct ListIndex<T: IndexAccess, V> { /* fields omitted */ }

A list of items where elements are added to the end of the list and are removed starting from the end of the list.

Access to the elements is obtained using the indices of the list items. ListIndex implements an array list, storing the elements as values and using u64 as an index. ListIndex requires that elements implement the BinaryValue trait.

Methods

impl<T, V> ListIndex<T, V> where
    T: IndexAccess,
    V: BinaryValue
[src]

pub fn new<S: Into<String>>(index_name: S, index_access: T) -> Self[src]

Creates a new index representation based on the name and storage view.

Storage view can be specified as &Snapshot or &mut Fork. In the first case, only immutable methods are available. In the second case, both immutable and mutable methods are available.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let snapshot = db.snapshot();
let index: ListIndex<_, u8> = ListIndex::new(name, &snapshot);

pub fn new_in_family<S, I>(
    family_name: S,
    index_id: &I,
    index_access: T
) -> Self where
    I: BinaryKey,
    I: ?Sized,
    S: Into<String>, 
[src]

Creates a new index representation based on the name, index ID in family and storage view.

Storage view can be specified as &Snapshot or &mut Fork. In the first case, only immutable methods are available. In the second case, both immutable and mutable methods are available.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let index_id = vec![01];
let snapshot = db.snapshot();
let index: ListIndex<_, u8> = ListIndex::new_in_family(name, &index_id, &snapshot);

pub fn get(&self, index: u64) -> Option<V>[src]

Returns an element at the indicated position or None if the indicated position is out of bounds.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let fork = db.fork();
let mut index = ListIndex::new(name, &fork);
assert_eq!(None, index.get(0));

index.push(42);
assert_eq!(Some(42), index.get(0));

pub fn last(&self) -> Option<V>[src]

Returns the last element of the list or None if the list is empty.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let fork = db.fork();
let mut index = ListIndex::new(name, &fork);
assert_eq!(None, index.last());

index.push(42);
assert_eq!(Some(42), index.last());

pub fn is_empty(&self) -> bool[src]

Returns true if the list contains no elements.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let fork = db.fork();
let mut index = ListIndex::new(name, &fork);
assert!(index.is_empty());

index.push(42);
assert!(!index.is_empty());

pub fn len(&self) -> u64[src]

Returns the number of elements in the list.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let fork = db.fork();
let mut index = ListIndex::new(name, &fork);
assert_eq!(0, index.len());

index.push(10);
assert_eq!(1, index.len());

index.push(100);
assert_eq!(2, index.len());

Important traits for ListIndexIter<'a, V>
pub fn iter(&self) -> ListIndexIter<V>[src]

Returns an iterator over the list. The iterator element type is V.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let fork = db.fork();
let mut index = ListIndex::new(name, &fork);

index.extend([1, 2, 3, 4, 5].iter().cloned());

for val in index.iter() {
    println!("{}", val);
}

Important traits for ListIndexIter<'a, V>
pub fn iter_from(&self, from: u64) -> ListIndexIter<V>[src]

Returns an iterator over the list starting from the specified position. The iterator element type is V.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let fork = db.fork();
let mut index = ListIndex::new(name, &fork);

index.extend([1, 2, 3, 4, 5].iter().cloned());

for val in index.iter_from(3) {
    println!("{}", val);
}

pub fn push(&mut self, value: V)[src]

Appends an element to the back of the list.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let fork = db.fork();
let mut index = ListIndex::new(name, &fork);

index.push(1);
assert!(!index.is_empty());

pub fn pop(&mut self) -> Option<V>[src]

Removes the last element from the list and returns it, or returns None if it is empty.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let fork = db.fork();
let mut index = ListIndex::new(name, &fork);
assert_eq!(None, index.pop());

index.push(1);
assert_eq!(Some(1), index.pop());

pub fn extend<I>(&mut self, iter: I) where
    I: IntoIterator<Item = V>, 
[src]

Extends the list with the contents of an iterator.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let fork = db.fork();
let mut index = ListIndex::new(name, &fork);
assert!(index.is_empty());

index.extend([1, 2, 3].iter().cloned());
assert_eq!(3, index.len());

pub fn truncate(&mut self, len: u64)[src]

Shortens the list, keeping the indicated number of first len elements and dropping the rest.

If len is greater than the current state of the list, this has no effect.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let fork = db.fork();
let mut index = ListIndex::new(name, &fork);

index.extend([1, 2, 3, 4, 5].iter().cloned());
assert_eq!(5, index.len());

index.truncate(3);
assert_eq!(3, index.len());

pub fn set(&mut self, index: u64, value: V)[src]

Changes a value at the specified position.

Panics

Panics if the indicated position (index) is equal to or greater than the current state of the list.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let fork = db.fork();
let mut index = ListIndex::new(name, &fork);

index.push(1);
assert_eq!(Some(1), index.get(0));

index.set(0, 10);
assert_eq!(Some(10), index.get(0));

pub fn clear(&mut self)[src]

Clears the list, removing all values.

Notes

Currently, this method is not optimized to delete a large set of data. During the execution of this method, the amount of allocated memory is linearly dependent on the number of elements in the index.

Examples

use exonum_merkledb::{TemporaryDB, Database, ListIndex};

let db = TemporaryDB::new();
let name = "name";
let fork = db.fork();
let mut index = ListIndex::new(name, &fork);

index.push(1);
assert!(!index.is_empty());

index.clear();
assert!(index.is_empty());

Trait Implementations

impl<'a, T, V> IntoIterator for &'a ListIndex<T, V> where
    T: IndexAccess,
    V: BinaryValue
[src]

type Item = V

The type of the elements being iterated over.

type IntoIter = ListIndexIter<'a, V>

Which kind of iterator are we turning this into?

impl<T: Debug + IndexAccess, V: Debug> Debug for ListIndex<T, V>[src]

Auto Trait Implementations

impl<T, V> !Sync for ListIndex<T, V>

impl<T, V> Send for ListIndex<T, V> where
    T: Send,
    V: Send,
    <T as IndexAccess>::Changes: Send

impl<T, V> Unpin for ListIndex<T, V> where
    T: Unpin,
    V: Unpin,
    <T as IndexAccess>::Changes: Unpin

impl<T, V> !RefUnwindSafe for ListIndex<T, V>

impl<T, V> UnwindSafe for ListIndex<T, V> where
    T: UnwindSafe,
    V: UnwindSafe,
    <T as IndexAccess>::Changes: UnwindSafe

Blanket Implementations

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,