]> granicus.if.org Git - graphviz/log
graphviz
2 years agogvgen: replace 'gv_stack_t' with generic list for int stack
Matthew Fernandez [Thu, 8 Dec 2022 16:35:26 +0000 (08:35 -0800)]
gvgen: replace 'gv_stack_t' with generic list for int stack

The generic list implementation is an improvement over `gv_stack_t` in that it
is both more flexible and type safe. Migrating to it has two primary
improvements:

  1. Maintaining type safety. There is now no need to cast when pushing and
     popping the stack. This removes two compiler warnings and leads to shorter,
     more readable code.

  2. Memory reduction. On 64-bit platforms with a 32-bit int (e.g. x86-64),
     `gv_stack_t` uses 8 bytes per int element for storage. In contrast, the
     generic list uses 4 bytes per int.

2 years agosparse: replace 'IntStack' with generic list implementation
Matthew Fernandez [Thu, 8 Dec 2022 16:24:53 +0000 (08:24 -0800)]
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.

2 years agocgraph: add push and pop functions to the generic list
Matthew Fernandez [Thu, 8 Dec 2022 16:03:22 +0000 (08:03 -0800)]
cgraph: add push and pop functions to the generic list

This enables using this data structure as a stack as well. In future it could
grow to replace `gv_stack_t`.

2 years agoMerge branch 'smattr/7522e5d4-990f-4626-90b9-08632f4d552f' into 'main'
Matthew Fernandez [Sun, 11 Dec 2022 18:35:26 +0000 (18:35 +0000)]
Merge branch 'smattr/7522e5d4-990f-4626-90b9-08632f4d552f' into 'main'

CI: hard code platform when running './configure' on Cygwin

See merge request graphviz/graphviz!2998

2 years agoCI: hard code platform when running './configure' on Cygwin
Matthew Fernandez [Sat, 10 Dec 2022 22:04:10 +0000 (14:04 -0800)]
CI: hard code platform when running './configure' on Cygwin

The Cygwin Autotools builds have begun failing in CI:

  + ./configure --prefix=/cygdrive/c/GitLab-Runner/builds/smattr/graphviz/
    graphviz-7.0.5~dev.20221210.2041/build
  checking build system type... config/config.guess: unable to guess system type

  This script (version 2018-02-24), has failed to recognize the
  operating system you are using. If your script is old, overwrite *all*
  copies of config.guess and config.sub with the latest versions from:

    https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
  and
    https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub

  If config/config.guess has already been updated, send the following data and any
  information you think might be pertinent to config-patches@gnu.org to
  provide the necessary information to handle your system.

  config.guess timestamp = 2018-02-24

  uname -m = .x86_64
  uname -r = 3.4.1-1.x86_64
  uname -s = CYGWIN_NT-10.0-17763
  uname -v = 2022-12-10 19:59 UTC

  /usr/bin/uname -p = unknown
  /bin/uname -X     =

  hostinfo               =
  /bin/universe          =
  /usr/bin/arch -k       =
  /bin/arch              = .x86_64
  /usr/bin/oslevel       =
  /usr/convex/getsysinfo =

  UNAME_MACHINE = ".x86_64"
  UNAME_RELEASE = "3.4.1-1.x86_64"
  UNAME_SYSTEM  = "CYGWIN_NT-10.0-17763"
  UNAME_VERSION = "2022-12-10 19:59 UTC"
  configure: error: cannot guess build type; you must specify one

config.guess is one of those scripts that is manually copy-pasted between GNU
projects. In this instance, it is the copy within Automake that is being used.
CI appears to be installing the very latest version of Automake at time of
writing (1.16.5), so upgrading Automake is not a fix here.

Cross referencing the upstream version of config.guess in Savannah¹, there have
been a lot of changes to this file since the version Automake is carrying². But
none of them jump out as something that would affect Cygwin detection in this
way.

So this commit works around the problem on our side. We hard code the guess that
`./configure` should have made. Note that this change uses the guess text from
the newer config.guess, `x86_64-pc-cygwin`, instead of the guess text from the
older version of config.guess Automake is carrying, `x86_64-unknown-cygwin`.

