Add a "first_item" entry for Section.
This will make it simpler to implement digests for sections.
This commit is contained in:
parent
96f3d8c846
commit
47c3a11d2c
|
@ -86,6 +86,7 @@ impl<'a, K: Keyword> TokVal<'a, K> {
|
||||||
pub struct Section<'a, T: Keyword> {
|
pub struct Section<'a, T: Keyword> {
|
||||||
/// Map from Keyword index to TokVal
|
/// Map from Keyword index to TokVal
|
||||||
v: Vec<TokVal<'a, T>>,
|
v: Vec<TokVal<'a, T>>,
|
||||||
|
first: Option<T>,
|
||||||
last: Option<T>,
|
last: Option<T>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,8 +96,11 @@ impl<'a, T: Keyword> Section<'a, T> {
|
||||||
let n = T::n_vals();
|
let n = T::n_vals();
|
||||||
let mut v = Vec::with_capacity(n);
|
let mut v = Vec::with_capacity(n);
|
||||||
v.resize(n, TokVal::None);
|
v.resize(n, TokVal::None);
|
||||||
let last = None;
|
Section {
|
||||||
Section { v, last }
|
v,
|
||||||
|
first: None,
|
||||||
|
last: None,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/// Helper: return the tokval for some Keyword.
|
/// Helper: return the tokval for some Keyword.
|
||||||
fn get_tokval(&self, t: T) -> &TokVal<'a, T> {
|
fn get_tokval(&self, t: T) -> &TokVal<'a, T> {
|
||||||
|
@ -126,8 +130,18 @@ impl<'a, T: Keyword> Section<'a, T> {
|
||||||
pub fn maybe<'b>(&'b self, t: T) -> MaybeItem<'b, 'a, T> {
|
pub fn maybe<'b>(&'b self, t: T) -> MaybeItem<'b, 'a, T> {
|
||||||
MaybeItem::from_option(self.get(t))
|
MaybeItem::from_option(self.get(t))
|
||||||
}
|
}
|
||||||
|
/// Return the first item that was accepted for this section, or None
|
||||||
|
/// if no items were accepted for this section.
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn first_item(&self) -> Option<&Item<'a, T>> {
|
||||||
|
match self.first {
|
||||||
|
None => None,
|
||||||
|
Some(t) => self.get_tokval(t).first(),
|
||||||
|
}
|
||||||
|
}
|
||||||
/// Return the last item that was accepted for this section, or None
|
/// Return the last item that was accepted for this section, or None
|
||||||
/// if no items were accepted for this section.
|
/// if no items were accepted for this section.
|
||||||
|
#[allow(dead_code)]
|
||||||
pub fn last_item(&self) -> Option<&Item<'a, T>> {
|
pub fn last_item(&self) -> Option<&Item<'a, T>> {
|
||||||
match self.last {
|
match self.last {
|
||||||
None => None,
|
None => None,
|
||||||
|
@ -153,6 +167,9 @@ impl<'a, T: Keyword> Section<'a, T> {
|
||||||
v.push(item);
|
v.push(item);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
if self.first.is_none() {
|
||||||
|
self.first = Some(t);
|
||||||
|
}
|
||||||
self.last = Some(t);
|
self.last = Some(t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue