133 Commits
Author SHA1 Message Date
Oliver Hamlet cfa2835c2f Set 0.24.0's release date 2024-09-14 08:25:49 +01:00
Oliver Hamlet 5ce09aa754 Update changelog and version for 0.24.0 2024-09-13 22:17:18 +01:00
Oliver Hamlet e9321ae544 Update changelog and version for 0.23.1 release 2024-08-24 11:28:30 +01:00
Oliver Hamlet 1d2ebf5572 Fix links in changelog 2024-08-24 11:27:54 +01:00
Oliver Hamlet f3eabb639b Update changelog and version for 0.23.0 release 2024-06-29 22:09:55 +01:00
Oliver Hamlet 03baecec4c Update changelog and version for 0.22.4 release 2024-05-03 07:15:26 +01:00
Oliver Hamlet b23e33144e Update changelog and version for 0.22.3 release 2023-12-06 19:02:23 +00:00
Oliver Hamlet 8463e9ee7c Update changelog and version for 0.22.2 release 2023-11-25 17:05:41 +00:00
Oliver Hamlet 2614e02dbf Update version and changelog for v0.22.1 release 2023-10-06 14:49:16 +01:00
Oliver Hamlet 8a21b8321b Update version and changelogs for v0.22.0 release 2023-09-29 17:15:38 +01:00
Oliver Hamlet bf1a2fc98e Update release date 2023-09-13 10:04:54 +01:00
Oliver Hamlet cb4e6e6743 Update release date 2023-09-12 20:31:07 +01:00
Oliver Hamlet 2408a7b3ba Remove SimpleMessage
It's no longer used by LOOT.
2023-09-12 19:56:53 +01:00
Oliver Hamlet 0a7efcb4d3 Update version and changelogs for v0.21 release 2023-08-30 19:57:06 +01:00
Oliver Hamlet 356eb0243f Don't add .ghost file extensions in plugin class
Instead assume that paths passed in are correct, and then trim the
.ghost extension if present before setting the plugin name.
2023-08-23 19:48:20 +01:00
Oliver Hamlet 74805a3bc6 Update version and changelog for v0.19.4 release 2023-05-06 21:19:54 +01:00
Oliver Hamlet c5efd9e5c2 Update version and changelog for v0.19.3 release 2023-03-18 21:56:15 +00:00
Oliver Hamlet 3a070420c8 Update version and changelog for v0.19.2 release 2023-01-13 21:27:03 +00:00
Oliver Hamlet 6c1d7dc57f Update version and changelog for v0.19.1 release 2023-01-09 19:13:26 +00:00
Oliver Hamlet 58df21f11c Revert back to using lexicographical vertex order
For vertices in the plugin graph. This is so that the group and overlap
edges are evaluated in an order that does not depend on the current load
order. Tie-breaking still uses the current load order.

This is necessary because if the group and overlap edges that get added
depend on the current load order, sorting and applying changes the
current load order, so sorting again may give different results even
even though no plugin data or metadata has changed.
2023-01-09 19:00:41 +00:00
Oliver Hamlet 938d5bce57 Update version and changelog for v0.19.0 release 2023-01-07 19:21:35 +00:00
Oliver Hamlet aaf05a6460 Find predecessor group plugins on demand
Rather than storing them in PluginSortingData, which is now immutable.

This also means the predecessor groups plugins map can use vertices
instead of plugin names, which is a
little simpler.
2023-01-06 22:30:12 +00:00
Oliver Hamlet 8c40db89fd Use C++17 parallel algorithms during plugin loading
This requires linking to the TBB library on Linux, where libstdc++
and libc++ don't provide an implementation.
2023-01-06 22:20:36 +00:00
Oliver Hamlet ef2a34aa23 Minor optimisations to adding hardcoded edges
It only speeds up sorting by about 3% with my 1619 plugin load order,
but I think the logic is simpler despite all the iterators involved.
2023-01-06 22:20:33 +00:00
Oliver Hamlet 232202c17e Split plugin graph in two
All master-flagged plugins must load before all non-master-flaggeg
plugins, and this means that most of the edges added in the graph
(about 2/3rds in large load orders) are just enforcing this.

Having lots of edges negatively impacts the performance of checking for
paths, and adding overlap edges is O(n^2), so instead of having one
graph containing all plugins, create one graph for masters and another
for plugins, and sort them independently, then append the non-masters
order to the masters order.

This speeds up my 1619 plugin sort from 44s to 34s, and larger load
orders should see more benefit.

This does introduce some behavioural changes though:

- any requirement or load after metadata that tries to put a master
  after a non-master will now be ignored instead of causing a cyclic
  interaction error. A master-flagged plugin that has a
  non-master-flagged plugin will also no longer cause a cyclic
  interaction error, but that scenario is much less likely.
- The resulting load order may differ slightly. When tie-breaking finds
  a path that contradicts the old load order, it pins the positions of
  plugins in the path. However, the lack of master flag edges causes
  later edges to be added or skipped differently. This is all ultimately
  down to the order of edge iteration mattering during path discovery
  (since it stops at the first path discovered), so even though the two
  approaches result in graphs that enforce the same relationships
  between plugins at the point that tie-breaking starts, ties may be
  broken differently due to differences in the edges enforcing those
  relationships.
2023-01-06 22:20:31 +00:00