@@ -17,7 +17,10 @@ Core encoding and decoding interfaces.
17
17
#[ forbid( non_camel_case_types) ] ;
18
18
19
19
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 } ;
21
24
22
25
pub trait Encoder {
23
26
// Primitive types:
@@ -531,6 +534,33 @@ impl<
531
534
}
532
535
}
533
536
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
+
534
564
impl <
535
565
E : Encoder ,
536
566
K : Encodable < E > + Hash + IterBytes + Eq ,
@@ -566,6 +596,158 @@ impl<
566
596
}
567
597
}
568
598
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
+
569
751
// ___________________________________________________________________________
570
752
// Helper routines
571
753
//
0 commit comments