...

Source file src/github.com/syndtr/goleveldb/leveldb/comparer.go

Documentation: github.com/syndtr/goleveldb/leveldb

     1  // Copyright (c) 2012, Suryandaru Triandana <syndtr@gmail.com>
     2  // All rights reserved.
     3  //
     4  // Use of this source code is governed by a BSD-style license that can be
     5  // found in the LICENSE file.
     6  
     7  package leveldb
     8  
     9  import (
    10  	"github.com/syndtr/goleveldb/leveldb/comparer"
    11  )
    12  
    13  type iComparer struct {
    14  	ucmp comparer.Comparer
    15  }
    16  
    17  func (icmp *iComparer) uName() string {
    18  	return icmp.ucmp.Name()
    19  }
    20  
    21  func (icmp *iComparer) uCompare(a, b []byte) int {
    22  	return icmp.ucmp.Compare(a, b)
    23  }
    24  
    25  func (icmp *iComparer) uSeparator(dst, a, b []byte) []byte {
    26  	return icmp.ucmp.Separator(dst, a, b)
    27  }
    28  
    29  func (icmp *iComparer) uSuccessor(dst, b []byte) []byte {
    30  	return icmp.ucmp.Successor(dst, b)
    31  }
    32  
    33  func (icmp *iComparer) Name() string {
    34  	return icmp.uName()
    35  }
    36  
    37  func (icmp *iComparer) Compare(a, b []byte) int {
    38  	x := icmp.uCompare(internalKey(a).ukey(), internalKey(b).ukey())
    39  	if x == 0 {
    40  		if m, n := internalKey(a).num(), internalKey(b).num(); m > n {
    41  			return -1
    42  		} else if m < n {
    43  			return 1
    44  		}
    45  	}
    46  	return x
    47  }
    48  
    49  func (icmp *iComparer) Separator(dst, a, b []byte) []byte {
    50  	ua, ub := internalKey(a).ukey(), internalKey(b).ukey()
    51  	dst = icmp.uSeparator(dst, ua, ub)
    52  	if dst != nil && len(dst) < len(ua) && icmp.uCompare(ua, dst) < 0 {
    53  		// Append earliest possible number.
    54  		return append(dst, keyMaxNumBytes...)
    55  	}
    56  	return nil
    57  }
    58  
    59  func (icmp *iComparer) Successor(dst, b []byte) []byte {
    60  	ub := internalKey(b).ukey()
    61  	dst = icmp.uSuccessor(dst, ub)
    62  	if dst != nil && len(dst) < len(ub) && icmp.uCompare(ub, dst) < 0 {
    63  		// Append earliest possible number.
    64  		return append(dst, keyMaxNumBytes...)
    65  	}
    66  	return nil
    67  }
    68  

View as plain text