If this problem turns out to have a root cause in Automake and is fixed in
future, we should be able to revert this change.

¹ https://savannah.gnu.org/projects/config/
² 72 commits touching this file since the version Automake is carrying
  (2018-02-24). Total diff of these commits to config.guess is 2143 lines.

2 years agoMerge branch 'smattr/71c7f362-abcc-458d-b5e3-5fc6624fc5f6' into 'main'
Matthew Fernandez [Thu, 8 Dec 2022 04:26:13 +0000 (04:26 +0000)]
Merge branch 'smattr/71c7f362-abcc-458d-b5e3-5fc6624fc5f6' into 'main'

prune: fix memory leaks in list destruction

See merge request graphviz/graphviz!2992

2 years agoprune: fix memory leaks in list destruction
Matthew Fernandez [Tue, 6 Dec 2022 15:23:21 +0000 (07:23 -0800)]
prune: fix memory leaks in list destruction

This problem seems to have existed since the first Graphviz commit.

2 years agocgraph: add support for per-element destructors in list implementation
Matthew Fernandez [Tue, 6 Dec 2022 15:18:51 +0000 (07:18 -0800)]
cgraph: add support for per-element destructors in list implementation

2 years agoMerge branch 'smattr/b354fca9-3b7d-44bb-b58f-90a35847a3f9' into 'main'
Matthew Fernandez [Thu, 8 Dec 2022 02:03:07 +0000 (02:03 +0000)]
Merge branch 'smattr/b354fca9-3b7d-44bb-b58f-90a35847a3f9' into 'main'

osage: roll out cgraph allocation wrapper usage

See merge request graphviz/graphviz!2989

2 years agoosage layout: remove unnecessary casts
Matthew Fernandez [Sun, 4 Dec 2022 22:25:31 +0000 (14:25 -0800)]
osage layout: remove unnecessary casts

2 years agoosage layout: use cgraph wrappers for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
osage layout: use cgraph wrappers for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoosage: replace clist implementation with generic list
Matthew Fernandez [Sat, 3 Dec 2022 18:54:23 +0000 (10:54 -0800)]
osage: replace clist implementation with generic list

This replaces some common/memory.h allocations with cgraph/alloc.h, but more
importantly reduces the amount of code to maintain here. Note that confusingly
the list begins with a NULL entry and is only relevant to store later if we have
accrued more than just the initial NULL.

This is the equivalent of b10b254860b2bcbc85b9779a2388d33ce8318908 but applied
to osage.

2 years agoosage: inline 'initCList' into a C99 initialization
Matthew Fernandez [Thu, 1 Dec 2022 04:46:33 +0000 (20:46 -0800)]
osage: inline 'initCList' into a C99 initialization

This is the equivalent of 4460351650475f4e8aa4ef085928e1697776f070 but applied
to osage.

2 years agoMerge branch 'smattr/2fd01708-69d8-41fe-a59b-d701cf5b5c6c' into 'main'
Matthew Fernandez [Thu, 8 Dec 2022 01:12:10 +0000 (01:12 +0000)]
Merge branch 'smattr/2fd01708-69d8-41fe-a59b-d701cf5b5c6c' into 'main'

fdpgen, neatogen: some cgraph alloc wrapper migration, bug fixing, type adjustment

See merge request graphviz/graphviz!2991

2 years agoneatogen: remove some unnecessary parens
Matthew Fernandez [Tue, 6 Dec 2022 05:39:28 +0000 (21:39 -0800)]
neatogen: remove some unnecessary parens

2 years agoneatogen computeScale: swap 'MIN' for stdlib equivalent
Matthew Fernandez [Tue, 6 Dec 2022 05:39:11 +0000 (21:39 -0800)]
neatogen computeScale: swap 'MIN' for stdlib equivalent

2 years agoneatogen computeScaleXY: swap 'MAX' for stdlib equivalent
Matthew Fernandez [Tue, 6 Dec 2022 05:38:42 +0000 (21:38 -0800)]
neatogen computeScaleXY: swap 'MAX' for stdlib equivalent

