Commit Graph

2202 Commits

Author SHA1 Message Date
Chris Hennes
5f623390fb Merge pull request #20142 from bofdahof/ranges
Apply C++20 std::ranges (mainly to std::find)
2025-03-17 03:08:27 -05:00
Chris Hennes
4fcdac28fb Merge pull request #19583 from hyarion/refactor/base-type
Refactor Base::Type
2025-03-17 00:03:22 -05:00
Chris Hennes
b89ad30bc0 Merge pull request #19917 from tritao/refactor-document-recompute
Core: Refactor code around document and feature recompute
2025-03-16 23:59:12 -05:00
bofdahof
4a16ea41a7 App: apply std::ranges 2025-03-16 17:14:38 -05:00
Chris Hennes
dced463dc6 Merge pull request #19428 from tritao/base-tracy-profiler
Base: Add Tracy frame profiling support.
2025-03-14 04:12:05 +00:00
Joao Matos
7ae14d6bd5 Base: Add build support and instrumentation for the Tracy profiler. 2025-03-14 03:41:30 +00:00
Chris Hennes
bfd1fa47d8 Merge pull request #20049 from hyarion/fix/ppa
Refactor static type checks
2025-03-10 16:53:00 +00:00
Chris Hennes
ae01fcc3de Merge pull request #20064 from bofdahof/application-remove-some-using-namespace
[App] Application remove some using namespace
2025-03-10 16:42:28 +00:00
Benjamin Nauck
ad59054918 Refactor static type checks 2025-03-09 17:50:20 +01:00
bofdahof
2d3f0d714d cleanup commented lines 2025-03-08 13:37:46 +10:00
bofdahof
ae9eec20a6 remove using namespace Base::FileInfo 2025-03-08 13:37:46 +10:00
bofdahof
65619fae39 remove using namespace boost::program_options 2025-03-08 13:20:32 +10:00
bofdahof
00173ebe02 remove using namespace std 2025-03-08 13:18:06 +10:00
bofdahof
f66561b23a remove using namespace boost 2025-03-08 13:14:35 +10:00
bofdahof
00ce73dc45 remove using namespace Base 2025-03-08 13:13:38 +10:00
Chris Hennes
50e80f4a03 Merge pull request #20052 from mosfet80/CleanPython
removed old python code <3.10
2025-03-08 01:10:58 +00:00
Chris Hennes
a028d8d299 Merge pull request #20058 from tritao/fix-app-document-main-doc-load
App: Fix regression for document creation requests coming from the main document.
2025-03-07 23:28:27 +00:00
mos
c70a7933e6 Removed old Python code <3.10 2025-03-07 16:34:08 -06:00
Joao Matos
668b0acc00 App: Fix regression when creating new document coming from the main document. 2025-03-07 20:54:16 +00:00
Joao Matos
9bcdd2d44c Rename DocumentCreateFlags to DocumentInitFlags. 2025-03-07 20:54:16 +00:00
Joao Matos
d6510061b3 App: Fix memory leak regression in ApplicationPy::newDocument. 2025-03-07 20:42:51 +00:00
Joao Matos
1c2ac570f8 Convert DocumentCreateFlags instances to use designated initializer list. 2025-03-07 20:42:51 +00:00
Chris Hennes
750d8c6a96 App: Cleanup parameter names in Application.*
* Unify names in header and cpp files
* Make names consistent across methods with similar uses
* Fix spacing

Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
2025-03-07 08:47:49 -06:00
Benjamin Nauck
a0a64c1fb8 Base: Make Type::importModule private 2025-03-06 20:50:04 +01:00
Kevin Martin
a0d0fc1498 Only do Label Change notification if the label truly changes
The code for setting the value of a Label property would do a quick return if the new label was equal to the current one, but otherwise the proposed new label might be modified to make it unique. If the modified new value were equal to the current value, a Change notification would still be generated. This no longer occurs.
2025-03-05 22:23:43 -05:00
Kevin Martin
bf55e4e258 Deregister DocumentObject's Label before deleting the object
Under certain circumstances the existing code would try to obtain the Label of a DocumentObject after that object had been deleted, causing an access to freed memory and failing to deregister the Label. The latter would lead to phanton Label collisions and unexpected generation of unique labels.
2025-03-05 22:23:42 -05:00
Chris Hennes
b090e27dcf App: Switch to isNullOrEmpty() 2025-03-03 19:24:15 -06:00
Chris Hennes
66e1710956 App: Minor formatting from review
Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
2025-03-03 19:21:05 -06:00
bofdahof
091f73f09f Calling static via instance 2025-03-03 19:21:04 -06:00
bofdahof
035d789ffa Narrowing conversion 2025-03-03 19:21:04 -06:00
bofdahof
3ddf2fe67b Don't use endl 2025-03-03 19:21:04 -06:00
bofdahof
4811be9881 Reserve vector size 2025-03-03 19:21:04 -06:00
bofdahof
8ff4b1b018 Redundant c_str() 2025-03-03 19:21:04 -06:00
bofdahof
31825c28aa Else after return 2025-03-03 19:21:04 -06:00
bofdahof
4bfe65b48c Declaration hides previous 2025-03-03 19:21:04 -06:00
bofdahof
ee849b6349 C++ style cast instead of C 2025-03-03 19:21:04 -06:00
bofdahof
78696bdaee Join declaration and assignment 2025-03-03 19:21:04 -06:00
bofdahof
2ab03306ca Use auto 2025-03-03 19:21:04 -06:00
bofdahof
c3eee2dc99 Simplify expression 2025-03-03 19:21:04 -06:00
bofdahof
819faf71ed DRY 2025-03-03 19:20:59 -06:00
Joao Matos
77203eaa06 App: Capitalize exception message in Document.cpp. 2025-03-03 21:22:22 +00:00
Joao Matos
0ba8e3f769 App: Reorder includes in App/private/DocumentP.h. 2025-03-03 21:22:22 +00:00
Joao Matos
ea8ff59c27 App: Refactor with early exit in Document::recomputeFeature. 2025-03-03 21:22:22 +00:00
Chris Hennes
7f1c43a335 Merge pull request #19636 from kadet1090/color-in-base
Base: Move App::Color to Base
2025-03-02 16:36:40 -06:00
Chris Hennes
6512dc69e9 Merge pull request #19761 from chennes/coverityFixesFeb2025
Base: Coverity fixes from February 2025 run (round 1)
2025-03-02 16:15:17 -06:00
Joao Matos
006feaf276 App: Remove old DAG implementation. 2025-02-28 14:32:32 +00:00
Benjamin Bræstrup Sayoc
755229df23 Build: suppress warnings from 3rd party libraries
Warnings from 3rd parties are not relevant and are only polluting the warning output. Marking these libraries as SYSTEM suppresses warning.

