Skip to content

Commit b469df0

Browse files
committed
---
yaml --- r: 54408 b: refs/heads/snap-stage3 c: e5c7a9e h: refs/heads/master v: v3
1 parent c590bcf commit b469df0

File tree

2 files changed

+184
-2
lines changed

2 files changed

+184
-2
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 5f13e9ccc2e3328d4cd8ca49f84e6840dd998346
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: 529ae386056eefdfad04cab8a32d6e88ebbe0e5e
4+
refs/heads/snap-stage3: e5c7a9e3423c91c120cc4e69436dc7ee2dd1a1ab
55
refs/heads/try: 8eb2bab100b42f0ba751552d8eff00eb2134c55a
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b

branches/snap-stage3/src/libstd/serialize.rs

Lines changed: 183 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ Core encoding and decoding interfaces.
1717
#[forbid(non_camel_case_types)];
1818

1919
use core::prelude::*;
20-
use core::hashmap::linear::LinearMap;
20+
use core::dlist::DList;
21+
use core::hashmap::linear::{LinearMap, LinearSet};
22+
use core::trie::{TrieMap, TrieSet};
23+
use treemap::{TreeMap, TreeSet};
2124

2225
pub trait Encoder {
2326
// Primitive types:
@@ -531,6 +534,33 @@ impl<
531534
}
532535
}
533536

537+
impl<
538+
S: Encoder,
539+
T: Encodable<S> + Copy
540+
> Encodable<S> for @mut DList<T> {
541+
fn encode(&self, s: &S) {
542+
do s.emit_seq(self.size) {
543+
let mut i = 0;
544+
for self.each |e| {
545+
s.emit_seq_elt(i, || e.encode(s));
546+
i += 1;
547+
}
548+
}
549+
}
550+
}
551+
552+
impl<D:Decoder,T:Decodable<D>> Decodable<D> for @mut DList<T> {
553+
fn decode(d: &D) -> @mut DList<T> {
554+
let list = DList();
555+
do d.read_seq |len| {
556+
for uint::range(0, len) |i| {
557+
list.push(d.read_seq_elt(i, || Decodable::decode(d)));
558+
}
559+
}
560+
list
561+
}
562+
}
563+
534564
impl<
535565
E: Encoder,
536566
K: Encodable<E> + Hash + IterBytes + Eq,
@@ -566,6 +596,158 @@ impl<
566596
}
567597
}
568598

599+
impl<
600+
S: Encoder,
601+
T: Encodable<S> + Hash + IterBytes + Eq
602+
> Encodable<S> for LinearSet<T> {
603+
fn encode(&self, s: &S) {
604+
do s.emit_seq(self.len()) {
605+
let mut i = 0;
606+
for self.each |e| {
607+
s.emit_seq_elt(i, || e.encode(s));
608+
i += 1;
609+
}
610+
}
611+
}
612+
}
613+
614+
impl<
615+
D: Decoder,
616+
T: Decodable<D> + Hash + IterBytes + Eq
617+
> Decodable<D> for LinearSet<T> {
618+
fn decode(d: &D) -> LinearSet<T> {
619+
do d.read_seq |len| {
620+
let mut set = LinearSet::with_capacity(len);
621+
for uint::range(0, len) |i| {
622+
set.insert(d.read_seq_elt(i, || Decodable::decode(d)));
623+
}
624+
set
625+
}
626+
}
627+
}
628+
629+
impl<
630+
E: Encoder,
631+
V: Encodable<E>
632+
> Encodable<E> for TrieMap<V> {
633+
fn encode(&self, e: &E) {
634+
do e.emit_map(self.len()) {
635+
let mut i = 0;
636+
for self.each |&(key, val)| {
637+
e.emit_map_elt_key(i, || key.encode(e));
638+
e.emit_map_elt_val(i, || val.encode(e));
639+
i += 1;
640+
}
641+
}
642+
}
643+
}
644+
645+
impl<
646+
D: Decoder,
647+
V: Decodable<D>
648+
> Decodable<D> for TrieMap<V> {
649+
fn decode(d: &D) -> TrieMap<V> {
650+
do d.read_map |len| {
651+
let mut map = TrieMap::new();
652+
for uint::range(0, len) |i| {
653+
let key = d.read_map_elt_key(i, || Decodable::decode(d));
654+
let val = d.read_map_elt_val(i, || Decodable::decode(d));
655+
map.insert(key, val);
656+
}
657+
map
658+
}
659+
}
660+
}
661+
662+
impl<S: Encoder> Encodable<S> for TrieSet {
663+
fn encode(&self, s: &S) {
664+
do s.emit_seq(self.len()) {
665+
let mut i = 0;
666+
for self.each |e| {
667+
s.emit_seq_elt(i, || e.encode(s));
668+
i += 1;
669+
}
670+
}
671+
}
672+
}
673+
674+
impl<D: Decoder> Decodable<D> for TrieSet {
675+
fn decode(d: &D) -> TrieSet {
676+
do d.read_seq |len| {
677+
let mut set = TrieSet::new();
678+
for uint::range(0, len) |i| {
679+
set.insert(d.read_seq_elt(i, || Decodable::decode(d)));
680+
}
681+
set
682+
}
683+
}
684+
}
685+
686+
impl<
687+
E: Encoder,
688+
K: Encodable<E> + Eq + TotalOrd,
689+
V: Encodable<E> + Eq
690+
> Encodable<E> for TreeMap<K, V> {
691+
fn encode(&self, e: &E) {
692+
do e.emit_map(self.len()) {
693+
let mut i = 0;
694+
for self.each |&(key, val)| {
695+
e.emit_map_elt_key(i, || key.encode(e));
696+
e.emit_map_elt_val(i, || val.encode(e));
697+
i += 1;
698+
}
699+
}
700+
}
701+
}
702+
703+
impl<
704+
D: Decoder,
705+
K: Decodable<D> + Eq + TotalOrd,
706+
V: Decodable<D> + Eq
707+
> Decodable<D> for TreeMap<K, V> {
708+
fn decode(d: &D) -> TreeMap<K, V> {
709+
do d.read_map |len| {
710+
let mut map = TreeMap::new();
711+
for uint::range(0, len) |i| {
712+
let key = d.read_map_elt_key(i, || Decodable::decode(d));
713+
let val = d.read_map_elt_val(i, || Decodable::decode(d));
714+
map.insert(key, val);
715+
}
716+
map
717+
}
718+
}
719+
}
720+
721+
impl<
722+
S: Encoder,
723+
T: Encodable<S> + Eq + TotalOrd
724+
> Encodable<S> for TreeSet<T> {
725+
fn encode(&self, s: &S) {
726+
do s.emit_seq(self.len()) {
727+
let mut i = 0;
728+
for self.each |e| {
729+
s.emit_seq_elt(i, || e.encode(s));
730+
i += 1;
731+
}
732+
}
733+
}
734+
}
735+
736+
impl<
737+
D: Decoder,
738+
T: Decodable<D> + Eq + TotalOrd
739+
> Decodable<D> for TreeSet<T> {
740+
fn decode(d: &D) -> TreeSet<T> {
741+
do d.read_seq |len| {
742+
let mut set = TreeSet::new();
743+
for uint::range(0, len) |i| {
744+
set.insert(d.read_seq_elt(i, || Decodable::decode(d)));
745+
}
746+
set
747+
}
748+
}
749+
}
750+
569751
// ___________________________________________________________________________
570752
// Helper routines
571753
//

0 commit comments

Comments
 (0)