2 years agoneatogen computeScale: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen computeScale: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoneatogen computeScaleXY: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen computeScaleXY: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoneatogen cAdjust: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen cAdjust: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoneatogen mkOverlapSet: replace manual array with list implementation
Matthew Fernandez [Tue, 6 Dec 2022 05:23:23 +0000 (21:23 -0800)]
neatogen mkOverlapSet: replace manual array with list implementation

2 years agoneatogen mkOverlapSet: return actual point count in 'cntp'
Matthew Fernandez [Tue, 6 Dec 2022 05:16:46 +0000 (21:16 -0800)]
neatogen mkOverlapSet: return actual point count in 'cntp'

For reasons unclear to me, the `mkOverlapSet` function was constructing a set of
points with an implicit initial 0 point and then notifying the caller of a count
1 _less_ than the total point count. There was nothing wrong with this, but it
led to several instances of non-idiomatic follow-on code that had to account for
an array that was actually 1 longer than what its count variable said.

2 years agoneatogen computeScaleXY: fix memory leak
Matthew Fernandez [Tue, 6 Dec 2022 05:00:31 +0000 (21:00 -0800)]
neatogen computeScaleXY: fix memory leak

2 years agoneatogen constraint: use 'size_t' to count points
Matthew Fernandez [Tue, 6 Dec 2022 04:58:23 +0000 (20:58 -0800)]
neatogen constraint: use 'size_t' to count points

Squashes five -Wsign-conversion warnings. This requires a few cascading changes
to various callees here.

2 years agofdpgen: replace clist implementation with generic list
Matthew Fernandez [Sat, 3 Dec 2022 18:54:23 +0000 (10:54 -0800)]
fdpgen: replace clist implementation with generic list

This replaces some common/memory.h allocations with cgraph/alloc.h, but more
importantly reduces the amount of code to maintain here. Note that confusingly
the list begins with a NULL entry and is only relevant to store later if we have
accrued more than just the initial NULL.

This is the equivalent of b10b254860b2bcbc85b9779a2388d33ce8318908 but applied
to fdpgen.

2 years agofdpgen: inline 'initCList' into a C99 initialization
Matthew Fernandez [Thu, 1 Dec 2022 04:46:33 +0000 (20:46 -0800)]
fdpgen: inline 'initCList' into a C99 initialization

This is the equivalent of 4460351650475f4e8aa4ef085928e1697776f070 but applied
to fdpgen.

2 years agoMerge branch 'smattr/53ae5c5d-ba33-4ab5-b844-dc0d40fc5e1c' into 'main'
Matthew Fernandez [Tue, 6 Dec 2022 01:00:48 +0000 (01:00 +0000)]
Merge branch 'smattr/53ae5c5d-ba33-4ab5-b844-dc0d40fc5e1c' into 'main'

cgraph: inline 'bitarray_new' into 'bitarray_new_or_exit' and rename

See merge request graphviz/graphviz!2990

2 years agocgraph: inline 'bitarray_new' into 'bitarray_new_or_exit' and rename
Matthew Fernandez [Mon, 5 Dec 2022 02:28:29 +0000 (18:28 -0800)]
cgraph: inline 'bitarray_new' into 'bitarray_new_or_exit' and rename

All clients of this functionality were calling `bitarray_new_or_exit`. That is,
none of them could cope with failure. In the intervening time since this API was
added, several other exit-on-failure functions have sprung up. For example,
`gv_alloc`. It seems reasonable to now abbreviate this, leading to lesser code
to maintain, with the “or exit” now implicit.

2 years agoMerge branch 'smattr/bbedf005-c240-4739-a365-79e0b6b009c9' into 'main'
Matthew Fernandez [Mon, 5 Dec 2022 00:25:45 +0000 (00:25 +0000)]
Merge branch 'smattr/bbedf005-c240-4739-a365-79e0b6b009c9' into 'main'

twopigen: use cgraph wrappers for allocation

See merge request graphviz/graphviz!2982

2 years agotwopigen: use an exact comparison when testing against 'UNSET'
Matthew Fernandez [Tue, 29 Nov 2022 01:27:53 +0000 (17:27 -0800)]
twopigen: use an exact comparison when testing against 'UNSET'