https://gcc.gnu.org/onlinedocs/cpp/Invocation.html#index-I
https://gcc.gnu.org/onlinedocs/cpp/System-Headers.html
2025-02-25 14:39:05 +00:00
Chris Hennes
5f35875c46 Merge pull request #19516 from tritao/tools-python-bindings-gen
Tools: Introduce a new Python-based C++ bindings generator
2025-02-24 16:39:24 +00:00
Joao Matos
cc6ffb44de Core: Move PyCXX library to src/3rdParty. 2025-02-24 16:36:06 +00:00
Kevin Martin
41f09db9e1 Address performance of existing unique-name generation (Part 2) (#18676)
As described in Issue 16849, the existing Tools::getUniqueName method
requires calling code to form a vector of existing names to be avoided.

This leads to poor performance both in the O(n) cost of building such a
vector and also getUniqueName's O(n) algorithm for actually generating
the unique name (where 'n' is the number of pre-existing names).

This has  particularly noticeable cost in documents with large numbers
of DocumentObjects because generating both Names and Labels for each new
object incurs this cost. During an operation such as importing this
results in an O(n^2) time spent generating names.

The other major cost is in the saving of the temporary backup file,
which uses name generation for the "files" embedded in the Zip file.
Documents can easily need several such "files" for each object in the
document.

This update includes the following changes to use the newly-added
UniqueNameManager as a replacement for the old Tools::getUniqueName
method and deletes the latter to remove any temptation to use it as
its usage model breeds inefficiency:

Eliminate Tools::getUniqueName, its local functions, and its unit tests.

Make DocumentObject naming use the new UniqueNameManager class.

Make DocumentObject Label naming use the new UniqueNameManager class.
This needs to monitor DocumentObject Labels for changes since this
property is not read-only. The special handling for the Label
property, which includes optionally forcing uniqueness and updating
links in referencing objects, has been mostly moved from
PropertyString to DocumentObject.

Add Document::containsObject(DocumentObject*) for a definitive
test of an object being in a Document. This is needed because
DocumentObjects can be in a sort of limbo (e.g. when they are in the
Undo/Redo lists) where they have a parent linkage to the Document but
should not participate in Label collision checks.

Rename Document.getStandardObjectName to getStandardObjectLabel
to better represent what it does.

Use new UniqueNameManager for Writer internal filenames within the zip
file.

Eliminate unneeded Reader::FileNames collection. The file names
already exist in the FileList collection elements. The only existing
use for the FileNames collection was to determine if there were any
files at all, and with FileList and FileNames being parallel
vectors, they both had the same length so FileList could be used
for this test..

Use UniqueNameManager for document names and labels. This uses ad hoc
UniqueNameManager objects created on the spot on the assumption that
document creation is relatively rare and there are few documents, so
although the cost is O(n), n itself is small.

Use an ad hoc UniqueNameManager to name new DymanicProperty entries.
This is only done if a property of the proposed name already exists,
since such a check is more-or-less O(log(n)), almost never finds a
collision, and avoids the O(n) building of the UniqueNameManager.
If there is a collision an ad-hoc UniqueNameManager is built
and discarded after use.
The property management classes have a bit of a mess of methods
including several to populate various collection types with all
existing properties. Rather than introducing yet another such
collection-specific method to fill a UniqueNameManager, a
visitProperties method was added which calls a passed function for
each property. The existing code (e.g. getPropertyMap) would be
simpler if they all used this but the cost of calling a lambda
for each property must be considered. It would clarify the semantics
of these methods, which have a bit of variance in which properties
populate the passed collection, e.g. when there are duplicate names..
Ideally the PropertyContainer class would keep a central directory of
all properties ("static", Dynamic, and exposed by ExtensionContainer and
other derivations) and a permanent UniqueNameManager. However the
Property management is a bit of a mess making such a change a project
unto itself.
2025-02-24 10:23:53 -06:00