fork download
  1. type
  2. NodeKind = enum inner, leaf
  3. TElement[TKey, TData] = object
  4. case kind: NodeKind
  5. of inner:
  6. key: TKey
  7. left, right: ref TElement[Tkey, TData]
  8. of leaf:
  9. data: TData
  10.  
  11. TTree[TKey, TData] = distinct TElement[TKey, TData]
  12.  
  13.  
  14.  
  15. proc find*[TKey, TData](root: TTree[TKey, TData], key: TKey): TData {.raises: [EInvalidKey].} =
  16. var tmp_element = root
  17.  
  18. while tmp_element.kind == inner:
  19. if tmp_element.key < key:
  20. tmp_element = tmp_element.left
  21. else:
  22. tmp_element = tmp_element.right
  23.  
  24. if tmp_element.key == key:
  25. return tmp_element.data
  26. else:
  27. raise newException(EInvalidKey, "key does not exist: " & key)
  28.  
  29.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.nim(15, 77) Error: invalid pragma: raises: [EInvalidKey]
stdout
Standard output is empty