src/bisection_tree/supportid.rs

Mon, 24 Oct 2022 09:41:43 +0300

author
Tuomo Valkonen <tuomov@iki.fi>
date
Mon, 24 Oct 2022 09:41:43 +0300
changeset 3
20db884b7028
parent 0
9f27689eb130
child 5
59dc4c5883f4
permissions
-rw-r--r--

Allow step closure of AlgIterators to indicate succesfull termination or failure.

use std::marker::PhantomData;

#[derive(Debug)]
pub struct SupportId<S> {
    pub id : usize,
    _phantom : PhantomData<S>
}

// derive fails so need to do Copy and Clone manually

impl<S> Clone for SupportId<S> {
    fn clone(&self) -> Self {
        SupportId { id : self.id, _phantom : PhantomData }
    }
}

impl<S> Copy for SupportId<S> {}

impl<S> From<u32> for SupportId<S> {
    #[inline]
    fn from(id : u32) -> SupportId<S> {
        SupportId { id : id as usize, _phantom : PhantomData }
    }
}

impl<S> From<usize> for SupportId<S> {
    #[inline]
    fn from(id : usize) -> SupportId<S> {
        SupportId { id : id, _phantom : PhantomData }
    }
}

impl<S> Into<usize> for SupportId<S> {
    #[inline]
    fn into(self) -> usize {
        self.id
    }
}

mercurial