Squashes a -Wfloat-comparison warning.

2 years agotwopigen: use a 'uint64_t' for infinity sentinel
Matthew Fernandez [Tue, 29 Nov 2022 01:26:18 +0000 (17:26 -0800)]
twopigen: use a 'uint64_t' for infinity sentinel

This value is guaranteed to not be negative (an `int` multiplied by itself is
non-negative) and later is compared against `uint64_t` values. So this change
squashes a couple of warnings.

2 years agotwopigen twopi_init_node_edge: use cgraph wrappers for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
twopigen twopi_init_node_edge: use cgraph wrappers for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agotwopigen getRankseps: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
twopigen getRankseps: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agotwopigen push: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
twopigen push: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoMerge branch 'smattr/9a665a71-ab78-4631-aefe-acabc4924775' into 'main'
Matthew Fernandez [Sun, 4 Dec 2022 23:33:40 +0000 (23:33 +0000)]
Merge branch 'smattr/9a665a71-ab78-4631-aefe-acabc4924775' into 'main'

cgraph: squash -Wunused-function warnings for list functions

See merge request graphviz/graphviz!2988

2 years agocgraph: squash -Wunused-function warnings for list functions
Matthew Fernandez [Sun, 4 Dec 2022 21:31:38 +0000 (13:31 -0800)]
cgraph: squash -Wunused-function warnings for list functions

Clang on macOS seems to complain about even `inline` functions when they are
defined within a .c file.

2 years agoMerge branch 'gshklover_simplex' into 'main'
Matthew Fernandez [Sun, 4 Dec 2022 19:55:54 +0000 (19:55 +0000)]
Merge branch 'gshklover_simplex' into 'main'

Modified dfs_range() in ns.c to prune unmodified sub-trees

See merge request graphviz/graphviz!2857

2 years agoModified dfs_range() in ns.c to prune unmodified sub-trees
greg [Mon, 26 Sep 2022 12:14:14 +0000 (15:14 +0300)]
Modified dfs_range() in ns.c to prune unmodified sub-trees

2 years agoMerge branch 'smattr/50455448-28d0-4b1d-87fe-34700fbdc672' into 'main'
Matthew Fernandez [Sun, 4 Dec 2022 18:51:00 +0000 (18:51 +0000)]
Merge branch 'smattr/50455448-28d0-4b1d-87fe-34700fbdc672' into 'main'

rollout cgraph alloc.h headers in patchwork, implement a generic list

See merge request graphviz/graphviz!2986

2 years agoprune: use generalized list implementation for nodes list
Matthew Fernandez [Sat, 3 Dec 2022 19:10:46 +0000 (11:10 -0800)]
prune: use generalized list implementation for nodes list

This allows preserving type safety (no more `char*` casts needed). We can also
entirely remove prune’s generic list implementation which is no longer used.

2 years agoprune: use generalized list implementation for attributes list
Matthew Fernandez [Sat, 3 Dec 2022 19:10:46 +0000 (11:10 -0800)]
prune: use generalized list implementation for attributes list

This allows preserving type safety (no more `strattr_t` casts needed) and the
list items can be managed by value (no more `gv_alloc` for the `sp` being
appended), leading to simpler code.

2 years agopatchwork: use a 'size_t' for treenode children count
Matthew Fernandez [Thu, 1 Dec 2022 01:41:20 +0000 (17:41 -0800)]
patchwork: use a 'size_t' for treenode children count

This also involves a cascading series of updates to other variables that are
used to interact with `n_children`. Squashes four -Wsign-conversion warnings.

2 years agopatchwork layoutTree: use cgraph wrappers for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
patchwork layoutTree: use cgraph wrappers for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agopatchwork mkTree: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
patchwork mkTree: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agopatchwork mkTreeNode: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
patchwork mkTreeNode: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agopatchwork patchwork_init_node_edge: use cgraph wrappers for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
patchwork patchwork_init_node_edge: use cgraph wrappers for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agopatchwork mkClusters: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
patchwork mkClusters: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agopatchwork: replace clist implementation with generic list
Matthew Fernandez [Sat, 3 Dec 2022 18:54:23 +0000 (10:54 -0800)]
patchwork: replace clist implementation with generic list

