Skip to content

Commit 546266b

Browse files
committed
Make internal decoder exports package-private
Make StringCache, buffer access, InternAt, and all DataDecoder methods package-private since they are only used within the decoder package. Keeps Kind methods public as they are exposed via mmdbdata type alias.
1 parent 51356a3 commit 546266b

File tree

4 files changed

+77
-77
lines changed

4 files changed

+77
-77
lines changed

internal/decoder/data_decoder.go

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func (k Kind) IsScalar() bool {
107107
// DataDecoder is a decoder for the MMDB data section.
108108
// This is exported so mmdbdata package can use it, but still internal.
109109
type DataDecoder struct {
110-
stringCache *StringCache
110+
stringCache *stringCache
111111
buffer []byte
112112
}
113113

@@ -120,17 +120,17 @@ const (
120120
func NewDataDecoder(buffer []byte) DataDecoder {
121121
return DataDecoder{
122122
buffer: buffer,
123-
stringCache: NewStringCache(),
123+
stringCache: newStringCache(),
124124
}
125125
}
126126

127-
// Buffer returns the underlying buffer for direct access.
128-
func (d *DataDecoder) Buffer() []byte {
127+
// getBuffer returns the underlying buffer for direct access.
128+
func (d *DataDecoder) getBuffer() []byte {
129129
return d.buffer
130130
}
131131

132-
// DecodeCtrlData decodes the control byte and data info at the given offset.
133-
func (d *DataDecoder) DecodeCtrlData(offset uint) (Kind, uint, uint, error) {
132+
// decodeCtrlData decodes the control byte and data info at the given offset.
133+
func (d *DataDecoder) decodeCtrlData(offset uint) (Kind, uint, uint, error) {
134134
newOffset := offset + 1
135135
if offset >= uint(len(d.buffer)) {
136136
return 0, 0, 0, mmdberrors.NewOffsetError()
@@ -151,8 +151,8 @@ func (d *DataDecoder) DecodeCtrlData(offset uint) (Kind, uint, uint, error) {
151151
return kindNum, size, newOffset, err
152152
}
153153

154-
// DecodeBytes decodes a byte slice from the given offset with the given size.
155-
func (d *DataDecoder) DecodeBytes(size, offset uint) ([]byte, uint, error) {
154+
// decodeBytes decodes a byte slice from the given offset with the given size.
155+
func (d *DataDecoder) decodeBytes(size, offset uint) ([]byte, uint, error) {
156156
if offset+size > uint(len(d.buffer)) {
157157
return nil, 0, mmdberrors.NewOffsetError()
158158
}
@@ -164,7 +164,7 @@ func (d *DataDecoder) DecodeBytes(size, offset uint) ([]byte, uint, error) {
164164
}
165165

166166
// DecodeFloat64 decodes a 64-bit float from the given offset.
167-
func (d *DataDecoder) DecodeFloat64(size, offset uint) (float64, uint, error) {
167+
func (d *DataDecoder) decodeFloat64(size, offset uint) (float64, uint, error) {
168168
if size != 8 {
169169
return 0, 0, mmdberrors.NewInvalidDatabaseError(
170170
"the MaxMind DB file's data section contains bad data (float 64 size of %v)",
@@ -181,7 +181,7 @@ func (d *DataDecoder) DecodeFloat64(size, offset uint) (float64, uint, error) {
181181
}
182182

183183
// DecodeFloat32 decodes a 32-bit float from the given offset.
184-
func (d *DataDecoder) DecodeFloat32(size, offset uint) (float32, uint, error) {
184+
func (d *DataDecoder) decodeFloat32(size, offset uint) (float32, uint, error) {
185185
if size != 4 {
186186
return 0, 0, mmdberrors.NewInvalidDatabaseError(
187187
"the MaxMind DB file's data section contains bad data (float32 size of %v)",
@@ -198,7 +198,7 @@ func (d *DataDecoder) DecodeFloat32(size, offset uint) (float32, uint, error) {
198198
}
199199

200200
// DecodeInt32 decodes a 32-bit signed integer from the given offset.
201-
func (d *DataDecoder) DecodeInt32(size, offset uint) (int32, uint, error) {
201+
func (d *DataDecoder) decodeInt32(size, offset uint) (int32, uint, error) {
202202
if size > 4 {
203203
return 0, 0, mmdberrors.NewInvalidDatabaseError(
204204
"the MaxMind DB file's data section contains bad data (int32 size of %v)",
@@ -218,7 +218,7 @@ func (d *DataDecoder) DecodeInt32(size, offset uint) (int32, uint, error) {
218218
}
219219

220220
// DecodePointer decodes a pointer from the given offset.
221-
func (d *DataDecoder) DecodePointer(
221+
func (d *DataDecoder) decodePointer(
222222
size uint,
223223
offset uint,
224224
) (uint, uint, error) {
@@ -254,7 +254,7 @@ func (d *DataDecoder) DecodePointer(
254254
}
255255

256256
// DecodeBool decodes a boolean from the given offset.
257-
func (*DataDecoder) DecodeBool(size, offset uint) (bool, uint, error) {
257+
func (*DataDecoder) decodeBool(size, offset uint) (bool, uint, error) {
258258
if size > 1 {
259259
return false, 0, mmdberrors.NewInvalidDatabaseError(
260260
"the MaxMind DB file's data section contains bad data (bool size of %v)",
@@ -266,18 +266,18 @@ func (*DataDecoder) DecodeBool(size, offset uint) (bool, uint, error) {
266266
}
267267

268268
// DecodeString decodes a string from the given offset.
269-
func (d *DataDecoder) DecodeString(size, offset uint) (string, uint, error) {
269+
func (d *DataDecoder) decodeString(size, offset uint) (string, uint, error) {
270270
if offset+size > uint(len(d.buffer)) {
271271
return "", 0, mmdberrors.NewOffsetError()
272272
}
273273

274274
newOffset := offset + size
275-
value := d.stringCache.InternAt(offset, size, d.buffer)
275+
value := d.stringCache.internAt(offset, size, d.buffer)
276276
return value, newOffset, nil
277277
}
278278

279279
// DecodeUint16 decodes a 16-bit unsigned integer from the given offset.
280-
func (d *DataDecoder) DecodeUint16(size, offset uint) (uint16, uint, error) {
280+
func (d *DataDecoder) decodeUint16(size, offset uint) (uint16, uint, error) {
281281
if size > 2 {
282282
return 0, 0, mmdberrors.NewInvalidDatabaseError(
283283
"the MaxMind DB file's data section contains bad data (uint16 size of %v)",
@@ -299,7 +299,7 @@ func (d *DataDecoder) DecodeUint16(size, offset uint) (uint16, uint, error) {
299299
}
300300

301301
// DecodeUint32 decodes a 32-bit unsigned integer from the given offset.
302-
func (d *DataDecoder) DecodeUint32(size, offset uint) (uint32, uint, error) {
302+
func (d *DataDecoder) decodeUint32(size, offset uint) (uint32, uint, error) {
303303
if size > 4 {
304304
return 0, 0, mmdberrors.NewInvalidDatabaseError(
305305
"the MaxMind DB file's data section contains bad data (uint32 size of %v)",
@@ -321,7 +321,7 @@ func (d *DataDecoder) DecodeUint32(size, offset uint) (uint32, uint, error) {
321321
}
322322

323323
// DecodeUint64 decodes a 64-bit unsigned integer from the given offset.
324-
func (d *DataDecoder) DecodeUint64(size, offset uint) (uint64, uint, error) {
324+
func (d *DataDecoder) decodeUint64(size, offset uint) (uint64, uint, error) {
325325
if size > 8 {
326326
return 0, 0, mmdberrors.NewInvalidDatabaseError(
327327
"the MaxMind DB file's data section contains bad data (uint64 size of %v)",
@@ -344,7 +344,7 @@ func (d *DataDecoder) DecodeUint64(size, offset uint) (uint64, uint, error) {
344344

345345
// DecodeUint128 decodes a 128-bit unsigned integer from the given offset.
346346
// Returns the value as high and low 64-bit unsigned integers.
347-
func (d *DataDecoder) DecodeUint128(size, offset uint) (hi, lo uint64, newOffset uint, err error) {
347+
func (d *DataDecoder) decodeUint128(size, offset uint) (hi, lo uint64, newOffset uint, err error) {
348348
if size > 16 {
349349
return 0, 0, 0, mmdberrors.NewInvalidDatabaseError(
350350
"the MaxMind DB file's data section contains bad data (uint128 size of %v)",
@@ -375,17 +375,17 @@ func append64(val uint64, b byte) (uint64, byte) {
375375
// can take advantage of https://github.com/golang/go/issues/3512 to avoid
376376
// copying the bytes when decoding a struct. Previously, we achieved this by
377377
// using unsafe.
378-
func (d *DataDecoder) DecodeKey(offset uint) ([]byte, uint, error) {
379-
kindNum, size, dataOffset, err := d.DecodeCtrlData(offset)
378+
func (d *DataDecoder) decodeKey(offset uint) ([]byte, uint, error) {
379+
kindNum, size, dataOffset, err := d.decodeCtrlData(offset)
380380
if err != nil {
381381
return nil, 0, err
382382
}
383383
if kindNum == KindPointer {
384-
pointer, ptrOffset, err := d.DecodePointer(size, dataOffset)
384+
pointer, ptrOffset, err := d.decodePointer(size, dataOffset)
385385
if err != nil {
386386
return nil, 0, err
387387
}
388-
key, _, err := d.DecodeKey(pointer)
388+
key, _, err := d.decodeKey(pointer)
389389
return key, ptrOffset, err
390390
}
391391
if kindNum != KindString {
@@ -404,17 +404,17 @@ func (d *DataDecoder) DecodeKey(offset uint) ([]byte, uint, error) {
404404
// NextValueOffset skips ahead to the next value without decoding
405405
// the one at the offset passed in. The size bits have different meanings for
406406
// different data types.
407-
func (d *DataDecoder) NextValueOffset(offset, numberToSkip uint) (uint, error) {
407+
func (d *DataDecoder) nextValueOffset(offset, numberToSkip uint) (uint, error) {
408408
if numberToSkip == 0 {
409409
return offset, nil
410410
}
411-
kindNum, size, offset, err := d.DecodeCtrlData(offset)
411+
kindNum, size, offset, err := d.decodeCtrlData(offset)
412412
if err != nil {
413413
return 0, err
414414
}
415415
switch kindNum {
416416
case KindPointer:
417-
_, offset, err = d.DecodePointer(size, offset)
417+
_, offset, err = d.decodePointer(size, offset)
418418
if err != nil {
419419
return 0, err
420420
}
@@ -426,7 +426,7 @@ func (d *DataDecoder) NextValueOffset(offset, numberToSkip uint) (uint, error) {
426426
default:
427427
offset += size
428428
}
429-
return d.NextValueOffset(offset, numberToSkip-1)
429+
return d.nextValueOffset(offset, numberToSkip-1)
430430
}
431431

432432
func (d *DataDecoder) sizeFromCtrlByte(

internal/decoder/decoder.go

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func (d *Decoder) ReadBool() (bool, error) {
5252
return false, d.wrapError(err)
5353
}
5454

55-
value, newOffset, err := d.d.DecodeBool(size, offset)
55+
value, newOffset, err := d.d.decodeBool(size, offset)
5656
if err != nil {
5757
return false, d.wrapError(err)
5858
}
@@ -69,7 +69,7 @@ func (d *Decoder) ReadString() (string, error) {
6969
return "", d.wrapError(err)
7070
}
7171

72-
value, newOffset, err := d.d.DecodeString(size, offset)
72+
value, newOffset, err := d.d.decodeString(size, offset)
7373
if err != nil {
7474
return "", d.wrapError(err)
7575
}
@@ -97,7 +97,7 @@ func (d *Decoder) ReadFloat32() (float32, error) {
9797
return 0, d.wrapError(err)
9898
}
9999

100-
value, nextOffset, err := d.d.DecodeFloat32(size, offset)
100+
value, nextOffset, err := d.d.decodeFloat32(size, offset)
101101
if err != nil {
102102
return 0, d.wrapError(err)
103103
}
@@ -115,7 +115,7 @@ func (d *Decoder) ReadFloat64() (float64, error) {
115115
return 0, d.wrapError(err)
116116
}
117117

118-
value, nextOffset, err := d.d.DecodeFloat64(size, offset)
118+
value, nextOffset, err := d.d.decodeFloat64(size, offset)
119119
if err != nil {
120120
return 0, d.wrapError(err)
121121
}
@@ -133,7 +133,7 @@ func (d *Decoder) ReadInt32() (int32, error) {
133133
return 0, d.wrapError(err)
134134
}
135135

136-
value, nextOffset, err := d.d.DecodeInt32(size, offset)
136+
value, nextOffset, err := d.d.decodeInt32(size, offset)
137137
if err != nil {
138138
return 0, d.wrapError(err)
139139
}
@@ -151,7 +151,7 @@ func (d *Decoder) ReadUInt16() (uint16, error) {
151151
return 0, d.wrapError(err)
152152
}
153153

154-
value, nextOffset, err := d.d.DecodeUint16(size, offset)
154+
value, nextOffset, err := d.d.decodeUint16(size, offset)
155155
if err != nil {
156156
return 0, d.wrapError(err)
157157
}
@@ -169,7 +169,7 @@ func (d *Decoder) ReadUInt32() (uint32, error) {
169169
return 0, d.wrapError(err)
170170
}
171171

172-
value, nextOffset, err := d.d.DecodeUint32(size, offset)
172+
value, nextOffset, err := d.d.decodeUint32(size, offset)
173173
if err != nil {
174174
return 0, d.wrapError(err)
175175
}
@@ -187,7 +187,7 @@ func (d *Decoder) ReadUInt64() (uint64, error) {
187187
return 0, d.wrapError(err)
188188
}
189189

190-
value, nextOffset, err := d.d.DecodeUint64(size, offset)
190+
value, nextOffset, err := d.d.decodeUint64(size, offset)
191191
if err != nil {
192192
return 0, d.wrapError(err)
193193
}
@@ -205,7 +205,7 @@ func (d *Decoder) ReadUInt128() (hi, lo uint64, err error) {
205205
return 0, 0, d.wrapError(err)
206206
}
207207

208-
hi, lo, nextOffset, err := d.d.DecodeUint128(size, offset)
208+
hi, lo, nextOffset, err := d.d.decodeUint128(size, offset)
209209
if err != nil {
210210
return 0, 0, d.wrapError(err)
211211
}
@@ -231,7 +231,7 @@ func (d *Decoder) ReadMap() iter.Seq2[[]byte, error] {
231231
currentOffset := offset
232232

233233
for range size {
234-
key, keyEndOffset, err := d.d.DecodeKey(currentOffset)
234+
key, keyEndOffset, err := d.d.decodeKey(currentOffset)
235235
if err != nil {
236236
yield(nil, d.wrapErrorAtOffset(err, currentOffset))
237237
return
@@ -246,7 +246,7 @@ func (d *Decoder) ReadMap() iter.Seq2[[]byte, error] {
246246
}
247247

248248
// Skip the value to get to next key-value pair
249-
valueEndOffset, err := d.d.NextValueOffset(keyEndOffset, 1)
249+
valueEndOffset, err := d.d.nextValueOffset(keyEndOffset, 1)
250250
if err != nil {
251251
yield(nil, d.wrapError(err))
252252
return
@@ -281,7 +281,7 @@ func (d *Decoder) ReadSlice() iter.Seq[error] {
281281
// Skip the unvisited elements
282282
remaining := size - i - 1
283283
if remaining > 0 {
284-
endOffset, err := d.d.NextValueOffset(currentOffset, remaining)
284+
endOffset, err := d.d.nextValueOffset(currentOffset, remaining)
285285
if err == nil {
286286
d.reset(endOffset)
287287
}
@@ -290,7 +290,7 @@ func (d *Decoder) ReadSlice() iter.Seq[error] {
290290
}
291291

292292
// Advance to next element
293-
nextOffset, err := d.d.NextValueOffset(currentOffset, 1)
293+
nextOffset, err := d.d.nextValueOffset(currentOffset, 1)
294294
if err != nil {
295295
yield(d.wrapError(err))
296296
return
@@ -308,7 +308,7 @@ func (d *Decoder) ReadSlice() iter.Seq[error] {
308308
// The decoder will be positioned after the skipped value.
309309
func (d *Decoder) SkipValue() error {
310310
// We can reuse the existing nextValueOffset logic by jumping to the next value
311-
nextOffset, err := d.d.NextValueOffset(d.offset, 1)
311+
nextOffset, err := d.d.nextValueOffset(d.offset, 1)
312312
if err != nil {
313313
return d.wrapError(err)
314314
}
@@ -319,7 +319,7 @@ func (d *Decoder) SkipValue() error {
319319
// PeekKind returns the kind of the current value without consuming it.
320320
// This allows for look-ahead parsing similar to jsontext.Decoder.PeekKind().
321321
func (d *Decoder) PeekKind() (Kind, error) {
322-
kindNum, _, _, err := d.d.DecodeCtrlData(d.offset)
322+
kindNum, _, _, err := d.d.decodeCtrlData(d.offset)
323323
if err != nil {
324324
return 0, d.wrapError(err)
325325
}
@@ -330,14 +330,14 @@ func (d *Decoder) PeekKind() (Kind, error) {
330330
dataOffset := d.offset
331331
for {
332332
var size uint
333-
kindNum, size, dataOffset, err = d.d.DecodeCtrlData(dataOffset)
333+
kindNum, size, dataOffset, err = d.d.decodeCtrlData(dataOffset)
334334
if err != nil {
335335
return 0, d.wrapError(err)
336336
}
337337
if kindNum != KindPointer {
338338
break
339339
}
340-
dataOffset, _, err = d.d.DecodePointer(size, dataOffset)
340+
dataOffset, _, err = d.d.decodePointer(size, dataOffset)
341341
if err != nil {
342342
return 0, d.wrapError(err)
343343
}
@@ -377,14 +377,14 @@ func (d *Decoder) decodeCtrlDataAndFollow(expectedKind Kind) (uint, uint, error)
377377
var kindNum Kind
378378
var size uint
379379
var err error
380-
kindNum, size, dataOffset, err = d.d.DecodeCtrlData(dataOffset)
380+
kindNum, size, dataOffset, err = d.d.decodeCtrlData(dataOffset)
381381
if err != nil {
382382
return 0, 0, err // Don't wrap here, let caller wrap
383383
}
384384

385385
if kindNum == KindPointer {
386386
var nextOffset uint
387-
dataOffset, nextOffset, err = d.d.DecodePointer(size, dataOffset)
387+
dataOffset, nextOffset, err = d.d.decodePointer(size, dataOffset)
388388
if err != nil {
389389
return 0, 0, err // Don't wrap here, let caller wrap
390390
}
@@ -406,13 +406,13 @@ func (d *Decoder) readBytes(kind Kind) ([]byte, error) {
406406
return nil, err // Return unwrapped - caller will wrap
407407
}
408408

409-
if offset+size > uint(len(d.d.Buffer())) {
409+
if offset+size > uint(len(d.d.getBuffer())) {
410410
return nil, mmdberrors.NewInvalidDatabaseError(
411411
"the MaxMind DB file's data section contains bad data (offset+size %d exceeds buffer length %d)",
412412
offset+size,
413-
len(d.d.Buffer()),
413+
len(d.d.getBuffer()),
414414
)
415415
}
416416
d.setNextOffset(offset + size)
417-
return d.d.Buffer()[offset : offset+size], nil
417+
return d.d.getBuffer()[offset : offset+size], nil
418418
}

0 commit comments

Comments
 (0)