github.com/scottcagno/storage@v1.8.0/pkg/_junk/_lsmtree/sstable/encode.go (about)

     1  package sstable
     2  
     3  import (
     4  	"encoding/binary"
     5  	"io"
     6  )
     7  
     8  func EncodeDataEntry(w io.WriteSeeker, ent *sstDataEntry) (int64, error) {
     9  	// get offset of where this entry is located
    10  	offset, err := w.Seek(0, io.SeekCurrent)
    11  	if err != nil {
    12  		return -1, err
    13  	}
    14  	// make buffer for encoding
    15  	buf := make([]byte, 16)
    16  	// encode key length
    17  	binary.LittleEndian.PutUint64(buf[0:8], uint64(len(ent.key)))
    18  	// encode value length
    19  	binary.LittleEndian.PutUint64(buf[8:16], uint64(len(ent.value)))
    20  	// write key and value length
    21  	_, err = w.Write(buf)
    22  	if err != nil {
    23  		return -1, err
    24  	}
    25  	// write key data
    26  	_, err = w.Write([]byte(ent.key))
    27  	if err != nil {
    28  		return -1, err
    29  	}
    30  	// write value data
    31  	_, err = w.Write(ent.value)
    32  	if err != nil {
    33  		return -1, err
    34  	}
    35  	// return offset of entry
    36  	return offset, nil
    37  }
    38  
    39  func EncodeIndexEntry(w io.WriteSeeker, idx *sstIndexEntry) (int64, error) {
    40  	// get offset of where this entry is located
    41  	offset, err := w.Seek(0, io.SeekCurrent)
    42  	if err != nil {
    43  		return -1, err
    44  	}
    45  	// make buffer for encoding
    46  	buf := make([]byte, 16)
    47  	// encode key length
    48  	binary.LittleEndian.PutUint64(buf[0:8], uint64(len(idx.key)))
    49  	// encode offset value
    50  	binary.LittleEndian.PutUint64(buf[8:16], uint64(idx.offset))
    51  	// write key length and offset value
    52  	_, err = w.Write(buf)
    53  	if err != nil {
    54  		return -1, err
    55  	}
    56  	// write key data
    57  	_, err = w.Write([]byte(idx.key))
    58  	if err != nil {
    59  		return -1, err
    60  	}
    61  	// return offset of entry
    62  	return offset, nil
    63  }