This replaces some common/memory.h allocations with cgraph/alloc.h, but more
importantly reduces the amount of code to maintain here. Note that confusingly
the list begins with a NULL entry and is only relevant to store later if we have
accrued more than just the initial NULL.

2 years agopatchwork: inline 'initCList' into a C99 initialization
Matthew Fernandez [Thu, 1 Dec 2022 04:46:33 +0000 (20:46 -0800)]
patchwork: inline 'initCList' into a C99 initialization

2 years agopatchwork tree_map: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
patchwork tree_map: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agooutline 'boxes_t' implementation into a generic list
Matthew Fernandez [Sat, 3 Dec 2022 18:27:48 +0000 (10:27 -0800)]
outline 'boxes_t' implementation into a generic list

This will allow us to avoid reimplementing variants of the same list data
structure repeatedly. It extends the boxes functions with some other useful
additions and slightly modifies the growth strategy. On first addition, a single
element is now allocated instead of 128. This seems more appropriate for a data
structure that we intend to use more pervasively.

This also replaces common/memory.h allocation that was used in boxes.h with
cgraph/alloc.h calls.

2 years agopatchwork squarify: replace 'MAX', 'MIN' with stdlib equivalents
Matthew Fernandez [Thu, 1 Dec 2022 01:15:20 +0000 (17:15 -0800)]
patchwork squarify: replace 'MAX', 'MIN' with stdlib equivalents

2 years agopatchwork: replace 'rectangle_new' with C99 initialization
Matthew Fernandez [Thu, 1 Dec 2022 01:10:49 +0000 (17:10 -0800)]
patchwork: replace 'rectangle_new' with C99 initialization

2 years agopatchwork: remove unused 'rectangle_struct' name
Matthew Fernandez [Thu, 1 Dec 2022 01:08:25 +0000 (17:08 -0800)]
patchwork: remove unused 'rectangle_struct' name

2 years agoMerge branch 'smattr/c8daf543-cbfe-4778-b845-a93a91f92189' into 'main'
Matthew Fernandez [Sun, 4 Dec 2022 17:49:31 +0000 (17:49 +0000)]
Merge branch 'smattr/c8daf543-cbfe-4778-b845-a93a91f92189' into 'main'

neatogen: more cgraph allocation wrapper migration

See merge request graphviz/graphviz!2987

2 years agoneatogen assign_digcola_levels: use cgraph wrappers for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen assign_digcola_levels: use cgraph wrappers for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoneatogen generateNonoverlapConstraints: use cgraph wrappers for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen generateNonoverlapConstraints: use cgraph wrappers for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoneatogen initCMajVPSC: use cgraph wrappers for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen initCMajVPSC: use cgraph wrappers for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoneatogen: remove commented out logging statements
Matthew Fernandez [Sat, 3 Dec 2022 21:15:20 +0000 (13:15 -0800)]
neatogen: remove commented out logging statements

2 years agoneatogen _neato_set_aspect: abbreviate coordinate swapping
Matthew Fernandez [Sat, 3 Dec 2022 21:11:56 +0000 (13:11 -0800)]
neatogen _neato_set_aspect: abbreviate coordinate swapping

2 years agoneatogen _spline_edges: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen _spline_edges: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoneatogen makeObstacle: use a C99 bool for 'isPoly'
Matthew Fernandez [Sat, 3 Dec 2022 21:11:15 +0000 (13:11 -0800)]
neatogen makeObstacle: use a C99 bool for 'isPoly'

2 years agoneatogen _neato_set_aspect: replace 'MIN' with its stdlib equivalent
Matthew Fernandez [Sat, 3 Dec 2022 21:10:53 +0000 (13:10 -0800)]
neatogen _neato_set_aspect: replace 'MIN' with its stdlib equivalent

2 years agoneatogen _spline_edges: remove unused 'P' local
Matthew Fernandez [Sat, 3 Dec 2022 20:53:54 +0000 (12:53 -0800)]
neatogen _spline_edges: remove unused 'P' local

