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: ref TData
  10.  
  11. TTree*[TKey, TData] = distinct TElement[TKey, TData]
  12.  
  13.  
  14. proc find*[TKey, TData](root: TTree[TKey, TData], key: TKey): TData {.raises: [EInvalidKey].} =
  15. if root.kind != inner:
  16. raise newException(EInvalidKey, "key does not exist: " & key)
  17.  
  18. var tmp_element = root
  19.  
  20. while tmp_element.kind == inner:
  21. if tmp_element.key < key:
  22. tmp_element = tmp_element.left
  23. else:
  24. tmp_element = tmp_element.right
  25.  
  26. if tmp_element.key == key:
  27. return tmp_element.data
  28. else:
  29. raise newException(EInvalidKey, "key does not exist: " & key)
  30.  
  31.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.nim(14, 77) Error: invalid pragma: raises: [EInvalidKey]
stdout
Standard output is empty