You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
923 B

  1. package skiplist
  2. import "bytes"
  3. func compareElement(a *SkipListElement, key []byte) int {
  4. if len(a.Key) == 0 {
  5. return -1
  6. }
  7. return bytes.Compare(a.Key, key)
  8. }
  9. var (
  10. memStore = make(map[int64]*SkipListElement)
  11. )
  12. func (node *SkipListElement) Reference() *SkipListElementReference {
  13. if node == nil {
  14. return nil
  15. }
  16. return &SkipListElementReference{
  17. ElementPointer: node.Id,
  18. Key: node.Key,
  19. }
  20. }
  21. func (node *SkipListElement) Save() {
  22. if node == nil {
  23. return
  24. }
  25. memStore[node.Id] = node
  26. //println("++ node", node.Id, string(node.Values[0]))
  27. }
  28. func (node *SkipListElement) DeleteSelf() {
  29. if node == nil {
  30. return
  31. }
  32. delete(memStore, node.Id)
  33. //println("++ node", node.Id, string(node.Values[0]))
  34. }
  35. func (ref *SkipListElementReference) Load() *SkipListElement {
  36. if ref == nil {
  37. return nil
  38. }
  39. //println("~ node", ref.ElementPointer, string(ref.Key))
  40. return memStore[ref.ElementPointer]
  41. }