2 years agoneatogen makeObstacle: use cgraph wrappers for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen makeObstacle: use cgraph wrappers for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoneatogen makeSelfArcs: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen makeSelfArcs: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoneatogen newitem: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen newitem: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoneatogen make_barriers: use cgraph wrapper for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen make_barriers: use cgraph wrapper for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoneatogen compute_new_weights: use cgraph wrappers for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen compute_new_weights: use cgraph wrappers for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

2 years agoneatogen fcmpf: use early return style and add braces
Matthew Fernandez [Sat, 3 Dec 2022 20:49:26 +0000 (12:49 -0800)]
neatogen fcmpf: use early return style and add braces

2 years agoneatogen compute_apsp_simple: use cgraph wrappers for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen compute_apsp_simple: use cgraph wrappers for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

We can also squash a -Wsign-conversion warning at the same time, noting that the
square of a signed number is always non-negative.

2 years agoneatogen compute_apsp_dijkstra: use cgraph wrappers for allocation
Matthew Fernandez [Fri, 18 Nov 2022 01:14:41 +0000 (17:14 -0800)]
neatogen compute_apsp_dijkstra: use cgraph wrappers for allocation

The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.

We can also squash a -Wsign-conversion warning at the same time, noting that the
square of a signed number is always non-negative.

2 years agoMerge branch 'smattr/3c4308aa-6a8e-4737-8f3f-fe806685038f' into 'main'
Matthew Fernandez [Sat, 3 Dec 2022 17:22:27 +0000 (17:22 +0000)]
Merge branch 'smattr/3c4308aa-6a8e-4737-8f3f-fe806685038f' into 'main'

Start 7.0.5 development

See merge request graphviz/graphviz!2984

2 years agoStart 7.0.5 development
Matthew Fernandez [Sat, 3 Dec 2022 16:34:44 +0000 (08:34 -0800)]
Start 7.0.5 development

2 years agoMerge branch 'smattr/76b52b3e-e98d-43e3-9717-6d816a840f54' into 'main' 7.0.4
Matthew Fernandez [Sat, 3 Dec 2022 16:31:35 +0000 (16:31 +0000)]
Merge branch 'smattr/76b52b3e-e98d-43e3-9717-6d816a840f54' into 'main'

Stable release 7.0.4

See merge request graphviz/graphviz!2980

2 years agoStable release 7.0.4
Matthew Fernandez [Mon, 28 Nov 2022 15:47:51 +0000 (07:47 -0800)]
Stable release 7.0.4

2 years agoadd a test for date typos in the CHANGELOG
Matthew Fernandez [Wed, 30 Nov 2022 05:31:37 +0000 (21:31 -0800)]
add a test for date typos in the CHANGELOG

The first cut of the upcoming release had such a typo in it.

2 years agoMerge branch 'smattr/2c47a1a1-8699-4dc9-8c0c-20090089c3bf' into 'main'
Matthew Fernandez [Thu, 1 Dec 2022 15:47:21 +0000 (15:47 +0000)]
Merge branch 'smattr/2c47a1a1-8699-4dc9-8c0c-20090089c3bf' into 'main'

fix changelog entry that was entered under an older release

See merge request graphviz/graphviz!2983

2 years agofix changelog entry that was entered under an older release
Matthew Fernandez [Wed, 30 Nov 2022 06:05:56 +0000 (22:05 -0800)]
fix changelog entry that was entered under an older release

When rebasing 8f60584180071ab9c0f212c3f31aac1d53ed4757, I mistakenly forgot to
adjust its changelog entry for the release that had happened in the intervening
time.

Gitlab: #56

2 years agoMerge branch 'smattr/gitlab-56' into 'main'
Matthew Fernandez [Wed, 30 Nov 2022 05:03:32 +0000 (05:03 +0000)]
Merge branch 'smattr/gitlab-56' into 'main'

ortho: dynamically manage trapezoid structures

Closes #1880 and #56

See merge request graphviz/graphviz!2973

2 years agoortho add_segment: use C99 bools for some boolean locals
Matthew Fernandez [Thu, 24 Nov 2022 18:56:05 +0000 (10:56 -0800)]
ortho add_segment: use C99 bools for some boolean locals

