@@ -86,7 +86,12 @@ type Shard struct {
86
86
87
87
// NewShard creates a new, empty HAMT shard with the given size.
88
88
func NewShard (dserv ipld.DAGService , size int ) (* Shard , error ) {
89
- ds , err := makeShard (dserv , size )
89
+ return NewShardValue (dserv , size , "" , nil )
90
+ }
91
+
92
+ // NewShardValue creates a new, empty HAMT shard with the given key, value and size.
93
+ func NewShardValue (dserv ipld.DAGService , size int , key string , value * ipld.Link ) (* Shard , error ) {
94
+ ds , err := makeShard (dserv , size , key , value )
90
95
if err != nil {
91
96
return nil , err
92
97
}
@@ -96,7 +101,7 @@ func NewShard(dserv ipld.DAGService, size int) (*Shard, error) {
96
101
return ds , nil
97
102
}
98
103
99
- func makeShard (ds ipld.DAGService , size int ) (* Shard , error ) {
104
+ func makeShard (ds ipld.DAGService , size int , key string , val * ipld. Link ) (* Shard , error ) {
100
105
lg2s , err := Logtwo (size )
101
106
if err != nil {
102
107
return nil , err
@@ -109,6 +114,9 @@ func makeShard(ds ipld.DAGService, size int) (*Shard, error) {
109
114
childer : newChilder (ds , size ),
110
115
tableSize : size ,
111
116
dserv : ds ,
117
+
118
+ key : key ,
119
+ val : val ,
112
120
}
113
121
114
122
s .childer .sd = s
@@ -138,7 +146,7 @@ func NewHamtFromDag(dserv ipld.DAGService, nd ipld.Node) (*Shard, error) {
138
146
139
147
size := int (fsn .Fanout ())
140
148
141
- ds , err := makeShard (dserv , size )
149
+ ds , err := makeShard (dserv , size , "" , nil )
142
150
if err != nil {
143
151
return nil , err
144
152
}
@@ -214,7 +222,7 @@ func (ds *Shard) Node() (ipld.Node, error) {
214
222
215
223
func (ds * Shard ) makeShardValue (lnk * ipld.Link ) (* Shard , error ) {
216
224
lnk2 := * lnk
217
- s , err := makeShard (ds .dserv , ds .tableSize )
225
+ s , err := makeShard (ds .dserv , ds .tableSize , "" , nil )
218
226
if err != nil {
219
227
return nil , err
220
228
}
@@ -795,7 +803,11 @@ func (s *childer) insert(key string, lnk *ipld.Link, idx int) error {
795
803
796
804
lnk .Name = s .sd .linkNamePrefix (idx ) + key
797
805
i := s .sliceIndex (idx )
798
- sd := & Shard {key : key , val : lnk }
806
+
807
+ sd , err := NewShardValue (s .dserv , 256 , key , lnk )
808
+ if err != nil {
809
+ return err
810
+ }
799
811
800
812
s .children = append (s .children [:i ], append ([]* Shard {sd }, s .children [i :]... )... )
801
813
s .links = append (s .links [:i ], append ([]* ipld.Link {nil }, s .links [i :]... )... )
0 commit comments