]> granicus.if.org Git - graphviz/commit
sparse: replace 'IntStack' with generic list implementation
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Thu, 8 Dec 2022 16:24:53 +0000 (08:24 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 11 Dec 2022 18:37:29 +0000 (10:37 -0800)
commitac40436aef43e055e0671bc48b9cc4be7f3e6dda
treed5c5a9eb4988064f66036559e5535d4b6912c3b4
parent5592da0fb3728f9c4300e41c6cd5c08a89490679
sparse: replace 'IntStack' with generic list implementation

Apart from reducing the amount of code to maintain going forwards, this removes
several warts:

  1. `IntStack_push` returned a value indicating whether it succeeded or failed.
     The caller was ignoring this. We now exit on push failure.

  2. `IntStack_pop` used an awkward flag-based protocol to detect an empty
     stack. We now use a cleaner “is empty” guard on the pop call.

  3. Iterating over all stack elements sometimes used < length and sometimes
     ≤ last. There were reasons for this (`SIZE_MAX` was used as a sentinel
     last value, and length was calculated based on last). But it led to code
     that was harder than necessary to understand at the call site.
ci/clang_format.py
lib/sparse/BinaryHeap.c
lib/sparse/BinaryHeap.h
lib/sparse/CMakeLists.txt
lib/sparse/IntStack.c [deleted file]
lib/sparse/IntStack.h [deleted file]
lib/sparse/Makefile.am
lib/sparse/gvsparse.vcxproj
lib/sparse/gvsparse.vcxproj.filters