2 years agoortho: push trapezoids allocation into 'construct_trapezoids'
Matthew Fernandez [Thu, 24 Nov 2022 18:52:55 +0000 (10:52 -0800)]
ortho: push trapezoids allocation into 'construct_trapezoids'

This makes it more obvious to readers and the compiler that the value of this
on-entry to `construct_trapezoids` is unimportant and the value does not need to
be retained between the two `construct_trapezoids` calls in `partition`.

2 years agoortho: allocate trapezoid structures on-demand
Matthew Fernandez [Thu, 24 Nov 2022 18:41:03 +0000 (10:41 -0800)]
ortho: allocate trapezoid structures on-demand

The ortho library estimated the number of trapezoid structures it would need
upfront based on the number of segments it was operating on. This estimation was
wrong. Some inputs could exceed the estimation, at which point Graphviz would
abort with an error message.

This change makes trapezoid allocation dynamic, with the trapezoid collection
being expanded on-demand as new trapezoids are needed. The number of the
trapezoids is now only constrained by how much available memory there is.

Gitlab: fixes #56, fixes #1880

2 years agoortho: use a dynamic collection for final intersected boxes
Matthew Fernandez [Thu, 24 Nov 2022 18:26:09 +0000 (10:26 -0800)]
ortho: use a dynamic collection for final intersected boxes

This is a simplification that removes the need for over-allocation and then
later shrinking.

Gitlab: #56

2 years agoortho: stop passing decomposition boxes size around
Matthew Fernandez [Thu, 24 Nov 2022 18:19:56 +0000 (10:19 -0800)]
ortho: stop passing decomposition boxes size around

With the horizontal and vertical decomposition boxes being managed dynamically,
their size is already stored in the `boxes_t` struct and we can use that
instead.

Gitlab: #56

2 years agoortho: manage decomposition boxes as dynamic arrays
Matthew Fernandez [Thu, 24 Nov 2022 18:03:35 +0000 (10:03 -0800)]
ortho: manage decomposition boxes as dynamic arrays

There is now no need to predict the number of horizontal and vertical
decomposition boxes upfront. The arrays for both are expanded on-demand.

This is a step towards resolving an issue where the upfront estimated trapezoid
count is exceeded, but this is likely an optimization for most workloads where
the estimation is not exceeded. Now fewer decomposition boxes will be allocated
because we generally do not need the full count that was estimated previously.

Gitlab: #56

2 years agooutline dynamic box array logic into a header
Matthew Fernandez [Thu, 24 Nov 2022 17:52:01 +0000 (09:52 -0800)]
outline dynamic box array logic into a header

This is not great practice, putting functions like this into a header. But this
is a stepping stone to reusing this code in lib/ortho and it seems cleaner than
trying to manage yet another set of partially exported symbols.

Gitlab: #56

2 years agoortho: use a bit array for trapezoid 'visited' array
Matthew Fernandez [Thu, 24 Nov 2022 17:40:02 +0000 (09:40 -0800)]
ortho: use a bit array for trapezoid 'visited' array

Slightly reduces memory usage.

2 years agoortho monotonate_trapezoids: allocate structures based on trapezoid count
Matthew Fernandez [Thu, 24 Nov 2022 17:31:02 +0000 (09:31 -0800)]
ortho monotonate_trapezoids: allocate structures based on trapezoid count

`tr->length` and `TRSIZE(nsegs)` are the same value here, so this has no
immediate effect. This is a step towards moving to on-demand allocation.

Gitlab: #56

2 years agoortho: allocate qnodes on-demand
Matthew Fernandez [Thu, 24 Nov 2022 17:21:01 +0000 (09:21 -0800)]
ortho: allocate qnodes on-demand

The number of elements in this array is no longer calculated upfront; we simply
expand the array as needed. This removes one blocker to removing calculation of
the number of trapezoids upfront.

As noted in the comment in this commit, the first element (index 0) is reserved.
I do not know the motivation for this, but various places use index > 0 to
decide if they are dealing with a real node.

Gitlab: #56

2 years agoortho init_query_structure: separate assignment statements
Matthew Fernandez [Thu, 24 Nov 2022 21:32:58 +0000 (13:32 -0800)]
ortho init_query_structure: separate assignment statements

