[−][src]Trait threshold::EventSet
EventSet trait to be implemented by MaxSet
, BelowExSet
and AboveExSet
.
Required methods
fn new() -> Self
Returns a new instance.
fn next_event(&mut self) -> u64
Generates the next event.
fn add_event(&mut self, event: u64)
Adds an event to the set.
fn is_event(&self, event: &u64) -> bool
Checks if an event is part of the set.
fn events(&self) -> (u64, Vec<u64>)
Returns all events seen as a pair.
For MaxSet
:
- the first component is the highest event
- the second component is empty
For BelowExSet
:
- the first component is the highest event
- the second component is a set of exceptions
For AboveExSet
:
- the first component is the highest event in a contiguous sequence
- the second component is a set of outstanding events
If we've seen events [1, 2, 3, 5, 6], this function returns in
MaxSet
: (6, [])BelowExSet
: (6, [4])AboveExSet
: (3, [5, 6])
fn frontier(&self) -> u64
Returns the frontier (the highest contiguous event seen).
fn join(&mut self, other: &Self)
Merges other
EventSet
into self
.
Provided methods
fn from_event(event: u64) -> Self
Creates a new instance from event
.
fn from_events<I: IntoIterator<Item = u64>>(iter: I) -> Self
Creates a new instance from several events
.
Implementors
impl EventSet for AboveExSet
[src]
fn new() -> Self
[src]
Returns a new AboveExSet
instance.
fn next_event(&mut self) -> u64
[src]
Generates the next event. There should be no extras when calling this.
Examples
use threshold::*; let mut above_exset = AboveExSet::new(); assert_eq!(above_exset.next_event(), 1); assert_eq!(above_exset.next_event(), 2);
fn add_event(&mut self, event: u64)
[src]
Adds an event to the set.
Examples
use threshold::*; let mut above_exset = AboveExSet::new(); above_exset.add_event(1); assert!(above_exset.is_event(&1)); assert!(!above_exset.is_event(&2)); above_exset.add_event(3); assert!(above_exset.is_event(&1)); assert!(!above_exset.is_event(&2)); assert!(above_exset.is_event(&3)); above_exset.add_event(2); assert!(above_exset.is_event(&1)); assert!(above_exset.is_event(&2)); assert!(above_exset.is_event(&3));
fn is_event(&self, event: &u64) -> bool
[src]
Checks if an event is part of the set.
Examples
use threshold::*; let mut above_exset = AboveExSet::new(); let event = above_exset.next_event(); assert!(above_exset.is_event(&event)); above_exset.add_event(3); assert!(!above_exset.is_event(&2)); assert!(above_exset.is_event(&3));
fn events(&self) -> (u64, Vec<u64>)
[src]
Returns all events seen as a tuple. The first component is the highest event seen, while the second is a vector with the exceptions (in no specific order).
Examples
use threshold::*; let mut above_exset = AboveExSet::new(); above_exset.add_event(1); assert_eq!(above_exset.events(), (1, vec![])); above_exset.add_event(3); assert_eq!(above_exset.events(), (1, vec![3])); above_exset.add_event(2); assert_eq!(above_exset.events(), (3, vec![])); above_exset.add_event(4); assert_eq!(above_exset.events(), (4, vec![])); above_exset.add_event(6); assert_eq!(above_exset.events(), (4, vec![6]));
fn frontier(&self) -> u64
[src]
Returns the frontier (the highest contiguous event seen).
Examples
use threshold::*; let mut above_exset = AboveExSet::new(); assert_eq!(above_exset.frontier(), 0); above_exset.add_event(1); assert_eq!(above_exset.frontier(), 1); above_exset.add_event(3); assert_eq!(above_exset.frontier(), 1); above_exset.add_event(2); assert_eq!(above_exset.frontier(), 3); above_exset.add_event(4); assert_eq!(above_exset.frontier(), 4); above_exset.add_event(6); assert_eq!(above_exset.frontier(), 4);
fn join(&mut self, other: &Self)
[src]
Merges other
AboveExSet
into self
.
Examples
use threshold::*; let mut above_exset = AboveExSet::new(); above_exset.add_event(1); above_exset.add_event(3); above_exset.add_event(4); assert_eq!(above_exset.events(), (1, vec![3, 4])); above_exset.join(&AboveExSet::from_event(3)); assert_eq!(above_exset.events(), (1, vec![3, 4])); above_exset.join(&AboveExSet::from_event(5)); assert_eq!(above_exset.events(), (1, vec![3, 4, 5])); let mut other = AboveExSet::new(); other.add_event(2); other.add_event(7); above_exset.join(&other); assert_eq!(above_exset.events(), (5, vec![7]));
impl EventSet for BelowExSet
[src]
fn new() -> Self
[src]
Returns a new BelowExSet
instance.
fn next_event(&mut self) -> u64
[src]
Generates the next event. There should be no exceptions when calling this.
Examples
use threshold::*; let mut below_exset = BelowExSet::new(); assert_eq!(below_exset.next_event(), 1); assert_eq!(below_exset.next_event(), 2);
fn add_event(&mut self, event: u64)
[src]
Adds an event to the set.
Examples
use threshold::*; let mut below_exset = BelowExSet::new(); below_exset.add_event(1); assert!(below_exset.is_event(&1)); assert!(!below_exset.is_event(&2)); below_exset.add_event(3); assert!(below_exset.is_event(&1)); assert!(!below_exset.is_event(&2)); assert!(below_exset.is_event(&3)); below_exset.add_event(2); assert!(below_exset.is_event(&1)); assert!(below_exset.is_event(&2)); assert!(below_exset.is_event(&3));
fn is_event(&self, event: &u64) -> bool
[src]
Checks if an event is part of the set.
Examples
use threshold::*; let mut below_exset = BelowExSet::new(); let event = below_exset.next_event(); assert!(below_exset.is_event(&event)); below_exset.add_event(3); assert!(!below_exset.is_event(&2)); assert!(below_exset.is_event(&3));
fn events(&self) -> (u64, Vec<u64>)
[src]
Returns all events seen as a tuple. The first component is the highest event seen, while the second is a vector with the exceptions (in no specific order).
Examples
use threshold::*; let mut below_exset = BelowExSet::new(); below_exset.add_event(1); assert_eq!(below_exset.events(), (1, vec![])); below_exset.add_event(3); assert_eq!(below_exset.events(), (3, vec![2])); below_exset.add_event(2); assert_eq!(below_exset.events(), (3, vec![])); below_exset.add_event(4); assert_eq!(below_exset.events(), (4, vec![])); below_exset.add_event(6); assert_eq!(below_exset.events(), (6, vec![5]));
fn frontier(&self) -> u64
[src]
Returns the frontier (the highest contiguous event seen).
Note: this method's implementation will sort all exceptions on each
call, and with that, the performance will not be great. If this
becomes a problem, we could cache the frontier (as in AboveExSet
)
so that it doesn't have to be computed here on each call.
Examples
use threshold::*; let mut below_exset = BelowExSet::new(); assert_eq!(below_exset.frontier(), 0); below_exset.add_event(1); assert_eq!(below_exset.frontier(), 1); below_exset.add_event(3); assert_eq!(below_exset.frontier(), 1); below_exset.add_event(2); assert_eq!(below_exset.frontier(), 3); below_exset.add_event(4); assert_eq!(below_exset.frontier(), 4); below_exset.add_event(6); assert_eq!(below_exset.frontier(), 4);
fn join(&mut self, other: &Self)
[src]
Merges other
BelowExSet
into self
.
Examples
use threshold::*; let mut below_exset = BelowExSet::new(); below_exset.add_event(1); below_exset.add_event(3); below_exset.add_event(4); assert_eq!(below_exset.events(), (4, vec![2])); below_exset.join(&BelowExSet::from_event(3)); assert_eq!(below_exset.events(), (4, vec![2])); below_exset.join(&BelowExSet::from_event(5)); assert_eq!(below_exset.events(), (5, vec![2])); let mut other = BelowExSet::new(); other.add_event(2); other.add_event(7); below_exset.join(&other); assert_eq!(below_exset.events(), (7, vec![6]));
impl EventSet for MaxSet
[src]
fn new() -> Self
[src]
Returns a new MaxSet
instance.
fn next_event(&mut self) -> u64
[src]
Generates the next event.
Examples
use threshold::*; let mut maxset = MaxSet::new(); assert_eq!(maxset.next_event(), 1); assert_eq!(maxset.next_event(), 2);
fn add_event(&mut self, event: u64)
[src]
Adds an event to the set.
Examples
use threshold::*; let mut maxset = MaxSet::new(); assert!(!maxset.is_event(&9)); assert!(!maxset.is_event(&10)); maxset.add_event(10); assert!(maxset.is_event(&9)); assert!(maxset.is_event(&10));
fn is_event(&self, event: &u64) -> bool
[src]
Checks if an event is part of the set.
Examples
use threshold::*; let mut maxset = MaxSet::new(); let event = maxset.next_event(); assert!(maxset.is_event(&event));
fn events(&self) -> (u64, Vec<u64>)
[src]
Returns all events seen.
Examples
use threshold::*; let mut maxset = MaxSet::new(); maxset.add_event(2); maxset.add_event(4); assert_eq!(maxset.events(), (4, vec![]));
fn frontier(&self) -> u64
[src]
Returns the frontier (the highest contiguous event seen).
For a MaxSet
, this is not necessarily the highest contiguous event,
but simply the highest event.
For exact EventSet
representations that will actually return the
highest contiguous event, see AboveExSet
and BelowExSet
.
Examples
use threshold::*; let mut maxset = MaxSet::new(); assert_eq!(maxset.frontier(), 0); maxset.add_event(1); assert_eq!(maxset.frontier(), 1); maxset.add_event(3); assert_eq!(maxset.frontier(), 3); maxset.add_event(2); assert_eq!(maxset.frontier(), 3); maxset.add_event(4); assert_eq!(maxset.frontier(), 4); maxset.add_event(6); assert_eq!(maxset.frontier(), 6);
fn join(&mut self, other: &Self)
[src]
Merges other
MaxSet
into self
.
Examples
use threshold::*; let mut maxset = MaxSet::from_event(10); assert!(!maxset.is_event(&20)); maxset.join(&MaxSet::from_event(20)); assert!(maxset.is_event(&20));