mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-12 22:31:02 +00:00
experiment with removing state machine from OuterDeserializer
588ns vs 552ns
This commit is contained in:
@@ -1182,14 +1182,22 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct OuterDeserializer {
|
struct OuterDeserializer {
|
||||||
stack: Vec<OuterDeserializerState>,
|
//stack: Vec<OuterDeserializerState>,
|
||||||
|
tokens: Vec<Token>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl OuterDeserializer {
|
impl OuterDeserializer {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn new(outer: Outer) -> OuterDeserializer {
|
fn new(outer: Outer) -> OuterDeserializer {
|
||||||
OuterDeserializer {
|
OuterDeserializer {
|
||||||
stack: vec!(OuterDeserializerOuterState(outer)),
|
//stack: vec!(OuterDeserializerOuterState(outer)),
|
||||||
|
tokens: vec!(
|
||||||
|
End,
|
||||||
|
End,
|
||||||
|
SeqStart(0),
|
||||||
|
StructField("inner"),
|
||||||
|
StructStart("Outer")
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1197,6 +1205,12 @@ mod tests {
|
|||||||
impl Iterator<Result<Token, Error>> for OuterDeserializer {
|
impl Iterator<Result<Token, Error>> for OuterDeserializer {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn next(&mut self) -> Option<Result<Token, Error>> {
|
fn next(&mut self) -> Option<Result<Token, Error>> {
|
||||||
|
match self.tokens.pop() {
|
||||||
|
Some(token) => Some(Ok(token)),
|
||||||
|
None => None,
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
match self.stack.pop() {
|
match self.stack.pop() {
|
||||||
Some(OuterDeserializerOuterState(Outer { inner })) => {
|
Some(OuterDeserializerOuterState(Outer { inner })) => {
|
||||||
self.stack.push(OuterDeserializerEndState);
|
self.stack.push(OuterDeserializerEndState);
|
||||||
@@ -1282,6 +1296,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
None => None,
|
None => None,
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1710,11 +1725,13 @@ mod tests {
|
|||||||
|
|
||||||
let outer = Outer {
|
let outer = Outer {
|
||||||
inner: vec!(
|
inner: vec!(
|
||||||
|
/*
|
||||||
Inner {
|
Inner {
|
||||||
a: (),
|
a: (),
|
||||||
b: 5,
|
b: 5,
|
||||||
c: map,
|
c: map,
|
||||||
},
|
},
|
||||||
|
*/
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1733,11 +1750,13 @@ mod tests {
|
|||||||
|
|
||||||
let outer = Outer {
|
let outer = Outer {
|
||||||
inner: vec!(
|
inner: vec!(
|
||||||
|
/*
|
||||||
Inner {
|
Inner {
|
||||||
a: (),
|
a: (),
|
||||||
b: 5,
|
b: 5,
|
||||||
c: map,
|
c: map,
|
||||||
},
|
},
|
||||||
|
*/
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user