This looks like a pure readability change, but is actually preparation for an
upcoming commit. A future commit alters `newnode` to reallocate `qs->data`.
Without the current change, there is no sequence point between the index into
`qs->data` at the start of these lines and the reallocation (in future)
performed by the function call at the end of these lines. This is undefined
behavior with respect to the C standard.

This is quite a subtle problem. I initially did not spot it and was only alerted
by failures under CentOS 7, which encountered nodes with an invalid `nodetype`.
This problem was not reproducible on any other platform, even under ASan and
UBSan. What I believe was going on here is that the combination of the C
compiler and the Glibc on CentOS 7 is the only environment we have which
accidentally leveraged this undefined behavior, by sequencing these operations
as indexing into `qs->data` and _then_ performing the reallocation, resulting in
a write to invalid heap memory.

Gitlab: #56

2 years agoortho: use qnodes length, removing the need for 'QSIZE' global
Matthew Fernandez [Thu, 24 Nov 2022 17:12:24 +0000 (09:12 -0800)]
ortho: use qnodes length, removing the need for 'QSIZE' global

Gitlab: #56

2 years agoortho: track number of qnodes with its array
Matthew Fernandez [Thu, 24 Nov 2022 17:07:01 +0000 (09:07 -0800)]
ortho: track number of qnodes with its array

Similar to the prior changes to `trap_t`, this is a step towards allocating
these on-demand and thus removing predictions/estimations about the total
required qnodes.

Gitlab: #56

2 years agoortho: remove 'TRSIZE' and rely on trapezoid collection length
Matthew Fernandez [Thu, 24 Nov 2022 16:54:06 +0000 (08:54 -0800)]
ortho: remove 'TRSIZE' and rely on trapezoid collection length

We no longer need the global here. Apart from progress towards #56, this
makes progress towards thread-safety too.

Gitlab: #56

2 years agoortho: track number of trapezoids along with its array
Matthew Fernandez [Thu, 24 Nov 2022 16:48:48 +0000 (08:48 -0800)]
ortho: track number of trapezoids along with its array

This is an alternative to passing around `ntraps` or relying on the `TRSIZE`
computation. It is a step towards fixing an issue where the allocated number of
trapezoids is exceeded.

The diff looks large but most of this change is mechanical, migrating `tr` uses
to be aware of the new structure.

This introduces some new warnings, but the intention is to remove these in
upcoming commits as we switch to on-demand allocation.

Gitlab: #56

2 years agoMerge branch 'smattr/6b2dad73-a529-45a8-8b2f-fe276aab3c22' into 'main'
Matthew Fernandez [Wed, 30 Nov 2022 04:01:06 +0000 (04:01 +0000)]
Merge branch 'smattr/6b2dad73-a529-45a8-8b2f-fe276aab3c22' into 'main'

remove some unused 'flag' parameters

See merge request graphviz/graphviz!2979

2 years agosfdpgen uniform_stress: remove 'flag' that is always set to 0
Matthew Fernandez [Mon, 28 Nov 2022 00:48:50 +0000 (16:48 -0800)]
sfdpgen uniform_stress: remove 'flag' that is always set to 0

2 years agosfdpgen post_process_smoothing: remove 'flag' that is always set to 0
Matthew Fernandez [Mon, 28 Nov 2022 00:46:54 +0000 (16:46 -0800)]
sfdpgen post_process_smoothing: remove 'flag' that is always set to 0

2 years agosparse QuadTree_get_supernodes: remove 'flag' that is always set to 0
Matthew Fernandez [Mon, 28 Nov 2022 00:40:50 +0000 (16:40 -0800)]
sparse QuadTree_get_supernodes: remove 'flag' that is always set to 0

Note that we can also remove follow on checks after calls to this function when
`flag` is known to be 0 based on its prior initialization.

2 years agosparse QuadTree_get_supernodes_internal: remove unused 'flag' parameter
Matthew Fernandez [Mon, 28 Nov 2022 00:36:54 +0000 (16:36 -0800)]
sparse QuadTree_get_supernodes_internal: remove unused 'flag' parameter