func (t *RGATreeSplitNodeID) Compare(other llrb.Key) int {
	if t == nil || other == nil {
		panic("RGATreeSplitNodeID cannot be null")
	}
	o := other.(*RGATreeSplitNodeID)
	compare := t.createdAt.Compare(o.createdAt)
	if compare != 0 {
		return compare
	}
	if t.offset > o.offset {
		return 1
	} else if t.offset < o.offset {
		return -1
	}
	return 0
}
Compare returns an integer comparing two ID. The result will be 0 if
id==other, -1 if id < other, and +1 if id > other. If the receiver or
argument is nil, it would panic at runtime.
package json
import (
	"fmt"
	"strconv"
	"strings"
	"github.com/yorkie-team/yorkie/internal/log"
	"github.com/yorkie-team/yorkie/pkg/document/time"
	"github.com/yorkie-team/yorkie/pkg/llrb"
	"github.com/yorkie-team/yorkie/pkg/splay"
)
var (
	initialNodeID = NewRGATreeSplitNodeID(time.InitialTicket, 0)
)
type RGATreeSplitValue interface {
	Split(offset int) RGATreeSplitValue
	Len() int
	DeepCopy() RGATreeSplitValue
	String() string
	AnnotatedString() string
}
type RGATreeSplitNodeID struct {
	createdAt *time.Ticket
	offset    int
}
func NewRGATreeSplitNodeID(createdAt *time.Ticket, offset int) *RGATreeSplitNodeID {
	return &RGATreeSplitNodeID{
		createdAt: createdAt,
		offset:    offset,
	}
}