diff options
Diffstat (limited to 'compiler/lists.nim')
-rw-r--r-- | compiler/lists.nim | 117 |
1 files changed, 13 insertions, 104 deletions
diff --git a/compiler/lists.nim b/compiler/lists.nim index 27e373342..bfd052204 100644 --- a/compiler/lists.nim +++ b/compiler/lists.nim @@ -7,113 +7,22 @@ # distribution, for details about the copyright. # -# This module implements a generic doubled linked list. -# TODO Remove this and replace it with something sensible -import os -type - PListEntry* = ref TListEntry - TListEntry* = object of RootObj - prev*, next*: PListEntry - - TStrEntry* = object of TListEntry - data*: string - - PStrEntry* = ref TStrEntry - TLinkedList* = object # for the "find" operation: - head*, tail*: PListEntry - counter*: int - - TCompareProc* = proc (entry: PListEntry, closure: pointer): bool {.nimcall.} - -proc initLinkedList*(list: var TLinkedList) = - list.counter = 0 - list.head = nil - list.tail = nil - -proc append*(list: var TLinkedList, entry: PListEntry) = - inc(list.counter) - entry.next = nil - entry.prev = list.tail - if list.tail != nil: - assert(list.tail.next == nil) - list.tail.next = entry - list.tail = entry - if list.head == nil: list.head = entry - -proc contains*(list: TLinkedList, data: string): bool = - var it = list.head - while it != nil: - if PStrEntry(it).data == data: - return true - it = it.next +# This module is deprecated, don't use it. +# TODO Remove this -proc newStrEntry(data: string): PStrEntry = - new(result) - result.data = data - -proc appendStr*(list: var TLinkedList, data: string) = - append(list, newStrEntry(data)) - -proc includeStr*(list: var TLinkedList, data: string): bool = - if contains(list, data): return true - appendStr(list, data) # else: add to list - -proc prepend*(list: var TLinkedList, entry: PListEntry) = - inc(list.counter) - entry.prev = nil - entry.next = list.head - if list.head != nil: - assert(list.head.prev == nil) - list.head.prev = entry - list.head = entry - if list.tail == nil: list.tail = entry - -proc prependStr*(list: var TLinkedList, data: string) = - prepend(list, newStrEntry(data)) +import os -proc insertBefore*(list: var TLinkedList, pos, entry: PListEntry) = - assert(pos != nil) - if pos == list.head: - prepend(list, entry) - else: - inc(list.counter) - entry.next = pos - entry.prev = pos.prev - if pos.prev != nil: pos.prev.next = entry - pos.prev = entry +static: + echo "WARNING: imported deprecated module compiler/lists.nim, use seq ore lists from the standard library" -proc remove*(list: var TLinkedList, entry: PListEntry) = - dec(list.counter) - if entry == list.tail: - list.tail = entry.prev - if entry == list.head: - list.head = entry.next - if entry.next != nil: entry.next.prev = entry.prev - if entry.prev != nil: entry.prev.next = entry.next +proc appendStr*(list: var seq[string]; data: string) {.deprecated.} = + # just use system.add + list.add(data) -proc bringToFront*(list: var TLinkedList, entry: PListEntry) = - when true: - list.remove entry - list.prepend entry +proc includeStr(list: var seq[string]; data: string): bool {.deprecated.} = + if list.contains(data): + result = true else: - if entry == list.head: return - if entry == list.tail: list.tail = entry.prev - if entry.next != nil: entry.next.prev = entry.prev - if entry.prev != nil: entry.prev.next = entry.next - entry.prev = nil - entry.next = list.head - list.head = entry - -proc excludePath*(list: var TLinkedList, data: string) = - var it = list.head - while it != nil: - let nxt = it.next - if cmpPaths(PStrEntry(it).data, data) == 0: - remove(list, it) - it = nxt + result = false + list.add data -proc find*(list: TLinkedList, fn: TCompareProc, closure: pointer): PListEntry = - result = list.head - while result != nil: - if fn(result, closure): return - result = result.next |