Compare commits

..
200 Commits
Author SHA1 Message Date
mlangkabel 8618c0b01f Revert "test"
This reverts commit 21d2520b31.
2020-02-05 20:20:32 +01:00
mlangkabel 21d2520b31 test 2020-02-05 19:55:45 +01:00
mlangkabel 560c44ae9b test 2020-02-05 07:35:39 +01:00
mlangkabel cff407eb54 test travis 2020-02-05 07:20:02 +01:00
mlangkabel 10ba052ea1 Some fixes
* make qt configuration in CMake more flexible
* move creating of symlinks on windows from post build event to cmake
* create symlinks for test data in cmake on windows
* switch to 7zip for extraction python indexer
* make results of sourcegrouptests case insensitive
2020-02-05 07:20:02 +01:00
Malte LangkabelandGitHub 7f9f098c70 logic: handled case when selected project location can not be written (issue #735) (#906) 2020-02-04 20:24:59 +01:00
Malte LangkabelandGitHub 7556d171cb build: "fixed" cmake for test target (#909)
This should just be a temporary solution until we remove the circular dependencies in our library targets
2020-02-04 19:52:46 +01:00
Eberhard Graether 6662a8c41c src: Hotfix for issue #907 2020-02-03 18:08:11 +01:00
Malte LangkabelandGitHub 3a6beb76fc ui: fixed error help dialog not showing up during indexing (issue #740) (#904) 2020-02-03 15:45:09 +01:00
Malte LangkabelandGitHub f6bddec0ec build: add missing dependency to CMakeLists (#905) 2020-02-03 14:36:19 +01:00
Waqar AhmedandGitHub f7923ebd75 logic: Allow changing the log file path in preferences (issue #156) (#900) 2020-02-03 10:54:52 +01:00
Eberhard Graether 9669dc1e71 res: Updated SPONSORS.md 2020-02-03 10:14:30 +01:00
Waqar AhmedandGitHub ecaf25ead6 perf: Fix all clazy qstring-allocation warnings (#903) 2020-01-29 19:48:35 +01:00
technateNGandGitHub 9d26104d2f perf: PersistentStorage::getGraphForAll - avoiding second sqlite call. (#890)
* perf: PersistentStorage::getGraphForAll - avoiding second sqlite call.

* std::map -> std::unordered_map for m_symbolDefinitionKinds.

* src: Added PersistentStorage::addFileNodeToGraph.

* src: Refactor and Bugfixes in new implementation of getGraphForAll.

* std::map -> std::unordered_map for m_fileNodeIndexed.
* Added PersistentStorage::addNodeToGraph.
2020-01-29 18:30:22 +01:00
Malte LangkabelandGitHub 8cc4aaf6ea logic: fix crash when project directory contains non-latin character (issue #899) (#901)
* added "isValid()" to FilePath
* used "isValid" in check of selected project directory
2020-01-27 21:52:05 +01:00
Malte LangkabelandGitHub 719591a247 test: added test for fetching dependencies from gradle config (#897) 2020-01-20 11:47:26 +01:00
Malte LangkabelandGitHub 00137a2b7f build: update qt version in appveyor script (#896) 2020-01-20 10:45:09 +01:00
Malte LangkabelandGitHub a812a49b0c test: removed gradle tests to fix Linux CI (#895) 2020-01-15 23:32:51 +01:00
Eberhard Graether dedbc2eb27 data: Fixed endless recursion on cyclic inheritance edges
Fixed an endless recursion that happenes when the index contains cyclic inheritance relationships,
which might accidentally appear due to name collisions.
2020-01-14 00:14:05 +01:00
Malte LangkabelandGitHub c8dcb193ff test: added tests for gradle utility functions (#892) 2020-01-13 19:26:17 +01:00
Malte LangkabelandGitHub d3b9e46cd9 docs: mention Choco package in Readme 2020-01-13 11:29:09 +01:00
technateNGandMalte Langkabel cbf8e3412f perf: Added utilities::caseInsensitiveLess. (#882)
* Added utilities::caseInsensitiveLess to compare two wstring arguments
* Replaced less comparision method in DummyNodeComp.
* Added tests for caseInsensitiveLess.
2020-01-10 07:55:47 +01:00
technateNGandMalte Langkabel 0dcb83403c perf: GetOverviewBundleNodeTypesOrdered to static const variable. (#878) 2020-01-07 12:44:44 +01:00
Malte LangkabelandGitHub f799bd4946 doc: added FAQ question for contact info (#884) 2020-01-07 09:55:15 +01:00
AlvodaandEberhard Gräther 2422e09b7f ui: Add 'close tabs to the right' context menu action to tab bar #822 (#875)
* first try to implement closeTabs toRight.

* removed .kdev4

* signals and slots mechanisms for closeTabstoRight now done correct.

* feature: add option to close tabs to the right on right-click context menu.

* indentation, whitespaces etc.
2020-01-04 11:00:18 +01:00
Malte LangkabelandGitHub e68da85bbd logic: fix CI by replacing code that depends on a hard-coded date (#876) 2020-01-02 23:09:32 +01:00
Eberhard Graether b39a8d33dd res: Update SPONSORS.md 2020-01-01 15:14:21 +01:00
AlvodaandMalte Langkabel 2a996ed9a0 build: fixed race condition in cmake for creating symlinks on Linux (#872) 2019-12-30 13:11:33 +01:00
Malte LangkabelandGitHub 28b67bc91d logic: record calls to cxx destructor on delete keyword (issue #829) (#863) 2019-12-29 23:05:24 +01:00
Malte LangkabelandGitHub 270c8698dc logic: retry pre-filling mandatory empty path settings on startup (#864) 2019-12-29 23:03:37 +01:00
Malte LangkabelandGitHub 2ab4e2bab9 build: set correct working directory for tests in cmake on Windows (#865) 2019-12-29 23:03:02 +01:00
Malte LangkabelandGitHub a0856a6de5 ui: change caption of close dialog button when finished shallow indexing (#861) 2019-12-22 14:21:07 +01:00
Malte LangkabelandGitHub bc911923d0 logic: improved handling of unloadable source group (#862)
* improve comparison to respect all values
* improved UI to display the source group type
2019-12-22 14:19:51 +01:00
David ManouchehriandEberhard Gräther be8023063a res: Update SPONSORS.md (#860) 2019-12-22 00:55:06 +01:00
Eberhard Graether 8c2b55a324 res: Changelog for Sourcetrail 2019.4.102 2019-12-20 12:16:53 +01:00
David HallasandMalte Langkabel ceb900589e build: Fix build on Gentoo Linux (#854)
Fixes the build on Gentoo Linux. On Gentoo Linux the user chooses which
llvm backend to build and install, therefore we need to loop over the
installed targets and append the libraries needed instead of relying on
the full list of supported backends.
2019-12-17 18:07:50 +01:00
Malte LangkabelandGitHub ceb274478d build: added Travis ci for Linux builds (#857) 2019-12-17 11:04:02 +01:00
Eberhard Graether 99cc3d9636 build: Updated Docker Linux 64bit image to Qt 5.12.6 and LLVM/Clang 9.0.0
* updated to CentOS 7
* removed 32bit image
2019-12-16 15:38:31 +01:00
mlangkabel 67b803bd29 test: fixed java tests 2019-12-16 14:51:45 +01:00
Malte LangkabelandGitHub 11110b6a6f ui: update selectable cxx language standards and cross-compiler flags (issue #835) (#856) 2019-12-16 13:13:05 +01:00
Malte LangkabelandGitHub ebed9b0e56 docs: update contact information in documentation 2019-12-13 17:00:39 +01:00
Alexey AndronovandMalte Langkabel cf0ad287d8 docs: Replace unsafe http links with https in docs (#853) 2019-12-13 15:40:03 +01:00
Malte LangkabelandGitHub 3932bb1fb8 logic: allow to specify custom Maven settings.xml file in project settings (issue #794) (#847) 2019-12-11 14:00:20 +01:00
Malte LangkabelandGitHub d33a5357dd logic: update python indexer to fix issue #771 (#846)
This will allow the Python indexer to accept a Windows Python environment with the python.exe located in the root directory of the environment.
2019-12-10 19:04:07 +01:00
Malte LangkabelandGitHub 732c389520 logic: extend language support to Java 12 (issue #752) (#844)
* update java indexer dependencies
* update java language support to java 12
* enable java preview features by default
* add test for Java 12 support
2019-12-10 15:02:59 +01:00
Malte LangkabelandGitHub 097833beee logic: add java 9 path detector for windows (#843) 2019-12-10 13:30:30 +01:00
Malte LangkabelandGitHub e8480d4a43 build: make build fail if maven fails to generate the java indexer jar (#842) 2019-12-10 13:29:59 +01:00
Malte LangkabelandGitHub f93b063763 docs: list maven as a dependency for building Java language support in readme (#841) 2019-12-10 11:50:50 +01:00
Eberhard Graether f25e8aa32d ui: Return to active symbol definition in code view when clicking active node in graph view (issue #836) 2019-12-09 17:51:18 +01:00
Rivka LigierandMalte Langkabel eeb5b13797 docs: restructure software documentation (#816)
also re-phrased some sentences and fixed minor grammar errors
2019-12-07 11:18:17 +01:00
Eberhard GrätherandGitHub 1558b7215d build: Changes to compile on Debian Buster (#827)
based on #784
2019-12-03 23:59:36 +01:00
Malte LangkabelandGitHub e6e0ecbcf5 logic: fix recording template parameter as local symbol instead of qualifier (#824) 2019-12-03 19:35:38 +01:00
Malte LangkabelandGitHub fa6dd6c9e1 logic: improve usability of shallow indexing ui (#823)
* added "--shallow" command line option to request shallow indexing
* modified behavior of Sourcetrail to always perform a deep index if not explicitly specified differently by the user
2019-12-03 18:26:02 +01:00
Malte LangkabelandGitHub 00bf7ebda6 logic: color scheme fixes (#821)
* fixed issues where color scheme entries were missing
* removed color scheme entries for nodes and edges that do not exist anymore
2019-12-03 14:46:11 +01:00
Alexey AndronovandEberhard Gräther 136f3b5eff ui: drag and drop selected source code from code view into other applications (#817) (issue #707) 2019-12-02 17:59:10 +01:00
Eberhard Graether 042ccb55da res: Updated SPONSORS.md for Dec 2019 2019-12-02 13:18:43 +01:00
Michał JaniszewskiandMalte Langkabel f64019b87f build: use ninja on appveyor (#819) 2019-12-02 13:05:35 +01:00
Malte LangkabelandGitHub 7602571be8 docs: update list of dependencies in readme to clang 9.0.0 2019-11-30 17:20:28 +01:00
Alexey AndronovandMalte Langkabel 52ae646f26 build: add multiprocessor compilation flag to cmake to speedup builds (#793) 2019-11-28 20:47:07 +01:00
Malte LangkabelandGitHub 9274758d5d build: update to SourcetrailPythonIndexer v1_db25_p1 (#813)
This allows to use "unsafe" Python environment if this environment has explicitly been specified by the user (issues #697, #747).
2019-11-28 20:15:26 +01:00
Alexey AndronovandEberhard Gräther 75e6edaf44 res: move clang-format file to project top-level folder (#815)
So IDE's can automatically detect it
2019-11-28 16:11:34 +01:00
Michael VetterandEberhard Gräther 6041f997a9 build: Link to LIB_GUI_PROJECT (#797)
This is needed to build successfully on openSUSE.

Regards https://github.com/CoatiSoftware/Sourcetrail/issues/758
2019-11-28 10:33:44 +01:00
Robert PollakandMalte Langkabel 4d13131321 docs: correct the required Boost version in the Readme (#807)
See commit cca66470 in pull request #775.
2019-11-27 18:43:21 +01:00
Michael VetterandEberhard Gräther 1162a52c1d build: Install SourcetrailPythonIndexer only if Python language package is enabled (#800)
Regards https://github.com/CoatiSoftware/Sourcetrail/issues/758
2019-11-26 17:03:32 +01:00
Malte LangkabelandGitHub 0070431265 update to clang 9 (#799) 2019-11-26 16:21:37 +01:00
Malte LangkabelandGitHub 5bbbb73362 build: enable Python language support in appveyor builds (#798) 2019-11-26 14:11:01 +01:00
Malte LangkabelandGitHub 2d9ad2b746 docs: fix wiki link in readme 2019-11-26 08:33:34 +01:00
Alexey AndronovandEberhard Gräther 1d7f466e4f src: Fix crash on exit when deleting components (#789)
* build: add missing includes in header files

* logic: delete components in reverse to creation order
2019-11-25 20:13:29 +01:00
Malte LangkabelandGitHub 7bee830c6f docs: add wiki link to readme file 2019-11-25 19:12:16 +01:00
Eberhard GrätherandMalte Langkabel cca66470be build: Downgraded Boost to 1.67 (#775) 2019-11-25 17:47:33 +01:00
mlangkabel a177c6daf5 docs: add Sourcetrail user documentation to repository 2019-11-23 13:54:34 +01:00
Malte LangkabelandGitHub 77d798d6f3 docs: add Appveyor CI badge to readme 2019-11-23 10:09:11 +01:00
Song LiandEberhard Gräther afc9e8212c build: Fix a possible cmake error on macOS (#782) 2019-11-22 08:19:09 +01:00
Malte LangkabelandGitHub d8b19b70fb docs: mention "good first issue" label in readme 2019-11-20 23:28:36 +01:00
ale rimoldiandEberhard Gräther 08058158d0 ui: Corrected cmake export compile command hint (#776)
Modern CMakes seem to need need -DCMAKE_EXPORT_COMPILE_COMMANDS=ON instead of -DCMAKE_EXPORT_COMPILE_COMMANDS=1
2019-11-20 17:03:47 +01:00
Eberhard GrätherandGitHub db28aa80d1 docs: Updated Slack link 2019-11-20 13:34:28 +01:00
Malte LangkabelandGitHub 7f241e8bdb Add Appveyor based CI (#773)
The CI will build the entire project on Windows (currently without language support) and run all applicable tests.
2019-11-20 12:20:21 +01:00
Eberhard Graether ff598e3866 ui: Fixed code view cleared in single file mode on ui refresh (#772) 2019-11-20 11:16:32 +01:00
Eberhard Graether a1fccbf6eb logic: Fixed update check url going to wrong subdomain 2019-11-20 11:15:10 +01:00
Iru Cai (vimacs)andEberhard Gräther b0d4db6d61 build: Add a default version if not in git (#765)
This fixes building with the tarball source.
2019-11-20 10:28:25 +01:00
Michael VetterandEberhard Gräther 1e870e9a25 src: getNodeStyle() always return a value (#767)
Regards #758
2019-11-19 17:52:29 +01:00
Michael VetterandEberhard Gräther 63007170df src: getRefreshInfo() always return a value (#768)
Regards #758
2019-11-19 17:48:49 +01:00
Steve AshmanandEberhard Gräther 538d76d858 docs: Fix typo in README.md (#766) 2019-11-19 17:07:01 +01:00
mlangkabel 7b14bfaf70 build: update deploy script for windows
* added option to disable 32 or 64 bit build
* re-added option to enable code signing on demand
2019-11-19 16:55:25 +01:00
mlangkabel 7a4b2347fb build: fix build errors on windows
* fix compiler issue where string was returned instead of wstring
* fix boost caching in CMakeList: for CMake 3.12.2 the "set" command requires a docstring if the CACHE flag is set
2019-11-19 16:52:05 +01:00
Benjamin TandEberhard Gräther 216ec83f84 build: Fix lib order (#755) 2019-11-19 16:25:11 +01:00
Michael VetterandEberhard Gräther 44a8104890 src: Always return a value from non void function getSearchTypeName() (#761)
getSearchTypeName() needs to always return std:wstring.

We cover all cases because our switch contains all current possibilities
for Search_Type.

But the compiler will still warn/error on this, depending on system
configuration.

Regards https://github.com/CoatiSoftware/Sourcetrail/issues/758
2019-11-19 15:38:56 +01:00
Michael VetterandEberhard Gräther 7edafe91f2 src: Always return a value from non void function elide() (#760)
elide() needs to always return std:string.

We cover all cases because our switch contains all current possibilities
for ElideMode.

But the compiler will still warn/error on this, depending on system
configuration.

I would like to add a `return "";` or `return str;` or add a `default:`
case to the switch to silence this compiler complaint.

Regards https://github.com/CoatiSoftware/Sourcetrail/issues/758
2019-11-19 15:08:29 +01:00
Michael VetterandEberhard Gräther c0a0e4335a build: Make Boost_USE_STATIC_LIBS a cache variable (#759)
Like this we can overwrite it's value from the commandline via
`-DBoost_USE_STATIC_LIBS=OFF`.

Linux distributions will prefer this.

Regards https://github.com/CoatiSoftware/Sourcetrail/issues/758
2019-11-19 14:56:52 +01:00
Eberhard GrätherandGitHub ce1d5c579d res: Create Funding.yml 2019-11-18 17:36:17 +01:00
mlangkabel 21f2625d9e data: added clang format rules 2019-11-18 17:12:39 +01:00
mlangkabel 078feca004 src: applied clang-format 2019-11-18 17:07:20 +01:00
mlangkabel 52058d9947 data: updated Readme 2019-11-18 16:47:31 +01:00
Eberhard Graether 2e2390d00e res: Changelog for release 2019.4 2019-11-18 15:06:20 +01:00
Eberhard Graether c808fa8732 ui: Show Sourcetrail license on top in licenses window
* updated versions and license files of some 3rd party libraries
2019-11-18 10:41:08 +01:00
mlangkabel fdbb79b677 src: fixed build issues 2019-11-18 10:06:44 +01:00
Eberhard Graether 9ab724ae47 src: Removed backwards compatibility to Coati (.coatiproject, .coatidb) 2019-11-17 16:22:35 +01:00
Eberhard Graether b5e0387f1e ui: Added GitHub and Patreon buttons to start window 2019-11-17 16:14:24 +01:00
Eberhard Graether 9b86f0e824 build: Revised macOS bundle generation script and info (issue #730) 2019-11-17 15:49:19 +01:00
mlangkabel 6641c17b93 data: added GNU General Public License 2019-11-17 15:34:39 +01:00
mlangkabel 1c300e0240 build: removed usage of environment variables from CMakeLists 2019-11-17 15:32:21 +01:00
Eberhard Graether 6c5ac66a59 build: fixed missing semicolons in Linux build 2019-11-17 12:16:21 +01:00
mlangkabel 61b97e4931 test: removed indexer coverage regression tests for Cxx
Currently the output of these tests depends on the c++ standard library that is installed on the executing machine. So for some machines these tests would pass while they fail on other machines.
2019-11-16 17:21:17 +01:00
mlangkabel cc17dbe2ea ui: Remove EULA from GUI and Windows installer 2019-11-16 14:57:31 +01:00
Eberhard Graether bb40bcfe45 build: Only add language package specific source and header files to build when enabled
* removed preprocessor guards in language specific files to avoid "file has no symbols" warning
* separated files into multiple lists in lib and lib_gui CMakeLists.txt for each language package
2019-11-14 12:44:59 +01:00
Eberhard Graether 634e09ddfc build: Fixes minor cmake issues and status bar default color 2019-11-14 12:41:42 +01:00
mlangkabel 0e4a620768 script: updated windows deploy script
* add missing copy command for dll to cmake
* fix deploy script
* remove code signing from deploy script
2019-11-13 19:33:40 +01:00
mlangkabel c38117ab8b build: allow to disable language support in cmake
* in addition: add unloadable sourcegroup to visualize, load and save information when loading a project that contains source groups that are not supported by the build
2019-11-13 17:26:06 +01:00
mlangkabel 4cf852770e src: minior code cleanup 2019-11-11 14:32:10 +01:00
mlangkabel ceb30020b5 src: removed sonargraph based project setup methods 2019-11-09 17:56:51 +01:00
mlangkabel 7257de9f11 src: fixed msvc compiler errors 2019-11-09 12:52:31 +01:00
Eberhard Graether d2a1ac464d src: Use gnu C and C++ standards as default for C and C++ SourceGroupSettings on Linux platform (issue #748) 2019-11-08 17:04:02 +01:00
Eberhard Graether 9281c237a7 ui: Refactored code component to handle all state changes in controller 2019-11-08 16:20:43 +01:00
mlangkabel 9d556599ab logic: shallow python indexing (issue #725) 2019-11-06 19:50:47 +01:00
mlangkabel 73f3be72e1 data: removed unused edge and node types 2019-11-05 23:28:27 +01:00
Eberhard Graether dca9e2627c build: Fixed Linux build 2019-11-05 23:20:17 +01:00
Eberhard Graether c34b17418d build: revised build scripts 2019-11-05 17:00:39 +01:00
mlangkabel 8264b8cae3 build: skip downloading python indexer if correct version is already installed 2019-11-05 11:28:50 +01:00
mlangkabel 38581f9571 build: move build related tasks for Windows from setup script to CMake 2019-11-04 17:46:59 +01:00
mlangkabel d177a7d733 build: removed CxxTest from docker files 2019-11-04 11:55:49 +01:00
mlangkabel 49050e1089 src: replaced unit test framework CxxTest with Catch2 2019-10-29 19:54:16 +01:00
Eberhard Graether 48c4bddc1b src: Fixed macOS build 2019-10-29 14:42:27 +01:00
mlangkabel ed1d4b7d33 src: split indexing dialog to multiple classes 2019-10-22 17:38:38 +02:00
Eberhard Graether c5d94fbd08 ui: Fixed nested layout broken after relayout for maximum access node width 2019-10-21 17:04:23 +02:00
Eberhard Graether 0d8e992bdf src: Removed everything license key related
* removed license check
* removed license from ApplicationSettings
* removed LicenseGenerator
* removed license tests
* removed lib_license
* removed dependency on Botan
* removed license generation in all scripts
2019-10-18 13:05:30 +02:00
mlangkabelandEberhard Graether 2cfce03f6e logic: improved performance of python post processing (by around factor 2) 2019-10-18 13:05:30 +02:00
mlangkabelandEberhard Graether 7f861964ea logic: improved performance of clearing data from re-indexed files to be instant 2019-10-18 13:05:30 +02:00
mlangkabelandEberhard Graether 122b384d60 logic: fix FilePath::makeCanonical for case when working directory is symlink on Windows (issue #733)
This was broken because on first iteration loop the path passed to is_symlink was not a real path, thus boost uses the working dir instead.
2019-10-18 13:05:30 +02:00
mlangkabelandEberhard Graether eb142cfb4e ui: update list indexed headers when editing the compilation database text box (issue #724) 2019-10-18 13:05:29 +02:00
mlangkabelandEberhard Graether f7262c805f logic: skip pre-indexing steps of disabled source groups (issue #737) 2019-10-18 13:05:29 +02:00
mlangkabelandEberhard Graether f572e5ee05 logic: fixed refreshing to clear files of disabled source groups 2019-10-18 13:05:29 +02:00
Eberhard Graether 827b8431ca build: Fixed include issue on clang 2019-10-18 13:05:29 +02:00
mlangkabelandEberhard Graether 712d80cc8a test: clean up cxx indexer tests 2019-10-18 13:05:29 +02:00
mlangkabelandEberhard Graether 580ed9f3d6 logic: merge nodes for all possible expansions of a template parameter pack 2019-10-18 13:05:29 +02:00
mlangkabelandEberhard Graether e81315c131 logic: record inheritance edges for implicit template specializations 2019-10-18 13:05:29 +02:00
mlangkabelandEberhard Graether cd731a3798 logic: skip traversing unspecialized template method of implicit template class specialization 2019-10-18 13:05:29 +02:00
mlangkabelandEberhard Graether ee7dcc2d83 data: replace template member specialization edge by template specialization edge 2019-10-18 13:05:29 +02:00
mlangkabelandEberhard Graether 42cb917490 data: remove NodeType::NODE_TEMPLATE_PARAMETER 2019-10-18 13:05:29 +02:00
mlangkabelandEberhard Graether b72d3531c0 test: fixed some TODOs in CxxParserTestSuite 2019-10-18 13:05:28 +02:00
mlangkabelandEberhard Graether 1bb16deb3b logic: fixed bug where explicit template specialization records edge pointing to self 2019-10-18 13:05:28 +02:00
mlangkabelandEberhard Graether 7a5d1f7d2b logic: record location of substituted template parameter as usage of concrete type
e.g. "return T();" in template function implicitly specialized with T=int records a usage of "int" at the location of "T()".
2019-10-18 13:05:28 +02:00
mlangkabelandEberhard Graether 04bda70b3c logic: template fixes
* omit recording usage of template argument for global scope
* use name of templated decl if specialization has dependend argument types
2019-10-18 13:05:28 +02:00
mlangkabelandEberhard Graether 5a18d0973e logic: fixed respecting the provided order of template arguments of partial template specialization 2019-10-18 13:05:28 +02:00
mlangkabelandEberhard Graether 0498d68f5b logic: skip recording qualifier of template parameter decl name (e.g."A<typename T>::T" -> "T") 2019-10-18 13:05:28 +02:00
mlangkabelandEberhard Graether 517dde06e4 logic: yield name of templated base for dependent template specialization 2019-10-18 13:05:28 +02:00
mlangkabelandEberhard Graether ce22e5917a logic: record template argument that is a dependent template type as local symbol 2019-10-18 13:05:28 +02:00
mlangkabelandEberhard Graether fc0e652ae0 data: Remove Template Argument reference kind and edge 2019-10-18 13:05:28 +02:00
mlangkabelandEberhard Graether 583046c291 data: reduce template related data types
* record template parameter as local symbol
* record template default args as type usage
2019-10-18 13:05:27 +02:00
mlangkabelandEberhard Graether e621a835fd logic: use caching to speed up preparing gradle and maven projects for indexing 2019-10-18 13:05:27 +02:00
mlangkabelandEberhard Graether b631f3ddf7 data: fixed styles missing in portable windows packages 2019-10-18 13:05:27 +02:00
mlangkabelandEberhard Graether e5ff90084e src: fixed msvc compiler issues for variadic SourceGroupSettings templates 2019-10-18 13:05:27 +02:00
Eberhard Graether 74a61e0402 src: Refactored MessageActivationBase handling into single ActivationListener
* structured message type directory
2019-10-18 13:05:27 +02:00
Eberhard Graether bd09cc4feb src: Refactored SourceGroupSettings into components as bases architecture 2019-10-18 13:05:27 +02:00
mlangkabelandEberhard Graether 941e5dbcaa logic: fixed errors sometimes not clickable 2019-10-18 13:05:27 +02:00
mlangkabelandEberhard Graether 6b692ff0e9 ui: add menu entry to close the current project (issue #722) 2019-10-18 13:05:27 +02:00
mlangkabelandEberhard Graether dc24bae943 ui: allow to cancel if cdb project setup specifies unused pch file 2019-10-18 13:05:27 +02:00
mlangkabelandEberhard Graether a856788e75 test: fixed wording in test checklist 2019-10-18 13:05:27 +02:00
Eberhard Graether 7f53c3d4b2 res: Changelog for 2019.3 2019-10-18 13:05:27 +02:00
mlangkabelandEberhard Graether 0587d54172 logic: removed "JVM Maximum Memory" setting from preferences 2019-10-18 13:05:27 +02:00
mlangkabelandEberhard Graether 942eb219eb build: sign windows builds and installer when deploying (issue #704) 2019-10-18 12:59:02 +02:00
mlangkabel ef68893957 data: update Sourcetrail to use python indexer to v1.db24.p2 2019-08-26 18:38:24 +02:00
Eberhard Graether 51ebee7cfd ui: Display message box when From -> To Custom Trail doesn't yield a path 2019-08-26 17:19:08 +02:00
mlangkabel f75593392b logic: fixes for handling pch flags for cdb source groups
* use flags of first source file that specifies an "-include-pch" flag for generating the .pch file
* allow to save project settings without specifying input header file if cdb contains -include-pch args
2019-08-26 16:40:26 +02:00
Eberhard Graether 733ef0ea04 logic: Fixed issues when indexing via CLI (issue #718)
* show proper error message in console when project configuration has issues
* quit when project configuration is wrong
* show indexing progress as self-updating percentage
2019-08-26 16:34:54 +02:00
Eberhard Graether 5a97c88a69 ui: show '.' as directory in file title if file is within project root 2019-08-26 12:53:26 +02:00
Eberhard Graether 70969b1bc3 data: Fixed clang::fileEntry traversal in CxxAstVisitor caused crashes with PCH files on macOS 2019-08-20 16:55:20 +02:00
mlangkabel e89dc0ab0a logic: only use precompiled headers for compilation database commands that specify the "-include-pch" flag (issue #719) 2019-08-13 17:31:33 +02:00
Eberhard Graether 084bc3dc43 logic: Save maven effective-pom output to file instead of using console output to avoid issues with color codes (issue #705) 2019-08-13 17:22:09 +02:00
mlangkabel 809f201583 data: update version of fallback Application Settings 2019-08-12 10:23:00 +02:00
Eberhard Graether b50ab76af5 utility: Fixed process execution aborted due to messing ! 2019-08-06 19:53:12 +02:00
mlangkabel 8a43a95b5c data: update Sourcetrail to use python indexer to v1.db24.p1 2019-08-06 18:34:51 +02:00
mlangkabel 1c7bc2fc90 logic: fix qprocess stuck if finished or errored too quickly 2019-08-06 17:27:41 +02:00
Eberhard Graether bda7375e63 ui: Fixed code file title buttons might shrink to zero content when elided 2019-08-06 13:40:46 +02:00
mlangkabel cce41dd964 ui: fixed bezier edge to remove highlight when not hovered anymore 2019-08-06 13:34:46 +02:00
mlangkabel 3e9df0b074 ui: fix z-index of custom trail dialog and row height of "show directory path" option in preferences 2019-08-06 13:04:54 +02:00
mlangkabel 21f25a0b00 data: make Qt Windows Vista style available for windows 10 2019-08-06 10:55:50 +02:00
Eberhard Graether 6a3561cb87 ui: Change mouse cursor to pointer on graph and code view contents (issue #715) 2019-08-05 22:40:21 +02:00
mlangkabel cc289e8b1e ui: hide jvm maximum memory setting on windows 10 (issue #694)
setting this value to anything other than -1 will cause Sourcetrail to get stuck when initializing the JVM
2019-08-05 18:17:07 +02:00
Eberhard Graether 5f91f48844 logic: Show overview instead of empty error screen after all indexing errors were fixed 2019-08-05 14:33:14 +02:00
Eberhard Graether 2f21848de8 logic: Index multiple indexer commands for one source file in CDB source group (issue #717) 2019-08-05 11:35:09 +02:00
Eberhard Graether b35d4657d5 data: Record errors in precompiled header generation
* also records include dependencies within precompiled header file
2019-07-31 23:28:22 +02:00
Eberhard Graether 4b58bb679c data: Fixed files within precompiled header have no syntax highlighting
- removed working_copy from project setup tests
2019-07-31 21:37:53 +02:00
Eberhard Graether c6adbab340 logic: Added PCH support to CDB source groups (issue #311)
* added PCH Flags list and checkbox to reuse compiler flags and cdb flags to source group setup
* added UI tests for C++ and CDB source groups
2019-07-31 00:41:08 +02:00
mlangkabel b8d0f88336 logic: fixed source location recording for symbols defined inside PCH files 2019-07-30 14:33:07 +02:00
Eberhard Graether 68c9782e33 ui: Added custom trail dialog (issue #249)
* open custom trail dialg via button in top of trail controls
* search from symbol to symbol or all referenced/referencing of symbol
* define search depth with slider
* define horizontal/vertical layout
* define node and edge types
* renamed depth graph to trail in graph ui
* added custom trail UI tests

fortune cookie message = A happy surprise is waiting for you.
2019-07-29 11:25:34 +02:00
Eberhard Graether 6a2c59f3e5 logic: Fixed removing duplicate compiler header and show paths in dialog (issue #710) 2019-07-28 21:03:45 +02:00
Eberhard Graether 6b54d5f07b java: Run maven effective-pom in batch mode to avoid console colors in xml output (issue #705) 2019-07-28 14:02:26 +02:00
Eberhard Graether cd144a979f ui: Added option to show file directory in code view title (issue #556)
* relative to project file if shorter
* checkbox in preferences
* not enabled by default
2019-07-22 14:25:46 +02:00
mlangkabel 293ddffb46 logic: skip everything except call operator when traversing lambda decl 2019-07-22 14:00:33 +02:00
mlangkabel af3e7861b6 src: fixed windows compile errors 2019-07-22 13:54:49 +02:00
Eberhard Graether 8e3ca182b9 src: refactored lib/utility
* removed unused utilityMath
* removed some unused functions from utility
* moved time related utility functions to TimeStamp
* moved path objects from utility to app/paths
* moved objects in lib to lib/app
* removed duplicate confirm methods in DialogView
* moved utilityFile to utility/file
* removed uint typedef and replaced with size_t everywhere
* removed boost header in utilityUuid
2019-07-17 15:10:05 +02:00
Eberhard Graether 70febae55b src: Moved path prefilling to ApplicationSettingsPrefiller
* added subdirectory for all source group settings related files
2019-07-16 14:29:34 +02:00
Eberhard Graether 086c19f25e ui: Don't apply stylesheet to search view every time autocompletions are set 2019-07-09 16:07:13 +02:00
Eberhard Graether 1e8791da35 src: Fixed clang error 2019-07-09 15:11:43 +02:00
mlangkabel bb78c04b34 logic: Implemented usage of PCH for indexing EmptyCxx Source Groups
* further change: initialize all llvm targets before indexing
* further change: remove configurable dependencies directory from gradle and maven sourcegroups
2019-07-02 15:52:17 +02:00
Eberhard Graether 3aebe91e36 ui: Refactored View initialization
* moved initView() implementation where used into constructor
* specify methods as override instead of virtual where applicable
* use default destructors where applicable
2019-07-02 15:04:09 +02:00
Eberhard Graether 5cc39824e0 ui: usability fixes
* reduced mouse drag sensibility when clicking on graph nodes
* also edit search element when cursor in front and pressing DELETE
* scroll to up to minimized snippet after minimizing when scrolled down far
2019-06-28 12:43:31 +02:00
Eberhard Graether 841a87469b src: refactored UI elements and graphics file structure
* split QtIconButton into multiple files
* moved graph elements from view to graphics
* structured elements into sub directories
2019-05-29 18:31:11 +02:00
Eberhard Graether 1cc61a93a2 src: refactored project wizard file structure
* renamed wizzard to wizard
* split QtProjectWizardContentPath into multiple files
* split QtProjectWizardContentPaths into multiple files
* restructured subdirectories
2019-05-29 16:26:49 +02:00
Eberhard Graether 529b534939 res: Changelog for 2019.2.39 2019-05-29 03:34:33 +02:00
2376 changed files with 74776 additions and 456939 deletions
+78
View File
@@ -0,0 +1,78 @@
Language: Cpp
AccessModifierOffset: -4
AlignAfterOpenBracket: AlwaysBreak
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignConsecutiveMacros: false
AlignEscapedNewlines: Right
AlignOperands: false
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: false
BinPackParameters: false
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Allman
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: BeforeComma
BreakInheritanceList: BeforeComma
BreakStringLiterals: true
ColumnLimit: 100
CompactNamespaces: true
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
FixNamespaceComments: true
IncludeBlocks: Preserve
IndentCaseLabels: false
IndentPPDirectives: AfterHash
IndentWidth: 4
IndentWrappedFunctionNames: true
KeepEmptyLinesAtTheStartOfBlocks: false
MaxEmptyLinesToKeep: 2
NamespaceIndentation: None
PenaltyBreakAssignment: 50
PenaltyBreakBeforeFirstCallParameter: 0
PenaltyBreakComment: 100
PenaltyBreakFirstLessLess: 200
PenaltyBreakString: 100
PenaltyBreakTemplateDeclaration: 0
PenaltyExcessCharacter: 10
PenaltyReturnTypeOnItsOwnLine: 1000
PointerAlignment: Left
ReflowComments: true
SortIncludes: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: true
SpaceBeforeCtorInitializerColon: false
SpaceBeforeInheritanceColon: false
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: false
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 4
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInContainerLiterals: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: c++17
TabWidth: 4
UseTab: Always
+12
View File
@@ -0,0 +1,12 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: sourcetrail
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
+6 -2
View File
@@ -1,4 +1,5 @@
/build/
build-*
/distr/
/deps/
@@ -14,6 +15,8 @@
/bin/test/data/TestSettings.xml
/bin/test/data/CommandlineTestSuite/settings.xml
/bin/test/data/ConfigManagerTestSuite/temp.xml
/bin/test/data/UtilityMavenTestSuite/effective-pom.xml
/bin/test/data/SourceGroupTestSuite/java_maven/input/sourcetrail_dependencies
/java_indexer/target/
@@ -39,7 +42,6 @@
/ide_plugins/vs/vs2015/SourcetrailPlugin/TestResults
*.coatidb
*.srctrldb
*.srctrlbm
*.suo
@@ -55,7 +57,8 @@
.ycm_extra_conf.py
.ycm_extra_conf.pyc
sourcetrail.srctrlprj
Sourcetrail.srctrlprj
Sourcetrail_dev.srctrlprj
Makefile
CMakeLists.txt.user*
@@ -65,5 +68,6 @@ CMakeLists.txt.user*
/deployment/windows/wixSetup/build
/deployment/windows/wixSetup/CustomActions/UninstallRemoveLogFolder/bin
/deployment/windows/wixSetup/CustomActions/UninstallRemoveLogFolder/obj
/deployment/windows/wixSetup/CustomActions/.vs
/deployment/windows/wixSetup/Setup/build/Setup/Release
/deployment/windows/wixSetup/Setup/build/Setup/x64
-127
View File
@@ -1,127 +0,0 @@
variables:
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
IMAGE_64: coatisoftware/centos6_64_qt_llvm:qt5101-llvm800
IMAGE_32: coatisoftware/centos6_32_qt_llvm:qt5101-llvm800
## Templates ##
.build_template: &build_def
stage: build
before_script:
# CCache Config/jobs
- mkdir -p ccache
- export CCACHE_BASEDIR=${PWD}
- export CCACHE_DIR=${PWD}/ccache
script:
- ./script/buildonly.sh all
- ./script/buildonly.sh package
# - ./script/build.sh release test
artifacts:
name: "$CI_JOB_NAME"
paths:
- Sourcetrail*.tar.gz
expire_in: 3 days
.deploy_template: &deploy_def
image: alpine
stage: deploy
before_script:
- apk add --no-cache lftp git
script:
- VERS=$(git describe --long | sed 's/-/./' | sed 's/-.*//')
- TARGET_DIR=releases-$CI_ENVIRONMENT_NAME/$TYPE/$VERS
- echo $TARGET_DIR/$CI_ENVIRONMENT_NAME/$TYPE/
- lftp -u $FTP_USER,$FTP_PW -p $FTP_PORT $FTP_ADDR -e "mkdir $TARGET_DIR; mput -O $TARGET_DIR Sourcetrail*; bye"
only:
- master
- tags
- /^release.*$/
## Build Stage ##
build:Linux64:
image: $IMAGE_64
when: manual
cache:
key: cache_linux_64
paths:
- ccache/
- java_indexer/.m2/repository
<<: *build_def
build:Linux32:
image: $IMAGE_32
when: manual
cache:
key: cache_linux_32
paths:
- ccache/
- java_indexer/.m2/repository
<<: *build_def
LicenseGenerator:
image: $IMAGE_64
stage: build
when: manual
script:
- ./script/setup.sh
- ./script/buildonly.sh release keygen
- mv build/Release/license_generator/Sourcetrail_license_generator .
artifacts:
name: "$CI_JOB_NAME"
paths:
- Sourcetrail_license_generator
expire_in: 3 days
## Deploy ##
deploy:Linux_staging_beta:
when: manual
environment:
name: staging
variables:
TYPE: beta
<<: *deploy_def
deploy:Linux_staging_full:
when: manual
environment:
name: staging
variables:
TYPE: full
<<: *deploy_def
deploy:Linux_production_beta:
when: manual
environment:
name: production
variables:
TYPE: beta
<<: *deploy_def
deploy:Linux_production_full:
when: manual
environment:
name: production
variables:
TYPE: full
<<: *deploy_def
deploy:Linux_tag_staging:
environment:
name: staging
variables:
TYPE: beta
<<: *deploy_def
only:
- tags
## could be interesting for daily/weekly/monthly builds
# https://docs.gitlab.com/ce/user/project/pipelines/schedules.html
#
#job:on-schedule:
#only:
# - schedules
#
+18
View File
@@ -0,0 +1,18 @@
language: bash
os:
- linux
- windows
services: docker
install:
- echo "$TRAVIS_OS_NAME"
- if [ "$TRAVIS_OS_NAME" = "windows" ]; then docker build -t coatisoftware/local deployment/dockerfiles/windows/travis_ci; fi
script:
- COMMIT_HASH=$(git rev-parse HEAD)
- if [ "$TRAVIS_OS_NAME" = "windows" ]; then docker run --name builder coatisoftware/local ${COMMIT_HASH}; fi
+10
View File
@@ -0,0 +1,10 @@
Authors
=======
Andreas Stallinger
Eberhard Gräther (@egraether) <egraether@coati.io>
Malte Langkabel (@mlangkabel) <mlangkabel@coati.io>
Manuel Dobusch
Viktoria Pfausler
Note: (@user) means a github user name.
+278 -208
View File
@@ -1,11 +1,90 @@
### Changelog
#### 2019.4.102
released 2019-12-20
* C/C++: Update selectable C and C++ language standards and cross-compilation flags ([#835](https://github.com/CoatiSoftware/Sourcetrail/issues/835))
* Java: Allow to specify custom Maven settings.xml file in project settings ([#794](https://github.com/CoatiSoftware/Sourcetrail/issues/794))
* Python: Accept python.exe located in the root directory of the environment ([#771](https://github.com/CoatiSoftware/Sourcetrail/issues/771))
* Java: Extend language support to Java 12 ([#752](https://github.com/CoatiSoftware/Sourcetrail/issues/752))
* Graph: Show active symbol definition in code when clicking on active node ([#836](https://github.com/CoatiSoftware/Sourcetrail/issues/836))
* C++: Fix recording template parameter as local symbol instead of qualifier ([#824](https://github.com/CoatiSoftware/Sourcetrail/issues/826))
* Python: Always perform deep index as default and added '--shallow' command line option ([#823](https://github.com/CoatiSoftware/Sourcetrail/issues/823))
* Code: Drag and drop selected source code from code view into other applications ([#707](https://github.com/CoatiSoftware/Sourcetrail/issues/707))
* Python: Allow using "unsafe" Python environment if explicitly specified by user ([#697](https://github.com/CoatiSoftware/Sourcetrail/issues/697), [#747](https://github.com/CoatiSoftware/Sourcetrail/issues/747))
* C/C++: Updated to LLVM/Clang 9.0.0 ([#799](https://github.com/CoatiSoftware/Sourcetrail/issues/799))
* Fix crash on application exit ([#789](https://github.com/CoatiSoftware/Sourcetrail/issues/789))
* Code: Fixed view cleared in single file mode when ui refresh is triggered ([#772](https://github.com/CoatiSoftware/Sourcetrail/issues/772))
#### 2019.4.61
released 2019-11-18
* Added GitHub and Patreon buttons to start window
* Added GNU General Public License
* Removed End User License Agreement and accept dialog from UI and Windows installer
* Removed Sonargraph based project setup
* Code: Add all source locations indexed for a file when displaying errors
* C/C++: Use gnu C and C++ standards as default in source groups on Linux platforms
* Python: add fast 'shallow indexing' mode (issue [#725](https://github.com/CoatiSoftware/Sourcetrail/issues/725))
* Fixed nested layout broken after relayout for maximum access node width
* Removed license key check
* Python: Improved performance of python post processing (by about factor 2)
* Improved performance of clearing data from re-indexed files to be instant
* Fixed making canonical filepaths when working directory contains symlink on Windows (issue [#733](https://github.com/CoatiSoftware/Sourcetrail/issues/733))
* C/C++: Update indexed headers list when editing the compilation database text box (issue [#724](https://github.com/CoatiSoftware/Sourcetrail/issues/724))
* Skip pre-indexing steps of disabled source groups (issue [#737](https://github.com/CoatiSoftware/Sourcetrail/issues/737))
* Fixed refresh cleared files of disabled source groups
* C++: Merged nodes for all possible expansions of a template parameter pack
* C++: Replaced template member specialization edge by template specialization edge
* C++: Record template default args as type usage
* C++: Record template parameter as local symbol
* Java: Use caching to speed up gradle and maven based projects
* Windows: Fixed styles missing in portable packages
* Add menu entry to close the current project (issue [#722](https://github.com/CoatiSoftware/Sourcetrail/issues/722))
#### 2019.3.46
released 2019-08-27
* Fixed errors were sometimes not clickable
* Windows: sign installer and executables with Authenticode certificate (issue [#704](https://github.com/CoatiSoftware/Sourcetrail/issues/704))
* Show proper error messages and progress when indexing with CLI (issue [#718](https://github.com/CoatiSoftware/Sourcetrail/issues/718))
* C/C++: only use precompiled headers for compilation database commands that specify the "-include-pch" flag (issue [#719](https://github.com/CoatiSoftware/Sourcetrail/issues/719))
* Python: Updated to SourcetrailPythonIndexer v1.db24.p2
* Graph: Fixed bezier edges stayed highlighted after getting unhovered
* Windows: Use modern Windows style for default ui elements on Windows 10
* Change mouse cursor to pointer on graph and code view contents (issue [#715](https://github.com/CoatiSoftware/Sourcetrail/issues/311))
* Java: Remove JVM maximum memory setting because it causes issues (issue [#694](https://github.com/CoatiSoftware/Sourcetrail/issues/311))
* Show overview instead of empty error screen after all indexing errors are gone
* C/C++: Allow indexing multiple indexer commands with different options for one source file in Compilation Database source group (issue [#717](https://github.com/CoatiSoftware/Sourcetrail/issues/311))
* Graph: Added custom trail dialog to show trail graph with specific origin and/or target, using node/edge filters (issue [#249](https://github.com/CoatiSoftware/Sourcetrail/issues/249))
* C/C++: Fixed removing duplicate compiler header directory not working (issue [#710](https://github.com/CoatiSoftware/Sourcetrail/issues/710))
* Java: Fixed maven source groups broken when default console output contains colors (issue [#705](https://github.com/CoatiSoftware/Sourcetrail/issues/705))
* Code: Added option to preferences to show relative file directory in code view title (issue [#556](https://github.com/CoatiSoftware/Sourcetrail/issues/556))
* C++: Fixed lambdas created additional type nodes
* C/C++: Initialize all clang targets to reduce errors for cross-target compilation
* C/C++: Added Precompiled Header Support to Empty and Compilation Database Source Groups (issue [#311](https://github.com/CoatiSoftware/Sourcetrail/issues/311))
* Search: Turn search element editable when pressing DELETE with cursor in front
* Graph: increased the tolerated movement distance during click to still count as click action
#### 2019.2.39
released 2019-05-28
* Python: Added example for Python environment to Source Group help text (issue [#696](https://github.com/CoatiSoftware/Sourcetrail/issues/696))
* Python: Improved post processing speed and show progress dialog
* Python: Added validity check for Python environment when entered in Source Group
* Code: Improved performance of location hovering in snippet mode
* Graph: Fixed undo after single edge activation within aggregation caused missing edges
* Don't set project state outdated if only Source Group name changed (issue [#700](https://github.com/CoatiSoftware/Sourcetrail/issues/700))
* C/C++: Don't store path to compiler headers in preferences, instead always add it before indexing
* Python: write output of indexer processes to log file
* Fixed crashes on application close (issue [#698](https://github.com/CoatiSoftware/Sourcetrail/issues/698))
#### 2019.2.25
released 2019-05-22
* Enable console and file logging by default
* Python: Sort indexer commands by file size
* Linux: Add path to OpenSSL config in Sourcetrail.sh script (issue #659)
* Linux: Add path to OpenSSL config in Sourcetrail.sh script (issue [#659](https://github.com/CoatiSoftware/Sourcetrail/issues/659))
* Search: Refocus already focused search box on 'find symbol' shortcut to select content
* Renamed 'main' function in tutorial to 'start_tour', due to multiple main fix
* Python: Fixed macOS app bundle not using correct Python default environment
@@ -15,26 +94,26 @@ released 2019-05-22
* Python: Added sample project "tictactoe_py"
* Code: Fixed symbol definition shown instead of most recent reference when using back action
* Python: Added post processing to add ambiguous edges for unsolved symbols with matching name
* Fixed old test license format not loaded (issue #691)
* C/C++: Added intermediate fix to handle multiple definitions of main() in C/C++ (issue #233)
* Graph: Added "Show Definition in IDE" action to context menu (issue #687)
* Fixed old test license format not loaded (issue [#691](https://github.com/CoatiSoftware/Sourcetrail/issues/691))
* C/C++: Added intermediate fix to handle multiple definitions of main() in C/C++ (issue [#233](https://github.com/CoatiSoftware/Sourcetrail/issues/233))
* Graph: Added "Show Definition in IDE" action to context menu (issue [#687](https://github.com/CoatiSoftware/Sourcetrail/issues/687))
* Increased contrasts in color scheme 'bright'
* Automatically delete log files older than a month (issue #676)
* Automatically delete log files older than a month (issue [#676](https://github.com/CoatiSoftware/Sourcetrail/issues/676))
* Code: renamed 'relations' to 'references' in overview stats
* Fixed bug that caused the UI to be blocked after aborting indexing on "partial clearing not possible" warning
* Start automatic update checks on second day of use
* Graph: Show multi-level inheritance edge in graph legend (issue #688)
* Graph: Show multi-level inheritance edge in graph legend (issue [#688](https://github.com/CoatiSoftware/Sourcetrail/issues/688))
* C/C++: Updated to LLVM/Clang 8.0.1
* Graph: Use multicolumn layout for nodes with many children if none of the children has edges
* Python: Added Python 2 & 3 support based on SourcetrailPythonIndexer (https://github.com/CoatiSoftware/SourcetrailPythonIndexer) (issue #51)
* Python: Added Python 2 & 3 support based on [SourcetrailPythonIndexer](https://github.com/CoatiSoftware/SourcetrailPythonIndexer) (issue [#51](https://github.com/CoatiSoftware/Sourcetrail/issues/51))
* Python: Added source group type "Empty Python" to project setup
* Search: Edit last search element on backspace instead of deleting (issue #681)
* Search: Edit last search element on backspace instead of deleting (issue [#681](https://github.com/CoatiSoftware/Sourcetrail/issues/681))
* EULA: added support for lifelong licenses
* Improved text search performance (issue #680)
* Improved text search performance (issue [#680](https://github.com/CoatiSoftware/Sourcetrail/issues/680))
* Windows: Fixed bug that caused texts within tooltips sometimes to be cut off
* Fixed crash when closing license window at first start
* Automatically replace invalid characters in project name during project setup with "_" (issue #671)
* Windows: Added syntax highlighting rules to portable package (issue #672)
* Automatically replace invalid characters in project name during project setup with "_" (issue [#671](https://github.com/CoatiSoftware/Sourcetrail/issues/671))
* Windows: Added syntax highlighting rules to portable package (issue [#672](https://github.com/CoatiSoftware/Sourcetrail/issues/672))
#### 2019.1.11
released 2019-02-05
@@ -44,7 +123,7 @@ released 2019-02-05
* Fixed error count in status bar not restored after discarding interrupted index
* Graph: Fixed layout for inheritance chains
* Added syntax highlighting rules for Python
* Rerun cxx global header path detection if skipped due to error in previous release (issue #664)
* Rerun cxx global header path detection if skipped due to error in previous release (issue [#664](https://github.com/CoatiSoftware/Sourcetrail/issues/664))
* Fixed status error may not show up if custom command fails on Windows
* Graph: Fixed right click activates edge on Windows but should not
* C/C++: Always add compiler header path to global include paths and warn user about possible problems
@@ -56,13 +135,13 @@ released 2019-02-05
* Project Setup: Double-click in project setup list boxes adds new line
* Graph: Only bundle as "importing files" when "import" edge is present
* Graph: Prevent flickering of edges when going back after multiple edge activations
* Fixed relative paths not working in Code::Blocks project files (issue #663)
* Graph: Remove virtual nodes in depth-graph edges when moving nodes (issue #639)
* Added exception handling for HTTP request exceptions in update checker (issue #659)
* Clear screen-search matches when the active symbol in the view changes (issue #660)
* Wrap lines in status and error table (issue #658)
* Graph: Elide name of active node if it has more than 100 characters (issue #652)
* Added link to changelog to help menu (issue #653)
* Fixed relative paths not working in Code::Blocks project files (issue [#663](https://github.com/CoatiSoftware/Sourcetrail/issues/663))
* Graph: Remove virtual nodes in depth-graph edges when moving nodes (issue [#639](https://github.com/CoatiSoftware/Sourcetrail/issues/639))
* Added exception handling for HTTP request exceptions in update checker (issue [#659](https://github.com/CoatiSoftware/Sourcetrail/issues/659))
* Clear screen-search matches when the active symbol in the view changes (issue [#660](https://github.com/CoatiSoftware/Sourcetrail/issues/660))
* Wrap lines in status and error table (issue [#658](https://github.com/CoatiSoftware/Sourcetrail/issues/658))
* Graph: Elide name of active node if it has more than 100 characters (issue [#652](https://github.com/CoatiSoftware/Sourcetrail/issues/652))
* Added link to changelog to help menu (issue [#653](https://github.com/CoatiSoftware/Sourcetrail/issues/653))
#### 2018.4.45
released 2018-12-18
@@ -75,28 +154,27 @@ released 2018-12-18
* C/C++: Still log the first 20.000 characters of the Clang invocation if verbose indexer logging is disabled
* Added Source Group Custom Command to use with SourcetrailDB binaries
* Fixed indexed source files not updated when clicking "show files" after other changes in project setup
* Linux: Fixed issue in sourcetrail.sh script (issue #638)
* Inspect errors during indexing (issue #235)
* C/C++: Fixed header path selection in Source Group setup also preselects non exsiting paths (issue #640)
* Linux: Fixed issue in sourcetrail.sh script (issue [#638](https://github.com/CoatiSoftware/Sourcetrail/issues/638))
* Inspect errors during indexing (issue [#235](https://github.com/CoatiSoftware/Sourcetrail/issues/235))
* C/C++: Fixed header path selection in Source Group setup also preselects non exsiting paths (issue [#640](https://github.com/CoatiSoftware/Sourcetrail/issues/640))
* Graph: Fixed graph node centering shows right end when node has greater width than view
* Code: Fixed multiple multiline comments within one line not correctly highlighted
* Code: Changed snippet style, removing per file frame and minimize/snippet buttons
* C/C++: Fixed shrinking shared memory below initial size (issue #636)
* Fixed indexers still waiting until less storages are queued, although indexing was already interrupted (issue #634)
* C/C++: Fixed shrinking shared memory below initial size (issue [#636](https://github.com/CoatiSoftware/Sourcetrail/issues/636))
* Fixed indexers still waiting until less storages are queued, although indexing was already interrupted (issue [#634](https://github.com/CoatiSoftware/Sourcetrail/issues/634))
* Fixed interrupting indexing while dialog hidden
* Graph: Fixed nodes and edges stay highlighted after hovering in code
* C/C++: Reduced shared memory consumption during indexing when indexers are faster than db insertion
#### 2018.4.8
released 2018-11-05
released 2018-11-13
* Fixed search activates wrong symbol if multiple potential matches share the same "long" symbol name
* C++: Fixed infinite iteration when solving parent name of C++ template arguments with multiple parent contexts
* C++: Only log Clang tool invocation info when enabling "verbose indexer logging"
* Running shrink on shared memory that is used to transfer data between processes during indexing from time to time
* Added tabs UI to top of main window (issue #215)
* Linux: Fixed no write permission to ~/.config/sourcetrail after installation (issue #625, #626)
* Added tabs UI to top of main window (issue [#215](https://github.com/CoatiSoftware/Sourcetrail/issues/215))
* Linux: Fixed no write permission to ~/.config/sourcetrail after installation (issue [#625](https://github.com/CoatiSoftware/Sourcetrail/issues/625), [#626](https://github.com/CoatiSoftware/Sourcetrail/issues/626))
* C++: Added type usage edges from parent context for types that occur as template arguments
* C++: Skip recording of implicit local symbols
* Java: Show explicit error message if no Java path provided in preferences
@@ -114,7 +192,7 @@ released 2018-11-05
* Code: Fixed crash on code view scope expansion
* Rewrote indexer data recording API to rely on IDs instead of strings for faster indexer performance
* Removed unnecessary SQLite indexes for smaller database size
* JAVA: display multi-line maven error messages (issue #622)
* JAVA: display multi-line maven error messages (issue [#622](https://github.com/CoatiSoftware/Sourcetrail/issues/622))
* Improved indexer storing performance by splitting insertion into multiples of pre-compiled SQLite batch insert statements
* Reduced copies during indexer data recording
* Improved cache lookups in indexer data recording
@@ -122,27 +200,26 @@ released 2018-11-05
* C/C++: Reduced waiting time when interrupting indexer processes
* C/C++: Improved name handling and caching performance
* Fixed edge cases in determining files to update/clear when re-indexing
* C/C++: record and display indexer configuration issues (issue #618)
* C/C++: record and display indexer configuration issues (issue [#618](https://github.com/CoatiSoftware/Sourcetrail/issues/618))
* Windows: Log success of Visual Studio path detector instead of printing to console
* Generate and pass index file commands to indexers one by one to reduce memory consumption
* C/C++: Query files from compilation database one by one to reduce memory consumption
* Java: changed type_argument edges to originate in the generic type or method
* Optimized storage in-memory caches to reduce memory use during indexing
#### 2018.3.55
released 2018-08-31
* C/C++: Fixed crash on logging Clang invocation info with flags that throw errors (issue #617)
* Plugin: Move window to the front when sending symbol via plugin (issue #605)
* C/C++: Fixed crash on logging Clang invocation info with flags that throw errors (issue [#617](https://github.com/CoatiSoftware/Sourcetrail/issues/617))
* Plugin: Move window to the front when sending symbol via plugin (issue [#605](https://github.com/CoatiSoftware/Sourcetrail/issues/605))
* Java: Fixed crash on Windows if JVM tries to allocate too much memory
* Java: Fixed loading dialogs shown in main window instead of project setup dialog for setup with gradle
* Graph: Display bundle node count as pill instead of circle
* Fixed crash that had a chance to occur when showing source files of cdb/cbp/sonargraph project during setup
* Fixed source extensions not converted to lowercase (issue #614)
* C/C++: fixed line of errors wrong when appearing after #line directives (issue #610)
* Graph: Clear graph contents on overview (issue #609)
* Windows: Fixed policy for finding Windows user data folder (issue #612)
* Fixed source extensions not converted to lowercase (issue [#614](https://github.com/CoatiSoftware/Sourcetrail/issues/614))
* C/C++: fixed line of errors wrong when appearing after #line directives (issue [#610](https://github.com/CoatiSoftware/Sourcetrail/issues/610))
* Graph: Clear graph contents on overview (issue [#609](https://github.com/CoatiSoftware/Sourcetrail/issues/609))
* Windows: Fixed policy for finding Windows user data folder (issue [#612](https://github.com/CoatiSoftware/Sourcetrail/issues/612))
* C/C++: Fixed recording of multiple cxx anonymous namespaces within the same file
* C/C++: Fixed files within indexed directories always refreshed in empty C/C++ source groups
* Code: Don't show list of overriden methods when clicking overriding method
@@ -159,9 +236,8 @@ released 2018-08-31
* Indexer: Don't shuffle file order for indexing
* Indexer: Improved storing performance by optimizing insertion statements and indices
#### 2018.3.13
released 2018-08-07
released 2018-08-06
* Code: Fixed text search locations sometimes disappearing when expanding scope of code snippets
* Graph: Added Expand/Collapse Node actions to graph context menu
@@ -175,35 +251,35 @@ released 2018-08-07
* Prefill system specific paths in application settings only once
* Added check if entered project name is a valid file name
* Windows: Fixed names of available header path detectors
* Graph: Show graph legend via 'legend' command or '?' button in the lower right corner (issue #308, #540)
* Graph: Show graph legend via 'legend' command or '?' button in the lower right corner (issue [#308](https://github.com/CoatiSoftware/Sourcetrail/issues/308), [#540](https://github.com/CoatiSoftware/Sourcetrail/issues/540))
* C/C++: Ship clang compiler headers also for Windows
* Code: Added on-demand local reference navigation to code view navigation bar (issue #453, #538)
* Code: Added on-demand local reference navigation to code view navigation bar (issue [#453](https://github.com/CoatiSoftware/Sourcetrail/issues/453), [#538](https://github.com/CoatiSoftware/Sourcetrail/issues/538))
* Improved button texts for "reindexing required" dialog
* Code: Scroll code horizontally to active source location if out of view
* Graph: Added show definition context menu action/shortcut to show definition of any node in the code (issue #83)
* Graph: Added show definition context menu action/shortcut to show definition of any node in the code (issue [#83](https://github.com/CoatiSoftware/Sourcetrail/issues/83))
* Improved project loading speed
* Create project directory during project setup if not existing
* Tooltip: Show function/method signatures exactly as declared in source file
* Search: Improved autocompletion scoring to process more symbols
* Search: Fixed autocompletions fail with wide characters (issue #598)
* Search: Fixed autocompletions fail with wide characters (issue [#598](https://github.com/CoatiSoftware/Sourcetrail/issues/598))
* Windows: Show error text when opening external .dll fails
* C/C++: Highlight opening and closing braces in code when hovering either one (issue #12)
* C/C++: Highlight opening and closing braces in code when hovering either one (issue [#12](https://github.com/CoatiSoftware/Sourcetrail/issues/12))
* macOS: Fixed start screen not disappearing when launching Sourcetrail by opening a project
* Graph: Fixed restoring of scroll position in graph on undo broken
* Graph: Hide children with type use edges to parent if parent is active
* Bookmark: Fixed bookmark creator dialog header not visible
* Graph: Show parameters for functions/methods with same name (issue #259)
* Graph: exporting graph as .svg (issue #596)
* Graph: Show parameters for functions/methods with same name (issue [#259](https://github.com/CoatiSoftware/Sourcetrail/issues/259))
* Graph: exporting graph as .svg (issue [#596](https://github.com/CoatiSoftware/Sourcetrail/issues/596))
* Show indexing progress bar in status bar
* Keep browsing old project state while indexing (issue #175)
* Keep browsing old project state while indexing (issue [#175](https://github.com/CoatiSoftware/Sourcetrail/issues/175))
* Java: Added support for Java 9 & 10
* Added project setup from Sonargraph project for C, C++ and Java.
* Migrate old ".coatiproject" settings to new ".srctrlprj" extension when loading project
* Allow discarding unfinished index when aborting indexing
* Fixed partly indexed project can't be opened after closing while indexing (issue #594)
* Fixed partly indexed project can't be opened after closing while indexing (issue [#594](https://github.com/CoatiSoftware/Sourcetrail/issues/594))
* C/C++: Show translation unit of indexing errors
* Fixed activating history item from menu showed wrong symbol (issue #572)
* Fixed all errors shown when only showing errors for certain file and changing error filter (issue #577)
* Fixed activating history item from menu showed wrong symbol (issue [#572](https://github.com/CoatiSoftware/Sourcetrail/issues/572))
* Fixed all errors shown when only showing errors for certain file and changing error filter (issue [#577](https://github.com/CoatiSoftware/Sourcetrail/issues/577))
* Added pagination to project setup dialogs
* C/C++: Make complete file incomplete if it has errors in later translation units
@@ -213,7 +289,7 @@ released 2018-06-18
* C/C++: Fixed incomplete header file got changed to complete from correct translation unit, although it had errors
* Fixed show errors button click on incomplete file with no associated errors showed all errors
* C/C++: Ship clang compiler headers within package on macOS and Linux (issue #99)
* C/C++: Ship clang compiler headers within package on macOS and Linux (issue [#99](https://github.com/CoatiSoftware/Sourcetrail/issues/99))
* Graph: Fixed undoing one of multiple edge activations caused multiple recenterings of the graph
* Fixed links not clickable in source group type selection
* Explicitly clear all errors when refreshing incomplete files
@@ -222,13 +298,12 @@ released 2018-06-18
* Code: Fixed snippet minimize click expanded snippet again
* Fixed changing of selected source group not possible if validity check fails.
* C/C++: Added C/C++ project setup from Code::Blocks (.cdb), which is also created for cmake projects in QtCreator
* C/C++: fixed endless loop in include path auto detection (issue #585, #470)
* C/C++: fixed endless loop in include path auto detection (issue [#585](https://github.com/CoatiSoftware/Sourcetrail/issues/585), [#470](https://github.com/CoatiSoftware/Sourcetrail/issues/470))
* C/C++: fixed crash in include validation in source group setup
* Fixed typo in update check (issue #586)
* Fixed typo in update check (issue [#586](https://github.com/CoatiSoftware/Sourcetrail/issues/586))
* C/C++: Added some compiler flags checks
* C/C++: Errors without location are now recorded for current main file
#### 2018.2.36
released 2018-05-04
@@ -236,21 +311,20 @@ released 2018-05-04
* Improved help dialog for compiler flags in project setup
* Fixed handling case insensitive filepath matches when activating a symbol via editor plugin
* Wrote cmake export compile command to description in source group setup
* Fixed macOS gatekeeper refusing to open app bundle (issue #568)
* Fixed macOS gatekeeper refusing to open app bundle (issue [#568](https://github.com/CoatiSoftware/Sourcetrail/issues/568))
* Use custom radio button style on start indexing dialog to fix radio indicator not visible on old Windows systems
* Fixed indexed header paths in compilation database project change the processing order of includes (issue #571)
* Allow tooltips to be as wide as the window (issue #570)
* Fixed indexed header paths in compilation database project change the processing order of includes (issue [#571](https://github.com/CoatiSoftware/Sourcetrail/issues/571))
* Allow tooltips to be as wide as the window (issue [#570](https://github.com/CoatiSoftware/Sourcetrail/issues/570))
* Graph: Improved edge routing in graph layout
* Graph: Only use base/derived bundles for inheritance
#### 2018.2.23
released 2018-04-24
* C/C++: removed check if header was already indexed to fix missing data due to different preprocessor conditions.
* Fixed fulltext search missing results for queries with many matches in the same file.
* Fixed crash on converting relative paths to canonical paths in project setup
* Also clear errors in non-indexed files when refreshing "updated and incomplete files" (issue #564)
* Also clear errors in non-indexed files when refreshing "updated and incomplete files" (issue [#564](https://github.com/CoatiSoftware/Sourcetrail/issues/564))
* Updated about dialog to new company name
* Graph: Improved layout of aggregation edges
* Fixed race condition causing crashes when showing tooltips
@@ -268,21 +342,21 @@ released 2018-04-24
* Graph: Improved horizontal layout to avoid edges overlapping nodes
* Show versions of 3rd party dependencies in 3rd party dialog
* Updated help info for update check
* Graph: Group graph nodes by file or namespace (issues #171, #439, #522)
* Graph: Group graph nodes by file or namespace (issues [#171](https://github.com/CoatiSoftware/Sourcetrail/issues/171), [#439](https://github.com/CoatiSoftware/Sourcetrail/issues/439), [#522](https://github.com/CoatiSoftware/Sourcetrail/issues/522))
* Graph: Layout template specializations vertically and show them in inheritance depth graph
* Graph: Show symbols defined within file when activating file node (issue #268)
* Graph: Show symbols defined within file when activating file node (issue [#268](https://github.com/CoatiSoftware/Sourcetrail/issues/268))
* UI: Updated to Qt 5.10.1
* C/C++: Updated to clang 6.0
* Graph: better contrast for non-indexed hatching colors
* Graph: group nodes with same base and derived nodes in inheritance depth graph (issue #459)
* Code: Lazy load code annotations for shorter display time (issue #389)
* Code: Improved snippet display time (issue #389)
* C++: fixed infinite recursion while solving c++ template parameter names (issue #553)
* Graph: group nodes with same base and derived nodes in inheritance depth graph (issue [#459](https://github.com/CoatiSoftware/Sourcetrail/issues/459))
* Code: Lazy load code annotations for shorter display time (issue [#389](https://github.com/CoatiSoftware/Sourcetrail/issues/389))
* Code: Improved snippet display time (issue [#389](https://github.com/CoatiSoftware/Sourcetrail/issues/389))
* C++: fixed infinite recursion while solving c++ template parameter names (issue [#553](https://github.com/CoatiSoftware/Sourcetrail/issues/544))
* Added close button to status view
* Improved style of tab bar in status view
* Added Show Errors button to title bar of incomplete files to show only errors related to certain file (issue #246)
* Added sorting to error table columns (issue #559)
* Added wildcards for excluded paths (issue #475)
* Added Show Errors button to title bar of incomplete files to show only errors related to certain file (issue [#246](https://github.com/CoatiSoftware/Sourcetrail/issues/246))
* Added sorting to error table columns (issue [#559](https://github.com/CoatiSoftware/Sourcetrail/issues/559))
* Added wildcards for excluded paths (issue [#475](https://github.com/CoatiSoftware/Sourcetrail/issues/475))
* Option to accept EULA via commandline API
* Changed seats to users for Commercial License in EULA
* Graph: Improved vertical layout for override and inheritance edges
@@ -291,23 +365,22 @@ released 2018-04-24
* Allow non-ASCII characters in bookmarks
* Allow non-ASCII characters in file paths
#### 2018.1.19
released 2018-01-30
* Fixed crash on filling DirectoryListBox with no selected items (issue #544, #545)
* Fixed crash on filling DirectoryListBox with no selected items (issue [#544](https://github.com/CoatiSoftware/Sourcetrail/issues/544), [#545](https://github.com/CoatiSoftware/Sourcetrail/issues/545))
* Graph: Improved type node contrast in bright color scheme
* Code: Fixed going back in history sometimes showed the wrong file when an edge was activated last
* Code: Clicking on active location will activate it again and show it's definition
* Graph: Don't keep expanded nodes expanded after using symbol search
* Fixed file picker didn't start in recent directory when exporting graph as image (issue #541)
* Fixed file picker didn't start in recent directory when exporting graph as image (issue [#541](https://github.com/CoatiSoftware/Sourcetrail/issues/541))
* Code: Fixed file content shown multiple times when clicking title button of non-indexed file with errors
* Preferences: Only show latin fonts in the font face dropdown
* Code: Fixed gaps in line indicators for some font faces
* Windows: Show indexing progress in Windows task bar
* Linux: Added settings to change screen scaling to preferences (issue #518, #523)
* Linux: Added settings to change screen scaling to preferences (issue [#518](https://github.com/CoatiSoftware/Sourcetrail/issues/518), [#523](https://github.com/CoatiSoftware/Sourcetrail/issues/523))
* Allow for disabling certain Source Groups via Status checkbox in the "Edit Project" dialog
* C/C++: Fixed no indexed information saved for compilation database referencing certain compiler (issue #531)
* C/C++: Fixed no indexed information saved for compilation database referencing certain compiler (issue [#531](https://github.com/CoatiSoftware/Sourcetrail/issues/531))
* Increased history dropdown list size to 50 items
* Still allow project refresh if database file can't be loaded
* Removed focus outlines from push buttons
@@ -324,8 +397,8 @@ released 2018-01-30
* C/C++: Fixed policy for recording elements inside macro arguments and bodies
* Allow users to ignore warning on non-existing paths in project setup
* Code: Switch to single file view when clicking snippet maximize
* Code: Show scrollbar at bottom of snippet list if bottom snippet is horizontally scrollable (issue #432)
* Code: Keep snippet title bar at top when scrolling down (issue #479)
* Code: Show scrollbar at bottom of snippet list if bottom snippet is horizontally scrollable (issue [#432](https://github.com/CoatiSoftware/Sourcetrail/issues/432))
* Code: Keep snippet title bar at top when scrolling down (issue [#479](https://github.com/CoatiSoftware/Sourcetrail/issues/479))
* Fixed history dropdown opened again when clicking on button again
* Code: Fixed single file view cleared when refreshing
* Graph: Added "Exported from Sourcetrail" note to exported graph images
@@ -334,50 +407,49 @@ released 2018-01-30
* Group include validation results by file and add line breaks for readability
* Fixed location pickers used system root directory when empty
* Graph: Add "bidirectional" to tooltip of bidirectional aggregation edges
* Linux: Don't explicitely open terminal when running on Linux (issue #525)
* Fixed files and directories dialog to offer selection of files (issue #521)
* Linux: Don't explicitely open terminal when running on Linux (issue [#525](https://github.com/CoatiSoftware/Sourcetrail/issues/525))
* Fixed files and directories dialog to offer selection of files (issue [#521](https://github.com/CoatiSoftware/Sourcetrail/issues/521))
* C++: Fixed cases where references to members were recorded as usage instead of call
* Fixed crash when Start Screen is closed while checking for update
* Search: Fixed selected text not deleted when pasting into search field (issue #527)
* Search: Fixed selected text not deleted when pasting into search field (issue [#527](https://github.com/CoatiSoftware/Sourcetrail/issues/527))
* C++: Record template variable specialization edges
* Code: Use different background color in snippet list to improve visual layering
* Don't force full project refresh when project settings changed (issue #493)
* Added indexing mode to reindex incomplete files (issue #496)
* Don't force full project refresh when project settings changed (issue [#493](https://github.com/CoatiSoftware/Sourcetrail/issues/493))
* Added indexing mode to reindex incomplete files (issue [#496](https://github.com/CoatiSoftware/Sourcetrail/issues/496))
* Java: Allow using .aar files as Java project dependencies
* Java: fixed some Java exceptions and write Java exceptions to log file
* Java: Note architecture of Java version in preferences dialog
* Code: Show line indicators for fulltext search results and fixed matches at line start
* Graph: Update visible depth graph when changing depth level slider (issue #484)
* Graph: Update visible depth graph when changing depth level slider (issue [#484](https://github.com/CoatiSoftware/Sourcetrail/issues/484))
* Always show all context menu actions, but disable unavailable ones
* Graph: Hide nodes and edges via context menu action or Alt + Click (issue #472)
* Graph: Added option to preferences to show/hide builtin types, default is hidden (issue #409)
* Graph: Hide nodes and edges via context menu action or Alt + Click (issue [#472](https://github.com/CoatiSoftware/Sourcetrail/issues/472))
* Graph: Added option to preferences to show/hide builtin types, default is hidden (issue [#409](https://github.com/CoatiSoftware/Sourcetrail/issues/409))
* Improved style and color of scrollbars and main window separators
* Linux: Fixed icon sizes when scaling to highDPI fails
* Search: Fixed cursor disappearing when entering long string in the search field
* C++: Fixed parent node hierarchy for C++ template parameters of variable declarations
* Linux: Fixed syntax error in Sourcetrail.sh (issue #519)
* Linux: Fixed syntax error in Sourcetrail.sh (issue [#519](https://github.com/CoatiSoftware/Sourcetrail/issues/519))
* Graph: Improved exported image quality
* Graph: Fixed exported graph image were too large (issue #511)
* Graph: Fixed exported graph image were too large (issue [#511](https://github.com/CoatiSoftware/Sourcetrail/issues/511))
* Fixed crashes due to double deleted Qt widgets
* Fixed crash when specifying an unknown text encoding in the preferences
* C++: Fixed retrieval of CXX template parameter declarations of parent
* C/C++: Fixed filepaths to always be canonical (issue #516)
* C/C++: Fixed filepaths to always be canonical (issue [#516](https://github.com/CoatiSoftware/Sourcetrail/issues/516))
* Graph: Fixed implicit nodes not auto-expanded when activated
* C/C++: Add filename info to static functions (issue #515)
* C/C++: Add filename info to static functions (issue [#515](https://github.com/CoatiSoftware/Sourcetrail/issues/515))
#### 2017.4.46
released 2017-11-09
* C/C++: Add filename info to static global variables to avoid collision (issue #514)
* C/C++: Add filename info to static global variables to avoid collision (issue [#514](https://github.com/CoatiSoftware/Sourcetrail/issues/514))
* Allow duplicate indexing of source files if the indexer command differs
* Fixed single header files within indexed paths were not indexed (issue #513
* Status: Explain differences of errors and how to fix them in help message dialog (issue #501)
* Fixed single header files within indexed paths were not indexed (issue [#513](https://github.com/CoatiSoftware/Sourcetrail/issues/513))
* Status: Explain differences of errors and how to fix them in help message dialog (issue [#501](https://github.com/CoatiSoftware/Sourcetrail/issues/501))
* C/C++: Add parent directories of source files in the compilation database automatically to indexed header paths
* C/C++: Give clang higher precedence in automatic global header search path detection
* C/C++: Added new clang 5.0.0 language standards to project setup dropdown box
* Graph: Show nodes with more than 20 children initially collapsed (issue #509)
* Show message box informing about shared memory problems before indexing (issue #508)
* Graph: Show nodes with more than 20 children initially collapsed (issue [#509](https://github.com/CoatiSoftware/Sourcetrail/issues/509))
* Show message box informing about shared memory problems before indexing (issue [#508](https://github.com/CoatiSoftware/Sourcetrail/issues/508))
* Fixed files from symlinked directories within indexed directories were not indexed
* Start from correct directory for relative paths in project setup location pickers
* Java: Added all previous Java versions to language standard selection
@@ -388,20 +460,19 @@ released 2017-11-09
* Search: Fixed focus and selection policy of search elements for Windows and Linux
* Graph: Fixed type usage edges not shown between class members and inner class types
* Graph: Fixed activation of bookmarked edge did not highlight edge in all situations
* Status: Fixed resize status view table columns were only resizeable in the title bar (issue #506)
* Added setting for text encoding to preferences (issue #500)
* Search: Fixed low contrast of search field cursor in dark schemes (issue #487)
* Status: Fixed resize status view table columns were only resizeable in the title bar (issue [#506](https://github.com/CoatiSoftware/Sourcetrail/issues/506))
* Added setting for text encoding to preferences (issue [#500](https://github.com/CoatiSoftware/Sourcetrail/issues/500))
* Search: Fixed low contrast of search field cursor in dark schemes (issue [#487](https://github.com/CoatiSoftware/Sourcetrail/issues/487))
#### 2017.4.20
released 2017-10-25
* Code: Fixed file state of snippets wrong after iterating references in single file view
* Search: Improved selection on focus to allow editing of search query (issue #483)
* Search: Improved selection on focus to allow editing of search query (issue [#483](https://github.com/CoatiSoftware/Sourcetrail/issues/483))
* Code: Fixed last line removed in full file view
* Fixed local symbol activation via plugin shows empty view
* Fixed handling of symbolic links when activated via plugin (issue #489)
* Code: Fixed crash due to double deletion of elements (issue #488)
* Fixed handling of symbolic links when activated via plugin (issue [#489](https://github.com/CoatiSoftware/Sourcetrail/issues/489))
* Code: Fixed crash due to double deletion of elements (issue [#488](https://github.com/CoatiSoftware/Sourcetrail/issues/488))
* Code: Show shortcut 'Ctrl + Left Mouse' in code for 'Show in IDE' context menu action
* Improved names, texts and order in project setup
* macOS: Fixed start screen did not vanish when opening project with double click
@@ -414,15 +485,15 @@ released 2017-10-25
* Linux: Enabled Qt highDPI scaling to fix UI issues on high resolution screens
* Fixed handling of non-indexed files in Graph and Code
* C/C++: Removed include check validataion for compilation database source groups
* Graph: Bundle nested anonymous namespaces into anonymous namespace bundle in namespace overview (issue #465)
* Graph: Bundle nested anonymous namespaces into anonymous namespace bundle in namespace overview (issue [#465](https://github.com/CoatiSoftware/Sourcetrail/issues/465))
* Search: Fixed vertical growth of search bar area when resizing window
* Visual Studio plugin: Lots off fixes, see changelog (https://github.com/CoatiSoftware/vs-sourcetrail/blob/master/CHANGELOG.md)
* Sublime Text plugin: Fixed plugin not working when installed via Package Control (issue #468)
* Windows: Added missing Qt dlls to save graph images as .jpg (issue #474)
* Windows: Added missing Qt dlls to save graph images as .jpg (issue [#474](https://github.com/CoatiSoftware/Sourcetrail/issues/474))
* C/C++: Updated to Clang 5.0.0
* Code: Fixed annotations missing for full file snippets
* Java: Added project setup from Gradle (issue #379)
* Added "Find On-Screen" option with search bar at bottom of window for searching Graph and Code on-screen (issue #79)
* Java: Added project setup from Gradle (issue [#379](https://github.com/CoatiSoftware/Sourcetrail/issues/379))
* Added "Find On-Screen" option with search bar at bottom of window for searching Graph and Code on-screen (issue [#79](https://github.com/CoatiSoftware/Sourcetrail/issues/79))
* Use "Find On-Screen" with 'Ctrl + D' or '/'
* Graph: Added C++ template specialization and template member specialization edges
* Graph: Show implicit children of implicit nodes
@@ -431,7 +502,6 @@ released 2017-10-25
* C++: Improved recording of template member specializations
* Refresh only files where content actually changed
#### 2017.3.48
released 2017-09-07
@@ -439,13 +509,13 @@ released 2017-09-07
* Java: Use same node order in graph as in file
* Code: Added second line marker color to better highlight hovered and local symbols
* Added "Skip this Version" option to update dialog
* Search: replace template arguments with .. in non-indexed nodes to reduce clutter in search results
* Search: replace template arguments with <..> in non-indexed nodes to reduce clutter in search results
* Code: Fixed default text color not reset text was annotated in dark schemes
* Code: Fixed text color not correctly changed when annotation type changes
* Fixed history list activating wrong symbol after aggregation edge was active
* Added node type keywords to filter autocompletions or activate all nodes (issue #78)
* File dialog shows home directory instead of working directory for first file dialog (issue #448)
* Java: improved Maven timeout policy (issue #449)
* Added node type keywords to filter autocompletions or activate all nodes (issue [#78](https://github.com/CoatiSoftware/Sourcetrail/issues/78))
* File dialog shows home directory instead of working directory for first file dialog (issue [#448](https://github.com/CoatiSoftware/Sourcetrail/issues/448))
* Java: improved Maven timeout policy (issue [#449](https://github.com/CoatiSoftware/Sourcetrail/issues/449))
* Fixed indexing results insertion starving when indexers are really fast because of other UI updates
#### 2017.3.26
@@ -455,19 +525,19 @@ released 2017-08-24
* Changed default indexer thread count to 0, which uses optimal thread count
* Java: Changed default value for maven dependencies directory
* Java: improved indexing speed to be 2.5 time faster
* Added commandline API for indexing projects and configuring indexing related preferences (issue #383)
* Added commandline API for indexing projects and configuring indexing related preferences (issue [#383](https://github.com/CoatiSoftware/Sourcetrail/issues/383))
* Mention call/inheritance graphs in tutorial
* CXX: Save command line info of indexer command to errors and show within errors table (issue #351)
* CXX: Added cross-compilation UI to project setup (issue #370)
* CXX: Save command line info of indexer command to errors and show within errors table (issue [#351](https://github.com/CoatiSoftware/Sourcetrail/issues/351))
* CXX: Added cross-compilation UI to project setup (issue [#370](https://github.com/CoatiSoftware/Sourcetrail/issues/370))
* Added update checker connecting to online API and checkbox to enable daily update checks on start screen.
* Java: Implemented interrupting AST visiting of Java indexer
* Java: Updated to JavaSymbolSolver 0.6.0.X and Javaparser 3.3.0
* CXX: Removed preprocessor only option, because of new include path validation
* CXX: Fixed uppercase CXX header file name and extensions saved in lowercase (issue #437)
* CXX: Fixed uppercase CXX header file name and extensions saved in lowercase (issue [#437](https://github.com/CoatiSoftware/Sourcetrail/issues/396))
* Code: When clicking source location with multiple tokens or local symbols show a list to select one of these
* Sort indexer commands for increased performance
* Added custom tooltipping to Code and Graph with clickable types of variables and signatures (issue #195)
* Java: fix issue where Maven project did not show any source files (issue #428)
* Added custom tooltipping to Code and Graph with clickable types of variables and signatures (issue [#195](https://github.com/CoatiSoftware/Sourcetrail/issues/195), [#331](https://github.com/CoatiSoftware/Sourcetrail/issues/331))
* Java: fix issue where Maven project did not show any source files (issue [#428](https://github.com/CoatiSoftware/Sourcetrail/issues/428))
* CXX: clean indexed header path selection for project setup from Compilation Database
* Added progress dialog for "show source files" button in project setup UI
* CXX: Added include path validation to project settings
@@ -475,57 +545,57 @@ released 2017-08-24
* Search: Fixed crash when fulltext search yields no results
* Updated to Qt 5.9.1
* CXX: Added node type for "union"
* CXX: Merge anonymous types and the respective typedef (issue #189, #292)
* CXX: Merge anonymous types and the respective typedef (issue [#189](https://github.com/CoatiSoftware/Sourcetrail/issues/189), [#292](https://github.com/CoatiSoftware/Sourcetrail/issues/292))
* CXX: Updated to clang 4.0.1
* Added Menu option to show Start Window
* Don't show start window when opening project with double-click
* Show license type label in title bar: "Sourcetrail [trial, test, non-commercial]"
* Graph: Fixed class expand toggle shown in overview and namespace lists
* Graph: Show inheritance edges between parents of active symbol and other visible symbols (issue #167)
* Graph: Show inheritance edges between parents of active symbol and other visible symbols (issue [#167](https://github.com/CoatiSoftware/Sourcetrail/issues/167))
* Improved project loading performance
* Code: improved location retrieval and hover performance
* Show recent bookmarks in bookmarks menu (issue #414)
* Show recent bookmarks in bookmarks menu (issue [#414](https://github.com/CoatiSoftware/Sourcetrail/issues/414))
* Code: Fixed references and buttons when activating file in snippet mode
* Java: added auto-detection for JRE System Library
* Java: Prefill JRE system library path on first Sourcetrail launch
* macOS: fixed qt.conf for case-sensitive file system (issue #404)
* macOS: fixed qt.conf for case-sensitive file system (issue [#404](https://github.com/CoatiSoftware/Sourcetrail/issues/404))
* Improved database saving performance
* Improved database file clearing performance
* Improved contrasts of UI elements in bright color scheme
* Graph: Show zoom level as percent label next to zoom buttons
* Added Visual Studio Code plugin (issue #397)
* Added Visual Studio Code plugin (issue [#397](https://github.com/CoatiSoftware/Sourcetrail/issues/397))
* Added "Edit Project" button below error table
* Java: Maven fixes regarding JAVA_HOME variable (issue #405)
* Java: Maven fixes regarding JAVA_HOME variable (issue [#405](https://github.com/CoatiSoftware/Sourcetrail/issues/405))
#### 2017.2
released 2017-06-21
* Fixed crash when using shortcuts containing letters with focus on the graph on macOS (issue #390)
* Fixed crash when using shortcuts containing letters with focus on the graph on macOS (issue [#390](https://github.com/CoatiSoftware/Sourcetrail/issues/390))
* Improved Visual Studio plugin performance
* Updated End User License Agreement and have users accept on first run on macOS and Linux
* Fixed memory issues when using large Compilation Database files (issue #396)
* Fixed memory issues when using large Compilation Database files (issue [#396](https://github.com/CoatiSoftware/Sourcetrail/issues/396))
* Updated to JavaParser and JavaSymbolSolver
* Fixed issue where black borders appeared around dialogs for some Linux window managers (issue #376)
* Fixed issue where black borders appeared around dialogs for some Linux window managers (issue [#376](https://github.com/CoatiSoftware/Sourcetrail/issues/376))
* Use platform default window decorations for UI dialogs
* Code: Made snippet minimize/maximize buttons more interactive by showing hover states
* Code: improved code view loading performance
* Java: Record more "import not found" errors
* Support Visual Studio 2017 in Visual Studio Plugin (issue #381)
* Support Visual Studio 2017 in Visual Studio Plugin (issue [#381](https://github.com/CoatiSoftware/Sourcetrail/issues/381))
* Graph: increased creation speed by requesting less data
* macOS: Codesign .app bundle to avoid "from unidentified developer" warning
* Error: Use same error order in error table and code view
* Error: Only show first 1000 errors, click button in lower right of error table to show all (issue #385)
* Error: Only show first 1000 errors, click button in lower right of error table to show all (issue [#385](https://github.com/CoatiSoftware/Sourcetrail/issues/385))
* Graph: use bezier edges when activating aggregation edge
* Send ping after changing plugin ports
* Added menu action to display EULA and force accepting on macOS
* Fixed use of environment variables in project setup paths
* Multi-language project setup via Source Groups setup UI (issue #230)
* Multi-language project setup via Source Groups setup UI (issue [#230](https://github.com/CoatiSoftware/Sourcetrail/issues/230))
* C/C++: Fixed no files indexed when relative file paths are provided in Compilation Database (issue #388)
* C/C++: Display an error when loading a Compilation Database fails
* C/C++: Fixed source files within Compilation Database not indexed unless within Indexed Header Paths
* Fixed status message length limiting window resizing (issue #372)
* Match source file extensions case insensitive (issue #384)
* Fixed indexing progress file count in status bar and status view (issue #387)
* Fixed status message length limiting window resizing (issue [#372](https://github.com/CoatiSoftware/Sourcetrail/issues/372))
* Match source file extensions case insensitive (issue [#384](https://github.com/CoatiSoftware/Sourcetrail/issues/384))
* Fixed indexing progress file count in status bar and status view (issue [#387](https://github.com/CoatiSoftware/Sourcetrail/issues/387))
* Windows: remove setup.exe from windows installer with all necessary .dll files
* Added history list button between back and forward button
* Added history menu showing activated symbols in chronologic order
@@ -534,7 +604,7 @@ released 2017-06-21
released 2017-05-16
* Added QtCreator plugin
* Graph: Added context menu action to create bookmark for node under mouse cursor (issue #373)
* Graph: Added context menu action to create bookmark for node under mouse cursor (issue [#373](https://github.com/CoatiSoftware/Sourcetrail/issues/373))
* Code: Fixed code view not scrolled to first fulltext search match in single file mode
* Set unrestricted permission for accessing shared memory to fix crash on Windows
* Improved setting descriptions in preferences dialog
@@ -548,22 +618,22 @@ released 2017-05-16
* Added dialog to warn about "verbose indexer logging" before indexing.
* Added multi process indexing for C/C++ projects to better handle crashes during indexing.
* Reduced file accesses during C/C++ indexing.
* Graph: Show call graphs, inheritance trees and include trees for active symbol. UI in the top left of the graph view for defining direction and depth. (issues #249 #337)
* Graph: Show call graphs, inheritance trees and include trees for active symbol. UI in the top left of the graph view for defining direction and depth. (issues [#249](https://github.com/CoatiSoftware/Sourcetrail/issues/249) [#337](https://github.com/CoatiSoftware/Sourcetrail/issues/337))
* Improved performance by running UI updates in parallel for each view
* Fixed project refresh not recognizing newly added files
* Show progress dialog when clicking refresh while computing files (issue #341)
* Added show files button to summary of compilation database project setup (issue #354)
* Show option to run only C/C++ preprocessor when indexing on indexing start dialog (issue #297)
* Added bookmarking feature for nodes and edges. Bookmarks can have categories and comments. Data gets stored in .srctrlbm next to project file. Shortcuts similar to web browsers. (issue #138)
* Mark files with errors and all files within a translation unit with fatal errors as incomplete (issue #358)
* Fixed compilation database projects using C++ source extensions and standard (issue #366)
* Show progress dialog when clicking refresh while computing files (issue [#341](https://github.com/CoatiSoftware/Sourcetrail/issues/341))
* Added show files button to summary of compilation database project setup (issue [#354](https://github.com/CoatiSoftware/Sourcetrail/issues/354))
* Show option to run only C/C++ preprocessor when indexing on indexing start dialog (issue [#297](https://github.com/CoatiSoftware/Sourcetrail/issues/297))
* Added bookmarking feature for nodes and edges. Bookmarks can have categories and comments. Data gets stored in .srctrlbm next to project file. Shortcuts similar to web browsers. (issue [#138](https://github.com/CoatiSoftware/Sourcetrail/issues/138))
* Mark files with errors and all files within a translation unit with fatal errors as incomplete (issue [#358](https://github.com/CoatiSoftware/Sourcetrail/issues/358))
* Fixed compilation database projects using C++ source extensions and standard (issue [#366](https://github.com/CoatiSoftware/Sourcetrail/issues/366))
#### 0.11.86
released 2017-04-12
* Terminating all running tasks before closing the application (issue #343)
* Use all available cores when setting indexer threads to 0 (issue #342)
* Added reset window layout option to view menu (issue #289)
* Terminating all running tasks before closing the application (issue [#343](https://github.com/CoatiSoftware/Sourcetrail/issues/343))
* Use all available cores when setting indexer threads to 0 (issue [#342](https://github.com/CoatiSoftware/Sourcetrail/issues/342))
* Added reset window layout option to view menu (issue [#289](https://github.com/CoatiSoftware/Sourcetrail/issues/289))
* Fixed colorscheme gets refreshed when cancelling preferences dialog
* Log: Scroll to first line in errors table after indexing and after display
* Copy old ApplicationSettings.xml and window_settings.ini files from previous Coati install if available.
@@ -582,7 +652,7 @@ released 2017-04-12
#### 0.11.15
released 2017-03-01
* Don't accept richt text in 'enter license' dialog field (issue #207)
* Don't accept richt text in 'enter license' dialog field (issue [#207](https://github.com/CoatiSoftware/Sourcetrail/issues/207))
* Updated EULA to include Test License and better clarify other license types
* Fixed icons in project setup dialogs blurry on highDPI screens
* Added link to additional downloadable pre-indexed projects to trial start screen
@@ -590,28 +660,28 @@ released 2017-03-01
* Convert all paths chosen by patch picker relative to project location in project setup
* Disabled name and location changing in project editing and removed project moving
* Split default file extensions for C++ and C to avoid wrong files getting indexed
* Deprecated 'Lazy Include Search', it's only visible to previously created projects (issue #335)
* Support relative paths and paths containing environment variables for compilation database path (issue #312)
* Removed 'Advanced Settings' section in project setup and show theses options in separate dialog (#293)
* Support environment variables containing multiple files in project setup paths (issue #283)
* Warn users when no 'Indexed Header Paths' were set in compilation database project (issue #254)
* Deprecated 'Lazy Include Search', it's only visible to previously created projects (issue [#335](https://github.com/CoatiSoftware/Sourcetrail/issues/335))
* Support relative paths and paths containing environment variables for compilation database path (issue [#312](https://github.com/CoatiSoftware/Sourcetrail/issues/312))
* Removed 'Advanced Settings' section in project setup and show theses options in separate dialog (issue [#293](https://github.com/CoatiSoftware/Sourcetrail/issues/293))
* Support environment variables containing multiple files in project setup paths (issue [#283](https://github.com/CoatiSoftware/Sourcetrail/issues/283))
* Warn users when no 'Indexed Header Paths' were set in compilation database project (issue [#254](https://github.com/CoatiSoftware/Sourcetrail/issues/254))
* Renamed "Project Paths" to "Indexed Paths" in project setup
* Renamed "Project File Location" to "Coati Project Location" in project setup (issue #234)
* Renamed "Project File Location" to "Coati Project Location" in project setup (issue [#234](https://github.com/CoatiSoftware/Sourcetrail/issues/234))
* Allow opening indexed projects in trial mode
* Record node type of non-indexed qualifiers (e.g. "std" in "std::string" as namespace)
* Log: Fixed error icon loaded for every row (issue #287)
* Log: Fixed error icon loaded for every row (issue [#287](https://github.com/CoatiSoftware/Sourcetrail/issues/287))
* Graph: Fixed lambda are placed within white area to better see call edges
* Graph: Show non-indexed nodes within their parents instead of using namespace labeling
* Code: Disabled syntax highlighting for project description
* Graph: Fixed different font-faces causing graph nodes to expand to bigger cell amount
* Mac: Fixed wrong READMEs at some plugins (issue #315)
* Mac: Fixed wrong READMEs at some plugins (issue [#315](https://github.com/CoatiSoftware/Sourcetrail/issues/315))
* Mac: Removed boost libraries and libLTO from Mac bundle
* Windows: Add Visual Studio compatibility flags to new project when Visual Studio include paths are present
* Renamed undefined nodes to non-indexed nodes for clarification
* Show progress in file clearing dialog
* Extended syntax highlighting for Java and distinguish by project type
* offer Windows 64bit build (issue #300)
* Fixed legacy Java 6 install necessary on MacOS (issue #280)
* offer Windows 64bit build (issue [#300](https://github.com/CoatiSoftware/Sourcetrail/issues/300))
* Fixed legacy Java 6 install necessary on MacOS (issue [#280](https://github.com/CoatiSoftware/Sourcetrail/issues/280))
* Updated to Qt 5.8
* Updated to clang/llvm 3.9
* Added multithreading to Visual Studio plugin compilation database creation
@@ -621,18 +691,18 @@ released 2017-03-01
* Visual Studio plugin can now handle projects with non-native build tool for compilation database export
* Changed menu action 'Licenses' to '3rd Party Licenses'
* Added dialog with all shortcuts to Help menu
* Log: Show error in errors table when clicked in code view (issue #323)
* Log: Show error in errors table when clicked in code view (issue [#323](https://github.com/CoatiSoftware/Sourcetrail/issues/323))
* Code: Switched default mouse drag behavior to selection, panning on Shift + drag, and show suitable cursors
* Updated company address in about dialog
* Graph: Added on-screen zoom buttons
* Graph: Split aggregation edge when expanding nodes if possible
* Uncommented lines using the std library in TicTacToe sample
* Fixed issue with lambda return type (issue #318)
* Save builtin types as separate node type (issue #2)
* Fixed issue with lambda return type (issue [#318](https://github.com/CoatiSoftware/Sourcetrail/issues/318))
* Save builtin types as separate node type (issue [#2](https://github.com/CoatiSoftware/Sourcetrail/issues/2))
* Remove unused included files after refreshing
* Java: Fixed packages that only contain packages to show up as non-indexed
* Added context-menu actions to copy node names, file paths and show files in containing directory (issue #320)
* Fixed crash when entering a single space in 'enter license' dialog (issue #277)
* Added context-menu actions to copy node names, file paths and show files in containing directory (issue [#320](https://github.com/CoatiSoftware/Sourcetrail/issues/320))
* Fixed crash when entering a single space in 'enter license' dialog (issue [#277](https://github.com/CoatiSoftware/Sourcetrail/issues/277))
* Graph: Made edge lines thicker
* Fixed handling and storing of files with the same name
* Fixed environment variable detection within project paths for %VARIABLE_NAME% syntax
@@ -651,7 +721,7 @@ released 2017-03-01
#### 0.10.0
released 2016-12-13
released 2016-12-14
* Windows: Added runtime DLLs that could be missing on some systems
* Click message in status bar to open status window
@@ -664,11 +734,11 @@ released 2016-12-13
* Graph: Disable bundling when files or macros are active
* Graph: Bundle importing files of active symbol in Java projects
* Improved speed of depending file search on refresh
* Search: Fixed crashes related to empty searches (issue #251)
* Search: Fixed crashes related to empty searches (issue [#251](https://github.com/CoatiSoftware/Sourcetrail/issues/251))
* Search: Do fulltext search when no autocompletion match is available
* Added checkbox for full project refresh to start indexing dialog
* Disabled clang error limit by default to make sure all errors are shown
* Linux: Updated libs and added missing ones (issue #245)
* Linux: Updated libs and added missing ones (issue [#245](https://github.com/CoatiSoftware/Sourcetrail/issues/245))
* Updated icons for some graph nodes and project types
* Windows: Updated Visual Studio plugin UI
* Graph: Fixed view to not recenter on active node when clicking edge
@@ -685,10 +755,10 @@ released 2016-12-13
* Integrated Visual Studio Plugin with Coati Project creation and removed previous Visual Studio Solution parser
* Improved C++ indexer coverage: using decls, using directives, auto keyword, lambda signatures, symbol references inside lambda captures, template argument related elements
* Reduced size of .coatidb file by up to 50% for large projects
* Fixed anonymouse symbol name conflicts (issue #241)
* Fixed anonymouse symbol name conflicts (issue [#241](https://github.com/CoatiSoftware/Sourcetrail/issues/241))
* Preferences: Added Indexer Logging option to print AST information during indexing
* Search: Added second line to search autocompletion list showing namespace, package or filepath
* Made cells readonly in errors table to prevent editing (issue #236)
* Made cells readonly in errors table to prevent editing (issue [#236](https://github.com/CoatiSoftware/Sourcetrail/issues/236))
* Renamed Log Window to Status window
@@ -697,20 +767,21 @@ released 2016-10-27
* Windows: Added logging and exception handling to VS plugin
* Windows: Added VC++ runtime dlls for windows installer
* Windows: Added missing VC++ runtime dlls (issue #231)
* Added setting for default graph zoom on mouse wheel to preferences (issue #237)
* Windows: Added missing VC++ runtime dlls (issue [#231](https://github.com/CoatiSoftware/Sourcetrail/issues/231))
* Added setting for default graph zoom on mouse wheel to preferences (issue [#237](https://github.com/CoatiSoftware/Sourcetrail/issues/237))
* Scroll errors table to newest error during indexing
* Fixed best scoring for search autocompletions skipped some combinations
* Fixed flickering of errors table when indexing
* Don't show error snippets in overview screen anymore
* Fixed crash when Project Paths contain files and lazy include search in enabled (issue #201)
* Fixed crash when Project Paths contain files and lazy include search in enabled (issue [#201](https://github.com/CoatiSoftware/Sourcetrail/issues/201))
* Fixed edge cases that caused deadlocks in indexing
* Added language specific project icons to start screen
* Fixed application couldn't be quit when start screen was showing (issue #227)
* Fixed application couldn't be quit when start screen was showing (issue [#227](https://github.com/CoatiSoftware/Sourcetrail/issues/227))
* Graph: Fixed missing image file ending when exporting graph for Linux
* Log Coati version when logging gets enabled
* Fixed non-indexed errors filter in errors table
#### 0.9.0
released 2016-10-14
@@ -726,38 +797,38 @@ released 2016-10-14
* Graph: Move aggregation and inheritance edges to front when hovered or active
* Graph: Push parent nodes of active nodes to back to make all incoming and outgoing edges visible
* Properly quit application when window is closed while confirm box is open
* Properly quit application when window is closed while indexing (issue #121)
* Properly quit application when window is closed while indexing (issue [#121](https://github.com/CoatiSoftware/Sourcetrail/issues/121))
* Graph: Count only top level nodes in bundle nodes of graph
* Search: Improved scoring of autocompletion matches to use best score for match
* App will go into trial mode without valid license
* Java: Auto detect java root source directories
* Fixed refresh crash (issue #220)
* Fixed refresh crash (issue [#220](https://github.com/CoatiSoftware/Sourcetrail/issues/220))
* Java: improved indexer reliability a lot
* Java: Changed name of generic type to use name of declaration
* Fixed project refresh does not recognize removed source paths
* Java: Define maximum allocated jvm memory in preferences
* Follow symbolic directory links within source paths (issue #205)
* Follow symbolic directory links within source paths (issue [#205](https://github.com/CoatiSoftware/Sourcetrail/issues/205))
* Use white size grip in blue dialogs
* Graph: Use type node colors for undefined nodes
* Java: Show import not found as error
* Code: Select and copy source code in code view with SHIFT + mouse drag (issue #7)
* Code: Select and copy source code in code view with SHIFT + mouse drag (issue [#7](https://github.com/CoatiSoftware/Sourcetrail/issues/7))
* Code: Added markers next to line numbers in code view showing active locations and scopes
* Merged app and trial to one build
#### 0.8.21
released 2016-09-16
* Added options for checking multiple paths in Indexed Header Paths dialog during project setup from Compilation Database #190
* Added options for checking multiple paths in Indexed Header Paths dialog during project setup from Compilation Database [#190](https://github.com/CoatiSoftware/Sourcetrail/issues/190)
* Added all C/C++ standards supported by clang
* Fixed C language setting in empty project setup not propagated to indexer #177
* Fixed C language setting in empty project setup not propagated to indexer [#177](https://github.com/CoatiSoftware/Sourcetrail/issues/177)
* Added Sublime plugin to Sublime Text Package Control
* Improved indexer parallelization for faster indexing
* Changed all font-sizes to px for similar look on all platforms
* Added font face dropdown to Preferences showing all available monospace fonts #172
* Smoother font rendering on Windows by setting font engine to FreeType via qt.conf file #137
* Added font face dropdown to Preferences showing all available monospace fonts [#172](https://github.com/CoatiSoftware/Sourcetrail/issues/172)
* Smoother font rendering on Windows by setting font engine to FreeType via qt.conf file [#137](https://github.com/CoatiSoftware/Sourcetrail/issues/137)
* Interrupt indexing while AST visiting for C/C++ for shorter waiting time
* Save graph as PNG image via context menu in graph view #180
* Added base folder to Linux package #181
* Save graph as PNG image via context menu in graph view [#180](https://github.com/CoatiSoftware/Sourcetrail/issues/180)
* Added base folder to Linux package [#181](https://github.com/CoatiSoftware/Sourcetrail/issues/181)
* Use inverted golden ratio in indexing progress dialog
#### 0.8.0
@@ -765,30 +836,30 @@ released 2016-09-01
* Improved titles and help texts in project setup UI
* Fixed error locations not saved with absolute file paths in Compilation Database projects
* Added missing source files extensions setting to the Edit Project dialog #132
* Changed default text colors to black in project setup UI #140
* Added plugin ports settings to Preferences #145
* Added missing source files extensions setting to the Edit Project dialog [#132](https://github.com/CoatiSoftware/Sourcetrail/issues/132)
* Changed default text colors to black in project setup UI [#140](https://github.com/CoatiSoftware/Sourcetrail/issues/140)
* Added plugin ports settings to Preferences [#145](https://github.com/CoatiSoftware/Sourcetrail/issues/145)
* Improved project state handling on refreshing
* Added Java sample project JavaParser: http://javaparser.org/
* Fixed regex for system includes used wrongly in syntax highlighter
* Added setting to disable file and console logging, default is off #157
* Added setting to disable file and console logging, default is off [#157](https://github.com/CoatiSoftware/Sourcetrail/issues/157)
* Added migrations between different ApplicationSettings versions
* Added auto detection for Java library to Preferences
* Removed auto refresh option from Search view
* Added progress dialogs for indexing and block UI #143
* Added progress dialogs for indexing and block UI [#143](https://github.com/CoatiSoftware/Sourcetrail/issues/143)
* Hide name qualifiers for graph nodes in Java projects
* Added handling when java library not found
* Added plain text editing dialog to path list boxes
* Use language dependent symbol name delimiter in UI
* Added scroll speed setting to preferences #112
* Added scroll speed setting to preferences [#112](https://github.com/CoatiSoftware/Sourcetrail/issues/112)
* Added Java project setup UI
* Record start and end locations of scopes in Java
* Display unresolved types names in Java as 'unresolved-type'
* Cache stats for overview to speed up display
* Fixed graph nodes to restore their expand state when going back #118
* Fixed graph nodes to restore their expand state when going back [#118](https://github.com/CoatiSoftware/Sourcetrail/issues/118)
* Added shortcuts for navigating to next and previous reference in code view
* Pressing Tab in search completes up to next ::, Delete erases to last :: #133
* Bundle anonymous namespaces separately in graph overview #126
* Pressing Tab in search completes up to next ::, Delete erases to last :: [#133](https://github.com/CoatiSoftware/Sourcetrail/issues/133)
* Bundle anonymous namespaces separately in graph overview [#126](https://github.com/CoatiSoftware/Sourcetrail/issues/126)
* Added 'Show Data Folder' and 'Show Log Folder' items to Help menu
* Added new status bar loader gif with higher resolution
* Record type aliases in C++
@@ -799,7 +870,7 @@ released 2016-09-01
* Leave code view at original line when expanding scopes
* Pan graph view to center on name of active symbol after activation
* Moved color scheme selection to Preferences
* Moved Preferences menu item to Edit menu on Windows/Linux #113
* Moved Preferences menu item to Edit menu on Windows/Linux [#113](https://github.com/CoatiSoftware/Sourcetrail/issues/113)
* Added setting for hiding non-fatal errors in unindexed files to preferences, turned on by default
* Fixed file out-of-date asterisk disappearing when showing snippets after minimize state
* Implemented Atom plugin: https://github.com/CoatiSoftware/atom-coati
@@ -809,7 +880,6 @@ released 2016-09-01
* Improved code view rendering times
* Don't show implicit nodes in search auto completion list
#### 0.7.0.22
released 2016-07-07
@@ -872,42 +942,42 @@ released 2016-06-15
#### 0.6.0.0
released 2016-04-27
* Smoother graph panning and zooming on keyboard using update loop
* Differentiate between explicit and implicit nodes and only show implicit nodes in the graph view when connected
* Improved file clearing performance on project refresh
* Show deleted projects on the start screen and show messagebox to delete them
* Show analysis duration in hh:mm:ss
* Added suppport for temporary test licenses and show error message when it expired
* Increased graph performance by reducing to fixed number of requests
* Add vs-clang compatibility flags when creating project from Visual Studio solution
* Increased graph edge drawing performance
* Added auto detection for system header paths to project wizard and preferences when using gcc, clang or vs compilers
* Added bug tracker to help menu
* Increased search autocompletion performance to stay mostly below 100ms
* Increased project load performance
* Improved file clearing performance on project refresh
* Increased graph creation performance for overview screen
* Increased graph performance by reducing to fixed number of requests
* Increased graph edge drawing performance
* Improved error display performance by not expanding all of them at once
* Added analysis for local symbols and allow selecting them in the code view
* Added support for function pointers to analysis
* Smoother graph panning and zooming on keyboard using update loop
* Changed style of aggregation edge to cleaner look
* Allow certain edge types to enter and leave at top and bottom of nodes as well e.g. inheritance
* Increased project load performance
* Increased graph creation performance for overview screen
* Changed namespace activation to show the namespace name in the search bar and the namespace definitions in the code view
* Updated to Qt 5.6
* Added analysis for local symbols and allow selecting them in the code view
* Improved error display performance by not expanding all of them at once
* Differentiate between explicit and implicit nodes and only show implicit nodes in the graph view when connected
* Show deleted projects on the start screen and show messagebox to delete them
* Show analysis duration in hh:mm:ss
* Added bug tracker to the help menu
* Added home button next to search field for showing the project overview
* Added shortcut and menu item to show project overview
* Fixed Path boxes not sized correctly when switching back and forth in the project wizard
* Allow support for environment variables in project setup with syntax ${VARIABLE_NAME}
* Added welcome message to Coati trial
* Show quit button on license enter screen when no valid license was entered yet
* Allow color schemes to define text colors for code view highlights
* Added support for function pointers to analysis
* Added Windows system dlls to installer on Windows so users don't not need to install the redistributable package
* Defined new highlight colors for code view in all color schemes
* Changed style of out-of-date files to be followed by *
* Set Qt flag for high DPI scaling
* Fixed Path boxes not sized correctly when switching back and forth in the project wizard
* Check analyzed paths for existence in project wizard
* Inform the user about project changes and ask before reparsing the project
* Removed "simple setup" step in project wizard and added "lazy include search"-checkbox
* Edit the project settings by clicking the project name in the overview stats
* Added welcome message to Coati trial
* Defined new highlight colors for code view in all color schemes
* Updated to Qt 5.6
* Improved high DPI support for windows
* Added Windows system dlls to installer on Windows so users don't not need to install the redistributable package
* Added vs-clang compatibility mode as compile flags when creating project from Visual Studio solution
* Added auto detection for system header paths to project wizard and preferences when using gcc, clang or vs compilers
#### 0.5.1.21
released 2016-03-16
+364 -417
View File
File diff suppressed because it is too large Load Diff
+14
View File
@@ -0,0 +1,14 @@
# Contributing
If you like this project and want to get involved, there are lots of ways you can help:
* __Spread the word.__ The more people want this project to grow, the greater the motivation for the developers to get things done.
* __Fund the development.__ Further development and maintainance of this project is crowd funded via [Patreon](https://www.patreon.com/sourcetrail). If you would like Sourcetrail to grow and improve but cannot spare the time to contribute your self, please consider making a pledge.
* __Test Sourcetrail.__ Run it on your own source code. If you find any issues, just report it here. Best, include some detailed step-by-step instructions that illustrate how to reproduce the issue, so that we can use it as a basis to craft a test case for our continuous integration and no one will ever break that case again.
* __Write some code.__ Don't be shy here. You can implement whole new features or fix some bugs, but you can also do some refactoring if you think that it benefits the readability or the maintainability of the code. Still, no matter if you just want to work on cosmetics or implement new features, it would be best if you create an issue here on the issue tracker before you actually start handing in pull requests, so that we can discuss those changes first and thus raise the probability that those changes will get pulled quickly.
To create a pull request, follow these steps:
* Fork the Repo on GitHub.
* Make your commits.
* If you added functionality or fixed a bug, please add a test.
* Add your name to the AUTHORS.txt file.
* Push to your fork and submit a pull request.
+674
View File
@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
+195 -114
View File
@@ -1,166 +1,247 @@
## Sourcetrail
# Sourcetrail
### Setup
[Sourcetrail](https://www.sourcetrail.com/) is a free and open-source cross-platform source explorer that helps you get productive on unfamiliar source code.
#### External Software
Windows: [![Build status](https://ci.appveyor.com/api/projects/status/0c258a2opn3loyc2/branch/master?svg=true)](https://ci.appveyor.com/project/mlangkabel/sourcetrail/branch/master)
* JDK 1.8
* QT 5.10.1
* CxxTest 4.3
* Clang & LLVM 7.0 (doesn't quite work for windows, use unix setup below and skip all the ninja stuff)(installation guide http://clang.llvm.org/docs/LibASTMatchersTutorial.html)
* Boost 1.68
* Botan 2.1.0
* Image Magick 7.0.6
* ccache (Unix)
* Visual Leak Detector (Windows)
* Wix 3.11 (Windows)
* Winrar (Windows)
Linux: [![Build Status](https://travis-ci.org/CoatiSoftware/Sourcetrail.svg?branch=master)](https://travis-ci.org/CoatiSoftware/Sourcetrail)
#### Environment Variables
* CXX_TEST_DIR - .../cxxtest-4.3
* CLANG_DIR - .../clang-llvm
* BOOST_DIR - .../boost_1_68_0
* BOTAN_DIR - .../Botan-2.1.0
__Links__
* [Website](https://www.sourcetrail.com/)
* [Download](https://www.sourcetrail.com/downloads)
* [Quick Start Guide](https://www.sourcetrail.com/documentation/#QUICKSTARTGUIDE)
* [Documentation](https://www.sourcetrail.com/documentation)
* [Changelog](CHANGELOG.md)
* [Slack Channel](https://join.slack.com/t/sourcetrail/shared_invite/enQtNDc3MjcyOTk5MTc0LTNhOWZhZjAxZmU1NTM0YjhhMzRhZWE1NTQ2NjQyYjc1ODE2MzViOTliMWUwODBjN2NlMjkwMDc0MjAxMzJkY2E)
* [Mailing List](https://coati.us12.list-manage.com/subscribe/post?u=3dabab4e475b5ed577d1dcd0f&id=cf7301fc53)
* [Patreon](https://www.patreon.com/sourcetrail)
For MacOS and Linux
* QT_DIR - .../Qt/Qt5.10.1/5.10.1/<IDE>
* LLVM_DIR - .../clang-llvm
!["Sourcetrail User Interface"](docs/readme/user_interface.png "Sourcetrail User Interface")
For Windows:
* QT_WIN32_DIR - .../Qt/Qt5.10.1/5.10.1/msvc2015
* QT_WIN64_DIR - .../Qt/Qt5.10.1/5.10.1/msvc2015_64
* VLD_DIR - .../Visual Leak Detector
* JAVA_HOME - .../Java/jdk1.x.x_xxx
* path
- append path to git.exe
- append path to jdk/bin
- append path to VisualStudio/Common7/Tools
- append path to VisualStudio/Common7/IDE
- append path to .../Microsoft SDKs/Windows/v7.1A/Bin (for uuidgen in deploy script)
- append path to .../WiX Toolset v3.11/bin
- append path to .../WinRAR
Sourcetrail is:
* free
* working offline
* operating on Windows, macOS and Linux
* supporting C, C++, Java and Python
* offering an SDK ([SourcetrailDB](https://github.com/CoatiSoftware/SourcetrailDB)) to write custom language extensions
##### ccache
## Support Sourcetrail via Patreon
* install ccache
* if ccache is in path it will be used for recompilation
The ongoing development and regular software releases are made possible entirely by the support of [these awesome patrons](SPONSORS.md)! If you'd like to join them, please consider [becoming a patron](https://www.patreon.com/sourcetrail) of Sourcetrail.
##### Clang setup
## Using Sourcetrail
For Windows:
Execute Cmake twice (once for each target compiler (32 and 64 bit)). Set the respective build path to ${CLANG_DIR}/build_win32 or ${CLANG_DIR}/build_win64
To setup Sourcetrail on your machine, you can either download the respective build for your operating system from our list of [Releases](https://www.sourcetrail.com/downloads) and install it on your machine, or use one of the following package managers:
##### Boost setup
* Use the [Chocolatey package](https://chocolatey.org/packages/sourcetrail) with `choco install sourcetrail`
For Windows:
Build the Boost libs for 32 and 64 bit. Make sure that the platform specific libs are located in ${BOOST_DIR}/lib32-msvc-14.0 and ${BOOST_DIR}/lib64-msvc-14.0.
After your installation is complete, follow our [Quick Start Guide](https://www.sourcetrail.com/documentation/#QUICKSTARTGUIDE) to get to know Sourcetrail.
For Mac:
## How to Report Issues
You can post all your feature requests and bug reports on our [issue tracker](https://github.com/CoatiSoftware/Sourcetrail/issues).
### Reporting
Use the following template:
* platform version:
* Sourcetrail version:
* description of the problem:
* steps to reproduce the problem:
### Supporting
If you want to support a certain feature request or you have the same bug that another user already reported, please let us know:
* post a comment with "+1" to the issue
* or send an email to support@sourcetrail.com with the issue ID
## How to Contribute
* Please read and follow the steps in [CONTRIBUTING.md](CONTRIBUTING.md) file.
* You may want to look out for issues labeled [good first issue](https://github.com/CoatiSoftware/Sourcetrail/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) to find some initial tasks to tackle.
* If you are looking for more information about Sourcetrail software development, please refer to our [wiki](https://github.com/CoatiSoftware/Sourcetrail/wiki).
# How to Build
Building Sourcetrail requires several dependencies to be in place on your machine. However, our CMake based setup allows to disable indexing support for specific languages which reduces the number of dependencies to a minimum.
## Building the bare minimum
### Required Tools
#### Git
This is required for generating the Sourcetrail version number. Get it from: https://git-scm.com/download.
Make sure `git` is available in added to your `PATH` environment variable.
#### CMake v3.12
This is used for generating a build configuration. Get it from: https://cmake.org/download/
### Additional tools for Windows
#### Visual Studio
### Additional tools for Unix
#### ccache
This is optionally used to speed up rebuilds if found in `PATH`.
### Required dependencies
#### Boost 1.67
For the __msvc__ compiler pre-built binaries can be downloaded from [sourceforge.net/projects/boost/files/boost-binaries](https://sourceforge.net/projects/boost/files/boost-binaries/)
For building on Unix:
```
$ ./bootstrap.sh --with-libraries=filesystem,program_options,system,date_time
$ ./b2 --link=static --variant=release --threading=multi --runtime-link=static --cxxflags=-fPIC
```
##### Botan setup
#### Qt 5.12
For Windows
__Note__: still causes style issues on Windows, resort to Qt 5.10
Extract the contents of your Botan package into "${BOTAN_DIR}/win32". Duplicate that folder and rename it "win64".
For the __msvc__ compiler pre-built binaries can be downloaded from [download.qt.io/official_releases/qt](http://download.qt.io/official_releases/qt/)
Build 32 bit debug lib in ${BOTAN_DIR}/win32/debug
$ python configure.py --cc=msvc --cpu=x86_32 --disable-shared --no-optimizations --with-debug-info
### Building
Build 32 bit release lib in ${BOTAN_DIR}/win32/release
$ python configure.py --cc=msvc --cpu=x86_32 --disable-shared
#### For Windows / Visual Studio
```
$ cd Sourcetrail
$ mkdir -p build/win64
$ cd build/win64
$ cmake -G "Visual Studio 15 2017 Win64" -DBOOST_ROOT=<path/to/boost_1_68_0> -DQt5_DIR=<path/to/Qt/version/platform/compiler/lib/cmake/Qt5> ../..
```
If you are using the gui, we recommend that you activate advanced mode. Also you may be required to add some of the defines via the "Add Entry" button.
To build the 64 bit lib start the VS command prompt with the "amd64" argument as described here:https://msdn.microsoft.com/en-us/library/x4d2c09s.aspx
After generating the build configuration, just open the Sourcetrail.sln file that was generated by CMake and build the Sourcetrail project.
Build 64 bit debug lib in ${BOTAN_DIR}/win64/debug
$ python configure.py --cc=msvc --cpu=x86_64 --disable-shared --no-optimizations --with-debug-info
#### For Unix
Build 64 bit release lib in ${BOTAN_DIR}/win64/release
$ python configure.py --cc=msvc --cpu=x86_64 --disable-shared
```
$ cd Sourcetrail
$ mkdir -p build/Release
$ cd build/Release
$ cmake -DCMAKE_BUILD_TYPE="Release" -DBOOST_ROOT=<path/to/boost_1_68_0> -DQt5_DIR=<path/to/Qt/version/platform/compiler/lib/cmake/Qt5> ../..
$ make Sourcetrail
```
### Running
Run Sourcetrail from within the build directory. During execution Sourcetrail needs resources from `bin/app/data` and `bin/app/user`. Cmake creates symlinks to these directories within the build directory.
For MacOS and Linux
## Enable C/C++ Language Support
Build release lib in ${BOTAN_DIR}/release
Build debug lib in ${BOTAN_DIR}/debug
### Required dependencies
for Mac:
$ mkdir debug/release
$ cd debug/release
$ python ../configure.py --disable-shared --disable-modules=darwin_secrandom (--with-debug-info)
$ make -j 4
#### LLVM/Clang 9.0.0
for Linux:
$ python configure.py --disable-shared
##### Windows
For the __msvc__ compiler, follow [these steps](https://clang.llvm.org/get_started.html) to build the project. Make sure to check out the correct tag and to run the cmake command exactly as described.
#### Settings
##### Unix
For Unix, follow this [installation guide](http://clang.llvm.org/docs/LibASTMatchersTutorial.html)
Run setup script:
$ ./script/setup.sh
Build with `-DLLVM_ENABLE_RTTI=ON`.
### Release
### Building
#### App
* create release build
* make sure it uses the Sourcetrail icon
* obfuscate the executable using upx
Run CMake with these additional options:
```
-DClang_DIR=<path/to/llvm_build/lib/cmake/clang>
-DBUILD_CXX_LANGUAGE_PACKAGE=ON
```
#### Data folder
* put data folder in working directory
* add empty log folder
* add working tictactoe.xml project to /projects/tictactoe with sources in /projects/tictactoe/src
* add empty app settings with one recent project tictactoe.xml
* leave window_settings.ini with correct Sourcetrail start layout
## Enable Java Language Support
#### Package
* add app
### Required dependencies
#### Updating Clang on UNIX
#### JDK 1.8
$ cd .../clang_llvm
Install JDK and make sure the `JAVA_HOME` environment variable is set:
```
JAVA_HOME=.../Java/jdk1.x.x_xxx
```
$ cd llvm
$ git pull origin master
Also make sure `<jdk_root>/bin` is available in your `PATH` environmen variable.
$ cd tools/clang
$ git pull origin master
#### Maven
Install Maven and make sure both `M2_HOME` and `MAVEN_HOME` environment variables are set:
```
M2_HOME=.../apache-maven-x.x.x
MAVEN_HOME=.../apache-maven-x.x.x
```
$ cd ../../../../../build_debug
$ cmake -G Ninja -DLLVM_ENABLE_RTTI=ON ../llvm
$ ninja -j4 check-all
Also make sure `.../apache-maven-x.x.x/bin` is available in your `PATH` environmen variable.
$ cd ../build_release
$ cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RTTI=ON ../llvm
$ ninja -j4
### Building
# Update CMakeLists.txt symlink directory
# Update cmake/linux_package.cmake clang include path
# Update LLVM version in dockerfiles
Run CMake with these additional options:
```
-DBUILD_JAVA_LANGUAGE_PACKAGE=ON
```
#### Remarks
## Enable Python Language Support
* Boost lib dir: rename library directory for your system (e.g.: 'lib32-msvc-12.0') to 'lib'
### Required dependencies
### Tagging
#### WinRAR (for Windows only)
$ git tag -a VERSION_NUMBER -m "DESCRIPTION"
$ git push --tags
### Building
### Loader gif creation from png sequence
Run CMake with these additional options:
```
-DBUILD_PYTHON_LANGUAGE_PACKAGE=ON
```
// from png sequence
convert -delay 3 -loop 0 souretrail_*.png souretrail.gif
## Packaging
// less colors
gifsicle --colors 255 souretrail.gif > color.gif
### Windows
// crop size
gifsicle --crop 0,5+0x-5 color.gif > crop.gif
#### Required Tools
// add transparency
gifsicle --unoptimize --disposal=previous --transparent="#FFFFFF" crop.gif > trans.gif
##### Visual Studio
// resize
gifsicle --resize-height 18 trans.gif > loader.gif
##### Wix 3.11
##### Wix extension for Visual Studio
##### WinRAR
Make sure to append these directories to your `PATH` environment variable:
* VisualStudio/Common7/Tools
* VisualStudio/Common7/IDE
* .../Microsoft SDKs/Windows/v7.1A/Bin (for uuidgen in deploy script)
* .../WiX Toolset v3.11/bin
* .../WinRAR
Run `./script/deploy_windows.sh` script which will generate 32bit/64bit builds and packages these into a portable `.zip` file and a Wix-based Windows installer, each.
### macOS
After building, run the `bundle_install.sh` script within the build directory which will create a `Sourcetrail.app` bundle and generate a `Sourcetrail_<version>.dmg` container.
### Linux
Run `./script/buildonly.sh package`
# How to Run the Tests
The automated test suite of Sourcetrail is powered by [Catch2](https://github.com/catchorg/Catch2). To run the tests, simply execute the `Sourcetrail_test` binary. Before executing, please make sure to set the working directory to `./bin/test`.
# License
Sourcetrail is licensed under the [GNU General Public License Version 3](LICENSE.txt).
# Trademark
The "Sourcetrail" name is a trademark owned by Coati Software and is not included within the assets licensed under the GNU GPLv3.
+45
View File
@@ -0,0 +1,45 @@
# Sponsors
Sponsors [via Patreon](https://www.patreon.com/sourcetrail).
## Legendary Coatis
* David Manouchehri
* Manik Singhal
* Mario van Beek
* Timothee Besset
## Super Coatis
* Alexis Jeandet
* Edward Gibbs
* Jonathan Nemo
* Louis St-Amour
* Mario Lioni
* Simon Pintarelli
## Regular Coatis
* Alex B
* Andreas
* Anton
* Daniel Nissenbaum
* Frederic Simonis
* IndustrialRobot
* Jason Stevens
* Jeffrey Hofer
* John Borland
* kale
* Matěj Týč
* Matt Alexander
* Nakul Dhotre
* Nathan
* Nathan Loofbourrow
* Rui Pires
* Sam Tuke
* Stephan Roslen
* Traxes
* Werner de Groot
* Yang, Wenbo
_Note: This file will be updated at the beginning of each month._
+35 -17
View File
@@ -2,6 +2,7 @@
<config>
<window>
<background>#494949</background>
<separator>#CCCCCC</separator>
<scrollbar>
<background>transparent</background>
@@ -284,9 +285,6 @@
<typedef>
<like>type</like>
</typedef>
<template_parameter>
<like>type</like>
</template_parameter>
<type_parameter>
<like>type</like>
</type_parameter>
@@ -483,6 +481,14 @@
<normal>#797979</normal>
</default>
<type_use>
<like>default</like>
</type_use>
<inheritance>
<like>default</like>
</inheritance>
<override>
<normal>#BA5ECC</normal>
</override>
@@ -496,33 +502,24 @@
<normal>#00A0B6</normal>
</use>
<template_argument>
<normal>#D93D5F</normal>
</template_argument>
<type_argument>
<like>template_argument</like>
<normal>#D93D5F</normal>
</type_argument>
<template_default_argument>
<like>template_argument</like>
</template_default_argument>
<template_specialization>
<like>template_argument</like>
<like>type_argument</like>
</template_specialization>
<template_member_specialization>
<like>template_argument</like>
</template_member_specialization>
<include>
<normal>#4E82F6</normal>
</include>
<import>
<normal>#4E82F6</normal>
<like>include</like>
</import>
<macro_use>
<normal>#4E82F6</normal>
<like>include</like>
</macro_use>
<annotation_use>
<normal>#4E82F6</normal>
<like>include</like>
</annotation_use>
<aggregation>
@@ -593,4 +590,25 @@
<icon_disabled>#666666</icon_disabled>
</button>
</screen_search>
<custom_trail>
<background>#494949</background>
<alt_background>#808080</alt_background>
<separator>#CCCCCC</separator>
<text>#FFFFFF</text>
<text_disabled>darkgrey</text_disabled>
<background_disabled>#696969</background_disabled>
<button>
<default>
<text>#FFFFFF</text>
<background>#494949</background>
<border>#FFFFFF</border>
</default>
<hover>
<text>#494949</text>
<background>#FFFFFF</background>
<border>#FFFFFF</border>
</hover>
</button>
</custom_trail>
</config>
+36 -18
View File
@@ -2,6 +2,7 @@
<config>
<window>
<background>white</background>
<separator>#A2A2A2</separator>
<scrollbar>
<background>transparent</background>
@@ -276,9 +277,6 @@
<typedef>
<like>type</like>
</typedef>
<template_parameter>
<like>type</like>
</template_parameter>
<type_parameter>
<like>type</like>
</type_parameter>
@@ -457,46 +455,45 @@
<normal>#878787</normal>
</default>
<type_use>
<like>default</like>
</type_use>
<inheritance>
<like>default</like>
</inheritance>
<override>
<normal>#A37ACC</normal>
</override>
<call>
<normal>#F4BC3D</normal>
<trail_focus>#878787</trail_focus>
<trail_focus>#F56B3D</trail_focus>
</call>
<use>
<normal>#4B9FC4</normal>
</use>
<template_argument>
<normal>#CF6B7C</normal>
</template_argument>
<type_argument>
<like>template_argument</like>
<like>#CF6B7C</like>
</type_argument>
<template_default_argument>
<like>template_argument</like>
</template_default_argument>
<template_specialization>
<like>template_argument</like>
<like>type_argument</like>
</template_specialization>
<template_member_specialization>
<like>template_argument</like>
</template_member_specialization>
<include>
<normal>#719660</normal>
</include>
<import>
<normal>#719660</normal>
<like>include</like>
</import>
<macro_use>
<normal>#719660</normal>
<like>include</like>
</macro_use>
<annotation_use>
<normal>#719660</normal>
<like>include</like>
</annotation_use>
<aggregation>
@@ -567,4 +564,25 @@
<icon_disabled>#CECECE</icon_disabled>
</button>
</screen_search>
<custom_trail>
<background>white</background>
<alt_background>#F5F5F5</alt_background>
<separator>#C0C0C0</separator>
<text>black</text>
<text_disabled>#A0A0A0</text_disabled>
<background_disabled>#F2F2F2</background_disabled>
<button>
<default>
<text>black</text>
<background>white</background>
<border>lightgray</border>
</default>
<hover>
<text>white</text>
<background>#2D3C86</background>
<border>lightgray</border>
</hover>
</button>
</custom_trail>
</config>
+35 -17
View File
@@ -2,6 +2,7 @@
<config>
<window>
<background>#272728</background>
<separator>#CCC</separator>
<scrollbar>
<background>transparent</background>
@@ -279,9 +280,6 @@
<typedef>
<like>type</like>
</typedef>
<template_parameter>
<like>type</like>
</template_parameter>
<type_parameter>
<like>type</like>
</type_parameter>
@@ -460,6 +458,14 @@
<normal>#797979</normal>
</default>
<type_use>
<like>default</like>
</type_use>
<inheritance>
<like>default</like>
</inheritance>
<override>
<normal>#8A5A94</normal>
</override>
@@ -473,33 +479,24 @@
<normal>#2D6A8C</normal>
</use>
<template_argument>
<normal>#C14057</normal>
</template_argument>
<type_argument>
<like>template_argument</like>
<normal>#C14057</normal>
</type_argument>
<template_default_argument>
<like>template_argument</like>
</template_default_argument>
<template_specialization>
<like>template_argument</like>
<like>type_argument</like>
</template_specialization>
<template_member_specialization>
<like>template_argument</like>
</template_member_specialization>
<include>
<normal>#247368</normal>
</include>
<import>
<normal>#247368</normal>
<like>include</like>
</import>
<macro_use>
<normal>#247368</normal>
<like>include</like>
</macro_use>
<annotation_use>
<normal>#247368</normal>
<like>include</like>
</annotation_use>
<aggregation>
@@ -570,4 +567,25 @@
<icon_disabled>#555555</icon_disabled>
</button>
</screen_search>
<custom_trail>
<background>#272728</background>
<alt_background>#555555</alt_background>
<separator>#CCC</separator>
<text>#F7F7F7</text>
<text_disabled>darkgrey</text_disabled>
<background_disabled>#474748</background_disabled>
<button>
<default>
<text>#F7F7F7</text>
<background>#272728</background>
<border>#F7F7F7</border>
</default>
<hover>
<text>#272728</text>
<background>#F7F7F7</background>
<border>#F7F7F7</border>
</hover>
</button>
</custom_trail>
</config>
@@ -15,5 +15,5 @@
<recent_project>./projects/javaparser/javaparser.srctrlprj</recent_project>
</recent_projects>
</user>
<version>7</version>
<version>8</version>
</config>
+1 -1
View File
@@ -228,7 +228,7 @@
#code_area {
background-color: <color:code/snippet/background>;
color: <color:code/snippet/syntax/normal>;
color: <color:code/snippet/syntax/text>;
selection-color: <color:code/snippet/selection/text>;
selection-background-color: <color:code/snippet/selection/background>;
}
@@ -0,0 +1,58 @@
* {
color: <color:custom_trail/text>;
}
#panelA {
background: <color:custom_trail/background>;
}
#panelB, #panelB2 {
background: <color:custom_trail/alt_background>;
border-top: 1px solid <color:custom_trail/separator>;
border-bottom: 1px solid <color:custom_trail/separator>;
}
#panelB2 {
border-bottom: none
}
#search_box_container {
border-color: <color:custom_trail/separator>;
border-radius: 8px;
border-width: 1px;
}
#search_box_container:disabled {
background: <color:custom_trail/background_disabled>;
border-color: <color:custom_trail/background_disabled>;
}
#search_box:disabled {
color: <color:custom_trail/text_disabled>;
}
#button, #button_small {
background: <color:custom_trail/button/default/background>;
border: 1px solid <color:custom_trail/button/default/border>;
border-radius: 8px;
color: <color:custom_trail/button/default/text>;
padding: 3px 8px 2px;
font-size: <setting:font_size+1>px;
min-width: 5em;
}
#button_small {
border-radius: 6px;
font-size: <setting:font_size-1>px;
min-width: 4em;
}
#button:hover, #button_small:hover {
background: <color:custom_trail/button/hover/background>;
border-color: <color:custom_trail/button/hover/border>;
color: <color:custom_trail/button/hover/text>;
}
#error {
color: red;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

-30
View File
@@ -1,30 +0,0 @@
#title {
margin-left: 265px;
}
#licenseOption {
font-weight: bold;
}
#licenseField {
font-family: "<setting:font_name>";
font-size: 11px;
height: 200px;
padding: 5px;
width: 470px;
}
#licenseField:disabled {
background: #F5F5F5;
}
#licenseError {
color: red;
}
QTextEdit {
background-color: rgba(255, 255, 255, 200);
border-radius: 10px;
border: 1px solid lightgrey;
color: black;
}
+4 -4
View File
@@ -11,7 +11,7 @@
background-color: transparent;
}
QWidget#search_box_container {
#search_box_container {
background: <color:search/field/background>;
border: 2px solid <color:search/field/border>;
border-bottom-left-radius: 12px;
@@ -20,19 +20,19 @@ QWidget#search_box_container {
margin-right: 2px;
}
QLineEdit#search_box {
#search_box {
background-color: transparent;
border: none;
color: <color:search/field/text>;
selection-background-color: <color:search/field/highlight>;
}
QWidget#search_box_highlight {
#search_box_highlight {
background-color: <color:search/field/highlight>;
border: none;
}
QAbstractItemView#search_box_popup {
#search_box_popup {
background-color: <color:search/popup/background>;
border: 1px solid <color:search/popup/line>;
color: <color:search/popup/text>;
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

+7 -3
View File
@@ -1,14 +1,18 @@
#projectButton {
#projectButton, #infoButton {
background: white;
border: 1px solid lightgray;
border-radius: 8px;
color: black;
padding: 3px 5px 2px;
padding: 4px 5px 3px;
font-size: 14px;
min-width: 6em;
}
#projectButton:hover {
#infoButton {
padding: 4px 15px 3px;
}
#projectButton:hover, #infoButton:hover {
color: white;
background: #2D3F85;
}
@@ -24,5 +24,5 @@
background-color: <color:code/snippet/background>;
border-bottom: 1px solid <color:code/file/background>;
padding: 3px;
color: <color:code/snippet/syntax/normal>;
color: <color:code/snippet/syntax/text>;
}
@@ -1,47 +0,0 @@
Copyright (C) 1999-2013,2014,2015 Jack Lloyd
2001 Peter J Jones
2004-2007 Justin Karneges
2004 Vaclav Ovsik
2005 Matthew Gregan
2005-2006 Matt Johnston
2006 Luca Piccarreta
2007 Yves Jerschow
2007-2008 FlexSecure GmbH
2007-2008 Technische Universitat Darmstadt
2007-2008,2010,2014 Falko Strenzke
2007-2008 Martin Doering
2007 Manuel Hartl
2007 Christoph Ludwig
2007 Patrick Sona
2008 Copyright Projet SECRET, INRIA, Rocquencourt
2008 Bhaskar Biswas and Nicolas Sendrier
2008 Google Inc.
2010 Olivier de Gaalon
2012 Vojtech Kral
2012-2014 Markus Wanner
2013 Joel Low
2014 cryptosource GmbH
2014 Andrew Moon
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions, and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,23 @@
Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
@@ -4,7 +4,7 @@ LLVM Release License
University of Illinois/NCSA
Open Source License
Copyright (c) 2007-2018 University of Illinois at Urbana-Champaign.
Copyright (c) 2007-2019 University of Illinois at Urbana-Champaign.
All rights reserved.
Developed by:
@@ -1,3 +1,13 @@
GENERAL
-------
Qt is available under a commercial license with various pricing models and packages that meet a variety of needs. Commercial Qt license keeps your code proprietary where only you can control and monetize on your end products development, user experience and distribution. You also get great perks like additional functionality, productivity enhancing tools, world-class support and a close strategic relationship with The Qt Company to make sure your product and development goals are met.
Qt has been created under the belief of open development and providing freedom and choice to developers. To support that, The Qt Company also licenses Qt under open source licenses, where most of the functionality is available under LGPLv3. It should be noted that the tools as well as some add-on components are available only under GPLv3. In order to preserve the true meaning of open development and uphold the spirit of free software, it is imperative that the rules and regulations of open source licenses are followed. If you use Qt under open-source licenses, you need to make sure that you comply with all the licenses of the components you use.
Qt also contains some 3rd party components that are available under different open-source licenses. Please refer to the documentation for more details on 3rd party licenses used in Qt.
GPLv3 and LGPLv3
----------------
-444
View File
@@ -1,444 +0,0 @@
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1031\deflangfe1031\themelang1031\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}
{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}
{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f40\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\f42\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f59\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f60\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}
{\f62\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f63\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f64\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f65\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}
{\f66\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f67\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f379\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f380\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}
{\f382\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f383\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f386\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f387\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}
{\f409\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f410\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f412\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f413\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
{\f416\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f417\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}
{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}
{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp
\f31506\fs22\lang1031\langfe1033\langfenp1033 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1031\langfe1033\cgrid\langnp1031\langfenp1033 \snext0 \sqformat \spriority0 \styrsid10694613 Normal;}{\*\cs10
\additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1031\langfe1033\cgrid\langnp1031\langfenp1033 \snext11 \ssemihidden \sunhideused \sqformat Normal Table;}{
\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1031\langfe1033\cgrid\langnp1031\langfenp1033 \snext15 \sqformat \spriority1 \styrsid13262607
No Spacing;}}{\*\listtable{\list\listtemplateid17829778\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}
\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
\fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
\fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
\fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }
{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel
\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23
\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0
\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid32462032}{\list\listtemplateid-1869340118
\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23
\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0
\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative
\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360
\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid58018902}{\list\listtemplateid1962457952\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative
\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid196238433}{\list\listtemplateid-1642172790\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1063259768}{\list\listtemplateid-285328028\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1391463661}{\list\listtemplateid-1311624652\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1461073771}{\list\listtemplateid-82662746\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid2092114155}}{\*\listoverridetable{\listoverride\listid32462032\listoverridecount0\ls1}{\listoverride\listid1391463661\listoverridecount0\ls2}
{\listoverride\listid1063259768\listoverridecount0\ls3}{\listoverride\listid1461073771\listoverridecount0\ls4}{\listoverride\listid58018902\listoverridecount0\ls5}{\listoverride\listid196238433\listoverridecount0\ls6}{\listoverride\listid2092114155
\listoverridecount0\ls7}}{\*\rsidtbl \rsid8066695\rsid10694613\rsid13262607}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Malte}{\operator Malte}
{\creatim\yr2019\mo4\dy8\hr18\min10}{\revtim\yr2019\mo4\dy23\hr15\min44}{\version2}{\edmins0}{\nofpages5}{\nofwords1729}{\nofchars10895}{\nofcharsws12599}{\vern32859}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}
\paperw11906\paperh16838\margl1417\margr1417\margt1417\margb1134\gutter0\ltrsect
\deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves1\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0
\showxmlerrors1\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1417\dgvorigin1417\dghshow1\dgvshow1
\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct
\asianbrkrule\rsidroot13262607\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0
{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid10694613\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}
{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}
{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9
\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13262607 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0
\f31506\fs22\lang1031\langfe1033\cgrid\langnp1031\langfenp1033 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid13262607\charrsid13262607 Sourcetrail
\par Software License Agreement (\'93AGREEMENT\'94)
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid8066695 Last date of change: 2019-04-23}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid13262607\charrsid13262607
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par BY INSTALLING OR USING THIS SOFTWARE, YOU ARE BECOMING A PARTY TO, AND ARE CONSENTING TO BE BOUND BY, THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, DO NOT INSTALL OR USE THIS SOFTWARE.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 1. DEFINITIONS
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par "SOFTWARE" means:
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar
\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 a ve
rsion of the cross-platform source code explorer known as Sourcetrail in executable form. The version is defined by the two leading numbers of the version string (e.g. the version of Sourcetrail 2017.1.x is version 2017.1); and}{\rtlch\fcs1 \af31507
\ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 documentation for that version of Sourcetrail; and}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
minor updates included in software maintenance which are indicated by an increase in the digits that follow the first two leading numbers of the version string (e.g. the update from Sourcetrail 2017.1.0 to Sourcetrail 2017.1.1 is a minor update).
\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 "LICENSE" means:
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar
\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
the permission to use and distribute the SOFTWARE as defined by the following sections of this document. The permissions granted especially depend on whether a SOFTWARE Non-Commercial License or a SOFTWARE Commercial License is agreed-upon.
\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 "LICENSOR" means:
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar
\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
Coati Software KG, having a place of business at Jakob-Haringer-Stra\'dfe 1/127, 5020 Salzburg, Austria.
\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 "LICENSEE" means:
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar
\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
the individual who purchased LICENSE(s) for the SOFTWARE;}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 the individual who was granted LICENSE(s) for the SOFTWARE by LICENSOR;}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 the company, corporation, organization, or legal entity that purchased LICENSE(s) for the SOFTWARE;}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 the company, corporation, organization, or legal entity that was granted LICENSE(s) for the SOFTWARE by LICENSOR.
\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 "PARTIES" means:
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar
\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin720\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
both LICENSOR and LICENSEE collectively.
\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 "AUTHORIZED USER" means:
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar
\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin720\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
the individual who is LICENSEE of the SOFTWARE. This individual is the only AUTHORIZED USER;}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 an employee who is nameable on demand and might at any time use the SOFT
WARE, of LICENSEE. Every AUTHORIZED USER known by name can be replaced by another user known by name only once in a month. From that time on, said first user must not use the SOFTWARE anymore and said second user may start to use the SOFTWARE. At no time
m
ay the simultaneous number of users known by name exceed the agreed-upon number of AUTHORIZED USER(s). For each LICENSE that has been acquired before May 23th 2018 every AUTHORIZED USER known by name can be replaced by another user known by name instantly
.
\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 "ACTIVATION KEY" means:
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar
\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin720\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
a document issued by LICENSOR that defines all parameters of the SOFTWARE Commercial License. Said document specifies the name of the licensed SOFTWARE, the name of LICENSEE, the license type, the agreed-upon number of AUTHORIZE
D USERS, the upper limit for the licensed SOFTWARE version, the end of the licensed usage period, and a hash-code. The combination of these values allows LICENSEE to unlock the full functionality of a genuine copy of the SOFTWARE for intended commercial u
se.
\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 2. GRANT
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par The SOFTWARE is handed over to LICENSEE for its intended use. The scope of the intended use permitted by this AGREEMENT depends on whether a SOFTWARE Non-Commercial License or a SOFTWARE Commercial License is agreed-upon. If a SOFTWARE Non-C
ommercial License is agreed-upon LICENSEE is allowed to use the SOFTWARE solely for non-commercial purposes. A purpose is non-commercial only if it is in no manner primarily intended for or directed toward commercial advantage or private monetary compensa
tion.
\par Examples of non-commercial purposes:
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar
\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin720\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
you are using the SOFTWARE to work on open-source projects for free;}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 you are a student and you are using the SOFTWARE for your academic projects;}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 you are using the SOFTWARE in your spare time to work on the desktop application of your local football club for free.
\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
Examples of commercial purposes, i.e. when you will need a Commercial License:
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar
\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls5\adjustright\rin0\lin720\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
you are using the SOFTWARE to work on open-source as well as on your company's projects;}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 you are a student and you are using the SOFTWARE for your work as a freelancer;}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 you are using the SOFTWARE in your spare time to work on the desktop application of your local football club and you are getting paid for that.
\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par Subject to the terms of this AGREEMENT, LICENSOR hereby grants LICENSEE a worldwide, non-transferable, non-exclusive, non-sub-licensable, limited LICENSE that allows:
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar
\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
LICENSEE to distribute (an) ACTIVATION KEY(s) to AUTHORIZED USER(s);}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 LICENSEE and AUTHORIZED USER(s) to install the SOFTWARE on any number of
computer PCs where potential use of the full functionality of the SOFTWARE is restricted exclusively to AUTHORIZED USER(s);}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 LICENSEE and AUTHORIZED USER(s) to use the command-line interface of the SOFTWARE without unlocking the full functionality of the SOFTWARE;}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 LICENSEE and AUTHORIZED USER(s) to use an ACTIVATION KEY to unlock the full functionality of the SOFTWARE for intended commercial use;}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 LICENSEE and AUTHORIZED USER(s) to truthfully declare their intend to solely use the SOFTWARE for non-comm
ercial purposes to unlock the full functionality of the SOFTWARE for intended non-commercial use;}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 AUTHORIZED USER(s) to apply any version of the unlocked SOFTWARE that specifies a version number less than or equal to the licensed product version denoted
in the ACTIVATION KEY to the permitted intended use. If the ACTIVATION KEY does not denote a licensed product version, "unlimited" licensed product version is assumed and all released product versions may be used. This permission is revoked at the end of
the licensed usage period denoted in the ACTIVATION KEY. If the ACTIVATION KEY does not denote the licensed usage period, "unlimited" licensed usage period is assumed and the SOFTWARE may be used perpetually;}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 LICENSEE to make a copy of the SOFTWARE for archival purposes provided the copy contains all of the proprietary notices of the SOFTWARE.
\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 3. RESTRICTIONS
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par LICENSEE and AUTHORIZED USER(s) will not, and will have no right to:
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar
\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin720\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
modify, translate, reverse engineer, decompile, disassemble (except to the extent applicable laws specifically prohibit such restriction), create derivative works based on, or otherwise attempt to discover the source code or underlying ideas or algorithms
of the SOFTWARE;}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 sell, rent, lease, distribute, or otherwise transfer rights to the SOFTWARE without prior written consent from LICENSOR;}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 remove any proprietary notices or labels from the SOFTWARE;}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607
\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af31507\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 distribute, use, or transfer an ACTIVATION KEY(s) that has been superseded by an ACTIVATION KEY(s) provided with software maintenance.
\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13262607 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 4. CONFIDENTIALITY
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par The SOFTWARE contains a feature that will automatically connect to LICENSOR's servers to check for a new program version. The data sent in this process contains NO POTENTIALLY SENSITIVE INFORMATION. The user can opt-out from this feature.
\par Unless a valid non-disclosure agreement exists between the Parties, in which case the terms of that non-disclosure agreement shall apply, the following terms shall: Exc
ept as necessary for its performance under the AGREEMENT or required by law, LICENSOR shall not disclose to anyone any information furnished by LICENSEE that is marked as confidential or proprietary.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 5. TITLE AND COPYRIGHT
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par Title, ownership rights, intel
lectual property rights, and copyright to the SOFTWARE, and any copies or portions thereof, shall remain in LICENSOR. The SOFTWARE is protected by European copyright directives, Austrian copyright laws as well as United States copyright laws and internati
onal treaty provisions.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 6. DISCLAIMER OF WARRANTY
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND. LICENSOR HEREBY DISCLAIMS ALL EXPRESS OR IMPLIED WARRANTIES, INCLUDING WITHOUT LIMITATION WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICU
LAR PURPOSE, AND NON-INFRINGEMENT. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS AGREEMENT. SOME U.S. STATES DO NOT ALLOW EXCLUSIONS OF AN IMPLIED WARRANTY, SO THIS DISCLAIMER MAY NOT APPLY TO LICENSEE. LICENSEE MAY HAVE OTHER LEGAL RI
GHTS THAT VARY FROM STATE TO STATE OR BY JURISDICTION.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 7. LIMITATION OF LIABILITY
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par L
ICENSEE ASSUMES THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. LICENSOR ASSUMES NO LIABILITY FOR THE COST OF ANY SERVICE OR REPAIR IF THE SOFTWARE IS DEFECTIVE. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, STRICT L
I
ABILITY, OR OTHERWISE, SHALL LICENSOR, OR ITS LICENSORS, SUPPLIERS OR RESELLERS, BE LIABLE TO LICENSEE OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PRO
F
ITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES. IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY DAMAGES IN EXCESS OF THE MONEY PAID FOR THE SOFTWARE, EVEN IF LICENSOR SHALL HAVE BEEN IN
F
ORMED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. FURTHERMORE, SOME U.S. STATES DO
NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION AND EXCLUSION MAY NOT APPLY TO LICENSEE.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 8. TERMINATION
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par The LICENSE granted herein shall be perpetual. If LICENSEE fails to comply with any of the terms of t
his AGREEMENT, this AGREEMENT and the rights granted herein will terminate immediately. As such the Non-Commercial LICENSE terminates automatically if the usage of SOFTWARE becomes commercial. LICENSOR may, at its sole discretion and at any time, terminat
e this AGREEMENT. On termination, LICENSEE must cease using and destroy all copies of the SOFTWARE.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 9. EXPORT CONTROLS
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par LICENSEE shall comply with all export laws, restrictions and regulations of the United States, the Directive 2009/428/EC of the European Parliament and of the Council and the Austrian Au\'df
enwirtschaftsgesetz 2011, BGBl I No. 26/2011. LICENSEE shall not export, re-export or otherwise transfer the SOFTWARE to any country for which the United States or the European Union or Austria maintains
an embargo, or to any person or entity on the U.S. Department of Treasury List of Specially Designated Nationals or the U.S. Department of Commerce Denied Persons List or Entity List. LICENSEE represents and warrants that LICENSEE is not located in, under
the control of, or a national or resident of any restricted country or on any such list.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 10. YOUR RESPONSIBILITIES.
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par LICENSEE agrees to immediately notify LICENSOR in writing of any misuse, misappropriation or unauthorized use, disclosure, display or c
opying of the SOFTWARE that may come to LICENSEE's attention. In addition, LICENSEE agrees to defend, indemnify and hold LICENSOR, its suppliers and any of its directors, officers, employees or affiliates of any of the foregoing harmless from any and all
claims resulting from or arising out of LICENSEE's use of the Software or breach of this AGREEMENT.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 11. THIRD PARTY CREDITS
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par Portions of the SOFTWARE utilize or include third party software and other copyrighted materials. Credits, licensing terms, and disclaimers for such materials are contained in the installation directory for the SOFTWARE, and are accessible via the \'93
3rd Party Licenses\'94 dialog for the SOFTWARE. LICENSEE agrees that use of such copyrighted materials is governed by their respective terms.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 12. SEVERABILITY
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par If a particular term of this AGREEMENT is not enforceable, the unenforceability of that term will not affect any other terms of this AGREEMENT.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 13. HEADINGS
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par The section headings used herein are for convenience only and do not affect the interpretation of this AGREEMENT.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 14. NO WAIVER
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par LICENSOR's failure to enforce or exercise any part of this AGREEMENT is not a waiver of that part.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 15. ENTIRE AGREEMENT
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par T
his AGREEMENT represents the complete agreement concerning this SOFTWARE between the PARTIES and supersedes all prior agreements and representations between them. It may be amended only in writing executed by both PARTIES. The inclusion of LICENSEE's own
t
erms and conditions is contradicted, unless their validity has explicitly been agreed to. LICENSOR reserves the exclusive right to update this AGREEMENT for new SOFTWARE versions. By using these new SOFTWARE versions the new AGREEMENT supersedes any older
one. Any action arising out of or relating to this AGREEMENT may be brought exclusively in Salzburg, Austria, and the PARTIES irrevocably consent to the jurisdiction of such courts and venue in Salzburg, Austria.
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607 CONTACT
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid13262607\charrsid13262607
\par If you have questions regarding this AGREEMENT, contact:
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid13262607 Coati Software KG
\par Jakob-Haringer-Stra\'dfe 1/127
\par 5020 Salzburg
\par Austria
\par
\par support@sourcetrail.com}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid10694613\charrsid13262607
\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8
72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7
2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b
44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7
065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000
00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08
84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc
52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353
bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468
656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c
070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7
29e245eb2b260a0238fd010000ffff0300504b030414000600080000002100e35a492797060000551b0000160000007468656d652f7468656d652f7468656d65
312e786d6cec594d6f1b4518be23f11f467b6f6327761a4775aad8b11b6852a2d82dea71bc3bde9d66766735334eea1b6a8f484888823850891b0704546a252e
e5d7048aa048fd0bbc33b3bbde89d72469235a417d48bcb3cfbcdf5f33be7aed5eccd0211192f2a4edd52fd73c44129f073409dbdead61ffd29a87a4c2498019
4f48db9b12e95ddb78ffbdab785d45242608f627721db7bd48a9747d6949fab08ce5659e9204de8db988b18247112e05021f01dd982d2dd76aab4b31a6898712
1c03d91d2ca894f8d21691344cbc8d9c7c8f018f4449bde03331d0c489bbc7808383ba86c8a9ec32810e316b7bc02ae04743724f798861a9e045dbab998fb7b4
717509af679b985ab0b7b4af6f3ed9be6c4370b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83aa569632cd467faddec9699640f6
eb3ced6ead596bb8f812fd9539995b9d4ea7d9ca64b1440dc87e6dcce1d76aab8dcd65076f4016df9cc3373a9bddeeaa8337208b5f9dc3f7afb4561b2ede8022
46938339b47668bf9f512f2063ceb62be16b005fab65f0190aa2a1082fcd62cc13b530d8627c978b3e203492614513a4a62919631f22b98be391a05873c0eb04
97ded8255fce2d696648fa82a6aaed7d9862c88a19bd97cf7e78f9ec093abefff4f8fecfc70f1e1cdfffc91272766de3242cef7af1dde77f3dfa04fdf9e4db17
0fbfacc6cb32feb71f3ffdf5972faa81903f33719e7ff5f8f7a78f9f7ffdd91fdf3fac806f0a3c2ac387342612dd2447689fc7a098b18a2b391989f3ed184698
96776c26a1c409d65c2ae8f754e4a06f4e31cbbce3c8d121ae056f0ba81f55c0eb93bb8ec083484c14ade07c238a1de02ee7acc345a5156e685e25330f274958
cd5c4ccab87d8c0fab787771e2f8b73749a172e661e928de8d8823e61ec389c221498842fa1d3f20a442bb3b943a76dda5bee0928f15ba435107d34a930ce9c8
89a6d9a66d1a835fa6553a83bf1ddbecde461dceaab4de22872e12b202b30ae187843966bc8e270ac755248738666583ef6015550939980abf8ceb49059e0e09
e3a81710686d15527c2440df92d36f602859956edf65d3d8450a450faa68ee60cecbc82d7ed08d709c5661073489cad80fe4018428467b5c55c177b99b21fa19
fc809385eebe4d89e3eed3abc12d1a3a22cd0244bf99086d45a8d54e058e69f24fe59851a8c7d6fa17578ea1003effe651854fdfd642bc093da92a13b64f94df
45b89345b7cb4540dffe9abb8527c91e81309f6f3cef4aeebb92ebfde74beea27c3e6ba19dd55628bb7a6eb053b19991e3c523f298323650534676a499922534
8aa00f8b7aa3392292e2cc9446f0352bec0e2e14d8ec4182ab8fa98a06114e61c2ae7b9a482833d2a144299770b433cb95b4351ea674650f864d7d64b0054162
b5cb03bbbca297f3934141c6b49bd09c3f73462b9ac05999ad5cc98882daafc2acae853a33b7ba11cdd43a875ba13238715e35582cac09130882b905acbc0a87
74cd1a4e26989140dbdd36dfdc2dc60b17e92219e180643ed27acffba86e9c94c78ab90c80d8a9f0913ee69d62b512b79626fb1adccee2a432bbc60276b9f75e
c74b7904cfbca413f7443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc3a116bec629785deaa10fb3106e877c256cd89f9acc26cb67de6ce58ab94950878b0a
6bf739859d3a900aa9b6b08c6c6898575908b04473b2f22f37c1ac17a5808df4579062650d82e18d490176745d4bc663e2abb2b34b2bda76f6312ba57ca28818
44c1111ab189d8c7e07e1daaa04f4025dc4d988aa01fe0264d5bdbbc728b739674e5fb2b83b3eb98a511cecaad4ed13c932ddce4712183792a8907ba55ca6e94
3bbf2a26e52f48957218ffcf54d1fd04ae0a5602ed011fee7205463a5fdb1e172ae25085d288fa7d019383a91d102d701b0baf21a8e046d9fc17e450ffb73967
6998b486139fdaa7211214fa918a04217b50964cf49d42ac9ef52e4b9265844c4495c495a9157b440e091bea1ab8aa7bbb87220875534db232607027e3cf7dce
326814ea21a79c6f4e0d297aafcd817f7bf2b1c90c4ab975d80c34b9fd0b112bbaaadd6fb6e7bdb7ac887e311bb31a795600b3522b686569ff8a229cb3d5da8a
35a7f17233170ebc38af312c1603510a173e48ff81fe4785cf880963dd50877c1f6a2b829f1a3431081b88ea4b76f040ba40dac5110c4e76d1069326654d9b8d
4eda6a79b3bee049b7e07bc2d85ab2b3f8fb9cc62e8633979d938b1769ecccc28eadedda425383674fa6282c8df3938c718cf95dabfcc3131fdd05476fc105ff
84296982097e55121846cf81c903487ecbd16cddf81b0000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f
7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f
2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e31
98720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d98505
28a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c02000013000000000000000000000000
00000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b0000000000000000000000
00002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c000000000000000000000000001402000074
68656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d0014000600080000002100e35a492797060000551b0000160000000000000000
0000000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000
0000000000000000009c0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000970a00000000}
{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;
\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7;
\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000
4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000a0e7
dba0daf9d401feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000105000000000000}}
-132
View File
@@ -1,132 +0,0 @@
Sourcetrail
Software License Agreement (“AGREEMENT”)
Last date of change: 2019-04-23
BY INSTALLING OR USING THIS SOFTWARE, YOU ARE BECOMING A PARTY TO, AND ARE CONSENTING TO BE BOUND BY, THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, DO NOT INSTALL OR USE THIS SOFTWARE.
1. DEFINITIONS
"SOFTWARE" means:
* a version of the cross-platform source code explorer known as Sourcetrail in executable form. The version is defined by the two leading numbers of the version string (e.g. the version of Sourcetrail 2017.1.x is version 2017.1); and
* documentation for that version of Sourcetrail; and
* minor updates included in software maintenance which are indicated by an increase in the digits that follow the first two leading numbers of the version string (e.g. the update from Sourcetrail 2017.1.0 to Sourcetrail 2017.1.1 is a minor update).
"LICENSE" means:
* the permission to use and distribute the SOFTWARE as defined by the following sections of this document. The permissions granted especially depend on whether a SOFTWARE Non-Commercial License or a SOFTWARE Commercial License is agreed-upon.
"LICENSOR" means:
* Coati Software KG, having a place of business at Jakob-Haringer-Straße 1/127, 5020 Salzburg, Austria.
"LICENSEE" means:
* the individual who purchased LICENSE(s) for the SOFTWARE;
* the individual who was granted LICENSE(s) for the SOFTWARE by LICENSOR;
* the company, corporation, organization, or legal entity that purchased LICENSE(s) for the SOFTWARE;
* the company, corporation, organization, or legal entity that was granted LICENSE(s) for the SOFTWARE by LICENSOR.
"PARTIES" means:
* both LICENSOR and LICENSEE collectively.
"AUTHORIZED USER" means:
* the individual who is LICENSEE of the SOFTWARE. This individual is the only AUTHORIZED USER;
* an employee who is nameable on demand and might at any time use the SOFTWARE, of LICENSEE. Every AUTHORIZED USER known by name can be replaced by another user known by name only once in a month. From that time on, said first user must not use the SOFTWARE anymore and said second user may start to use the SOFTWARE. At no time may the simultaneous number of users known by name exceed the agreed-upon number of AUTHORIZED USER(s). For each LICENSE that has been acquired before May 23th 2018 every AUTHORIZED USER known by name can be replaced by another user known by name instantly.
"ACTIVATION KEY" means:
* a document issued by LICENSOR that defines all parameters of the SOFTWARE Commercial License. Said document specifies the name of the licensed SOFTWARE, the name of LICENSEE, the license type, the agreed-upon number of AUTHORIZED USERS, the upper limit for the licensed SOFTWARE version, the end of the licensed usage period, and a hash-code. The combination of these values allows LICENSEE to unlock the full functionality of a genuine copy of the SOFTWARE for intended commercial use.
2. GRANT
The SOFTWARE is handed over to LICENSEE for its intended use. The scope of the intended use permitted by this AGREEMENT depends on whether a SOFTWARE Non-Commercial License or a SOFTWARE Commercial License is agreed-upon. If a SOFTWARE Non-Commercial License is agreed-upon LICENSEE is allowed to use the SOFTWARE solely for non-commercial purposes. A purpose is non-commercial only if it is in no manner primarily intended for or directed toward commercial advantage or private monetary compensation.
Examples of non-commercial purposes:
* you are using the SOFTWARE to work on open-source projects for free;
* you are a student and you are using the SOFTWARE for your academic projects;
* you are using the SOFTWARE in your spare time to work on the desktop application of your local football club for free.
Examples of commercial purposes, i.e. when you will need a Commercial License:
* you are using the SOFTWARE to work on open-source as well as on your company's projects;
* you are a student and you are using the SOFTWARE for your work as a freelancer;
* you are using the SOFTWARE in your spare time to work on the desktop application of your local football club and you are getting paid for that.
Subject to the terms of this AGREEMENT, LICENSOR hereby grants LICENSEE a worldwide, non-transferable, non-exclusive, non-sub-licensable, limited LICENSE that allows:
* LICENSEE to distribute (an) ACTIVATION KEY(s) to AUTHORIZED USER(s);
* LICENSEE and AUTHORIZED USER(s) to install the SOFTWARE on any number of computer PCs where potential use of the full functionality of the SOFTWARE is restricted exclusively to AUTHORIZED USER(s);
* LICENSEE and AUTHORIZED USER(s) to use the command-line interface of the SOFTWARE without unlocking the full functionality of the SOFTWARE;
* LICENSEE and AUTHORIZED USER(s) to use an ACTIVATION KEY to unlock the full functionality of the SOFTWARE for intended commercial use;
* LICENSEE and AUTHORIZED USER(s) to truthfully declare their intend to solely use the SOFTWARE for non-commercial purposes to unlock the full functionality of the SOFTWARE for intended non-commercial use;
* AUTHORIZED USER(s) to apply any version of the unlocked SOFTWARE that specifies a version number less than or equal to the licensed product version denoted in the ACTIVATION KEY to the permitted intended use. If the ACTIVATION KEY does not denote a licensed product version, "unlimited" licensed product version is assumed and all released product versions may be used. This permission is revoked at the end of the licensed usage period denoted in the ACTIVATION KEY. If the ACTIVATION KEY does not denote the licensed usage period, "unlimited" licensed usage period is assumed and the SOFTWARE may be used perpetually;
* LICENSEE to make a copy of the SOFTWARE for archival purposes provided the copy contains all of the proprietary notices of the SOFTWARE.
3. RESTRICTIONS
LICENSEE and AUTHORIZED USER(s) will not, and will have no right to:
* modify, translate, reverse engineer, decompile, disassemble (except to the extent applicable laws specifically prohibit such restriction), create derivative works based on, or otherwise attempt to discover the source code or underlying ideas or algorithms of the SOFTWARE;
* sell, rent, lease, distribute, or otherwise transfer rights to the SOFTWARE without prior written consent from LICENSOR;
* remove any proprietary notices or labels from the SOFTWARE;
* distribute, use, or transfer an ACTIVATION KEY(s) that has been superseded by an ACTIVATION KEY(s) provided with software maintenance.
4. CONFIDENTIALITY
The SOFTWARE contains a feature that will automatically connect to LICENSOR's servers to check for a new program version. The data sent in this process contains NO POTENTIALLY SENSITIVE INFORMATION. The user can opt-out from this feature.
Unless a valid non-disclosure agreement exists between the Parties, in which case the terms of that non-disclosure agreement shall apply, the following terms shall: Except as necessary for its performance under the AGREEMENT or required by law, LICENSOR shall not disclose to anyone any information furnished by LICENSEE that is marked as confidential or proprietary.
5. TITLE AND COPYRIGHT
Title, ownership rights, intellectual property rights, and copyright to the SOFTWARE, and any copies or portions thereof, shall remain in LICENSOR. The SOFTWARE is protected by European copyright directives, Austrian copyright laws as well as United States copyright laws and international treaty provisions.
6. DISCLAIMER OF WARRANTY
THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND. LICENSOR HEREBY DISCLAIMS ALL EXPRESS OR IMPLIED WARRANTIES, INCLUDING WITHOUT LIMITATION WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS AGREEMENT. SOME U.S. STATES DO NOT ALLOW EXCLUSIONS OF AN IMPLIED WARRANTY, SO THIS DISCLAIMER MAY NOT APPLY TO LICENSEE. LICENSEE MAY HAVE OTHER LEGAL RIGHTS THAT VARY FROM STATE TO STATE OR BY JURISDICTION.
7. LIMITATION OF LIABILITY
LICENSEE ASSUMES THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. LICENSOR ASSUMES NO LIABILITY FOR THE COST OF ANY SERVICE OR REPAIR IF THE SOFTWARE IS DEFECTIVE. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, STRICT LIABILITY, OR OTHERWISE, SHALL LICENSOR, OR ITS LICENSORS, SUPPLIERS OR RESELLERS, BE LIABLE TO LICENSEE OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES. IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY DAMAGES IN EXCESS OF THE MONEY PAID FOR THE SOFTWARE, EVEN IF LICENSOR SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. FURTHERMORE, SOME U.S. STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION AND EXCLUSION MAY NOT APPLY TO LICENSEE.
8. TERMINATION
The LICENSE granted herein shall be perpetual. If LICENSEE fails to comply with any of the terms of this AGREEMENT, this AGREEMENT and the rights granted herein will terminate immediately. As such the Non-Commercial LICENSE terminates automatically if the usage of SOFTWARE becomes commercial. LICENSOR may, at its sole discretion and at any time, terminate this AGREEMENT. On termination, LICENSEE must cease using and destroy all copies of the SOFTWARE.
9. EXPORT CONTROLS
LICENSEE shall comply with all export laws, restrictions and regulations of the United States, the Directive 2009/428/EC of the European Parliament and of the Council and the Austrian Außenwirtschaftsgesetz 2011, BGBl I No. 26/2011. LICENSEE shall not export, re-export or otherwise transfer the SOFTWARE to any country for which the United States or the European Union or Austria maintains an embargo, or to any person or entity on the U.S. Department of Treasury List of Specially Designated Nationals or the U.S. Department of Commerce Denied Persons List or Entity List. LICENSEE represents and warrants that LICENSEE is not located in, under the control of, or a national or resident of any restricted country or on any such list.
10. YOUR RESPONSIBILITIES.
LICENSEE agrees to immediately notify LICENSOR in writing of any misuse, misappropriation or unauthorized use, disclosure, display or copying of the SOFTWARE that may come to LICENSEE's attention. In addition, LICENSEE agrees to defend, indemnify and hold LICENSOR, its suppliers and any of its directors, officers, employees or affiliates of any of the foregoing harmless from any and all claims resulting from or arising out of LICENSEE's use of the Software or breach of this AGREEMENT.
11. THIRD PARTY CREDITS
Portions of the SOFTWARE utilize or include third party software and other copyrighted materials. Credits, licensing terms, and disclaimers for such materials are contained in the installation directory for the SOFTWARE, and are accessible via the “3rd Party Licenses” dialog for the SOFTWARE. LICENSEE agrees that use of such copyrighted materials is governed by their respective terms.
12. SEVERABILITY
If a particular term of this AGREEMENT is not enforceable, the unenforceability of that term will not affect any other terms of this AGREEMENT.
13. HEADINGS
The section headings used herein are for convenience only and do not affect the interpretation of this AGREEMENT.
14. NO WAIVER
LICENSOR's failure to enforce or exercise any part of this AGREEMENT is not a waiver of that part.
15. ENTIRE AGREEMENT
This AGREEMENT represents the complete agreement concerning this SOFTWARE between the PARTIES and supersedes all prior agreements and representations between them. It may be amended only in writing executed by both PARTIES. The inclusion of LICENSEE's own terms and conditions is contradicted, unless their validity has explicitly been agreed to. LICENSOR reserves the exclusive right to update this AGREEMENT for new SOFTWARE versions. By using these new SOFTWARE versions the new AGREEMENT supersedes any older one. Any action arising out of or relating to this AGREEMENT may be brought exclusively in Salzburg, Austria, and the PARTIES irrevocably consent to the jurisdiction of such courts and venue in Salzburg, Austria.
CONTACT
If you have questions regarding this AGREEMENT, contact:
Coati Software KG
Jakob-Haringer-Straße 1/127
5020 Salzburg
Austria
support@sourcetrail.com
@@ -81,13 +81,6 @@
<recent_project><!-- STRING: recent project path --></recent_project>
</recent_projects>
<license>
<license><!-- STRING: the license key --></license>
<non_commercial_use><!-- BOOL: if used non-commercially --></non_commercial_use>
</license>
<accepted_eula_version><!-- INTEGER: last accepted eula version --></accepted_eula_version>
<token><!-- UUID: identifier for this user --></token>
<update_check>
@@ -17,7 +17,7 @@
</description>
<source_groups>
<source_group_7a9e75fc-2cad-42d5-8c5b-c86d02f7b4e4>
<java_standard>8</java_standard>
<java_standard>12</java_standard>
<name>Javaparser Source Group</name>
<source_extensions>
<source_extension>.java</source_extension>
@@ -13,7 +13,6 @@ TicTacToe::~TicTacToe() {
Reset();
}
bool TicTacToe::Start() {
Reset();
io::stringOut("Tic Tac Toe\n\n[1] Human\n[2] Computer\n[3] Quit\n\n");
@@ -1,567 +0,0 @@
FILE: b2BlockAllocator.cpp
FILE: b2BlockAllocator.h
FILE: b2Settings.h
FILE: stddef.h non-indexed
FILE: corecrt.h non-indexed
FILE: vcruntime.h non-indexed
FILE: sal.h non-indexed
FILE: concurrencysal.h non-indexed
FILE: vadefs.h non-indexed
FILE: assert.h non-indexed
FILE: float.h non-indexed
FILE: limits.h non-indexed
FILE: string.h non-indexed
FILE: corecrt_memory.h non-indexed
FILE: corecrt_memcpy_s.h non-indexed
FILE: errno.h non-indexed
FILE: vcruntime_string.h non-indexed
FILE: corecrt_wstring.h non-indexed
SYMBOL_MACRO: B2_BLOCK_ALLOCATOR_H [b2BlockAllocator.h <20:9 20:28>]
SYMBOL_MACRO: B2_SETTINGS_H [b2Settings.h <20:9 20:21>]
SYMBOL_MACRO: b2DEBUG [b2Settings.h <27:10 27:16>]
SYMBOL_MACRO: B2_NOT_USED [b2Settings.h <30:9 <30:9 30:19> 30:33>]
SYMBOL_MACRO: b2Assert [b2Settings.h <31:9 <31:9 31:16> 31:28>]
SYMBOL_MACRO: b2_maxFloat [b2Settings.h <42:9 <42:9 42:19> 42:21>]
SYMBOL_MACRO: b2_epsilon [b2Settings.h <43:9 <43:9 43:18> 43:20>]
SYMBOL_MACRO: b2_pi [b2Settings.h <44:9 <44:9 44:13> 44:16>]
SYMBOL_MACRO: b2_maxManifoldPoints [b2Settings.h <54:9 <54:9 54:28> 54:29>]
SYMBOL_MACRO: b2_maxPolygonVertices [b2Settings.h <58:9 <58:9 58:29> 58:30>]
SYMBOL_MACRO: b2_aabbExtension [b2Settings.h <63:9 <63:9 63:24> 63:26>]
SYMBOL_MACRO: b2_aabbMultiplier [b2Settings.h <68:9 <68:9 68:25> 68:27>]
SYMBOL_MACRO: b2_linearSlop [b2Settings.h <72:9 <72:9 72:21> 72:24>]
SYMBOL_MACRO: b2_angularSlop [b2Settings.h <76:9 <76:9 76:22> 76:47>]
SYMBOL_MACRO: b2_polygonRadius [b2Settings.h <81:9 <81:9 81:24> 81:47>]
SYMBOL_MACRO: b2_maxSubSteps [b2Settings.h <84:9 <84:9 84:22> 84:25>]
SYMBOL_MACRO: b2_maxTOIContacts [b2Settings.h <90:9 <90:9 90:25> 90:28>]
SYMBOL_MACRO: b2_velocityThreshold [b2Settings.h <94:9 <94:9 94:28> 94:30>]
SYMBOL_MACRO: b2_maxLinearCorrection [b2Settings.h <98:9 <98:9 98:30> 98:32>]
SYMBOL_MACRO: b2_maxAngularCorrection [b2Settings.h <102:9 <102:9 102:31> 102:55>]
SYMBOL_MACRO: b2_maxTranslation [b2Settings.h <106:9 <106:9 106:25> 106:28>]
SYMBOL_MACRO: b2_maxTranslationSquared [b2Settings.h <107:9 <107:9 107:32> 107:71>]
SYMBOL_MACRO: b2_maxRotation [b2Settings.h <111:9 <111:9 111:22> 111:39>]
SYMBOL_MACRO: b2_maxRotationSquared [b2Settings.h <112:9 <112:9 112:29> 112:63>]
SYMBOL_MACRO: b2_baumgarte [b2Settings.h <117:9 <117:9 117:20> 117:24>]
SYMBOL_MACRO: b2_toiBaugarte [b2Settings.h <118:9 <118:9 118:22> 118:26>]
SYMBOL_MACRO: b2_timeToSleep [b2Settings.h <124:9 <124:9 124:22> 124:26>]
SYMBOL_MACRO: b2_linearSleepTolerance [b2Settings.h <127:9 <127:9 127:31> 127:33>]
SYMBOL_MACRO: b2_angularSleepTolerance [b2Settings.h <130:9 <130:9 130:32> 130:55>]
SYMBOL_TYPEDEF: int8 [b2Settings.h <33:21 33:24>]
SYMBOL_BUILTIN_TYPE: signed char
SYMBOL_TYPEDEF: int16 [b2Settings.h <34:22 34:26>]
SYMBOL_BUILTIN_TYPE: short
SYMBOL_TYPEDEF: int32 [b2Settings.h <35:20 35:24>]
SYMBOL_BUILTIN_TYPE: int
SYMBOL_TYPEDEF: uint8 [b2Settings.h <36:23 36:27>]
SYMBOL_BUILTIN_TYPE: unsigned char
SYMBOL_TYPEDEF: uint16 [b2Settings.h <37:24 37:29>]
SYMBOL_BUILTIN_TYPE: unsigned short
SYMBOL_TYPEDEF: uint32 [b2Settings.h <38:22 38:27>]
SYMBOL_BUILTIN_TYPE: unsigned int
SYMBOL_TYPEDEF: float32 [b2Settings.h <39:15 39:21>]
SYMBOL_BUILTIN_TYPE: float
SYMBOL_TYPEDEF: float64 [b2Settings.h <40:16 40:22>]
SYMBOL_BUILTIN_TYPE: double
SYMBOL_FUNCTION: void * b2Alloc(int32) [b2Settings.h <135:1 <135:7 135:13> 135:25>]
SYMBOL_BUILTIN_TYPE: void
SYMBOL_FUNCTION: void b2Free(void *) [b2Settings.h <138:1 <138:6 138:11> 138:22>]
SYMBOL_FUNCTION: void b2Log(const char *) [b2Settings.h <141:1 <141:6 141:10> 141:35>]
SYMBOL_BUILTIN_TYPE: char
SYMBOL_STRUCT: b2Version [b2Settings.h <145:1 <145:8 145:16> 150:1>]
SYMBOL_FIELD: public int32 b2Version::major [b2Settings.h <147:8 147:12>]
SYMBOL_FIELD: public int32 b2Version::minor [b2Settings.h <148:8 148:12>]
SYMBOL_FIELD: public int32 b2Version::revision [b2Settings.h <149:8 149:15>]
SYMBOL_GLOBAL_VARIABLE: b2Version b2_version [b2Settings.h <153:18 153:27>]
SYMBOL_GLOBAL_VARIABLE: const int32 b2_chunkSize [b2BlockAllocator.h <24:13 24:24>]
SYMBOL_GLOBAL_VARIABLE: const int32 b2_maxBlockSize [b2BlockAllocator.h <25:13 25:27>]
SYMBOL_GLOBAL_VARIABLE: const int32 b2_blockSizes [b2BlockAllocator.h <26:13 26:25>]
SYMBOL_GLOBAL_VARIABLE: const int32 b2_chunkArrayIncrement [b2BlockAllocator.h <27:13 27:34>]
SYMBOL_STRUCT: b2Block [b2BlockAllocator.cpp <50:1 <50:8 50:14> 53:1>]
SYMBOL_STRUCT: b2Block [b2BlockAllocator.h <29:8 29:14>]
SYMBOL_STRUCT: b2Chunk [b2BlockAllocator.cpp <44:1 <44:8 44:14> 48:1>]
SYMBOL_STRUCT: b2Chunk [b2BlockAllocator.h <30:8 30:14>]
QUALIFIER: b2BlockAllocator [b2BlockAllocator.cpp <24:7 24:22>]
QUALIFIER: b2BlockAllocator [b2BlockAllocator.cpp <41:7 41:22>]
QUALIFIER: b2BlockAllocator [b2BlockAllocator.cpp <42:6 42:21>]
QUALIFIER: b2BlockAllocator [b2BlockAllocator.cpp <55:1 55:16>]
QUALIFIER: b2BlockAllocator [b2BlockAllocator.cpp <87:1 87:16>]
QUALIFIER: b2BlockAllocator [b2BlockAllocator.cpp <97:7 97:22>]
QUALIFIER: b2BlockAllocator [b2BlockAllocator.cpp <155:6 155:21>]
QUALIFIER: b2BlockAllocator [b2BlockAllocator.cpp <204:6 204:21>]
SYMBOL_CLASS: b2BlockAllocator [b2BlockAllocator.h <35:1 <35:7 35:22> 60:1>]
SYMBOL_METHOD: public void b2BlockAllocator::b2BlockAllocator() [b2BlockAllocator.cpp <55:1 <55:19 55:34> 85:1>]
SYMBOL_METHOD: public void b2BlockAllocator::b2BlockAllocator() [b2BlockAllocator.h <38:2 <38:2 38:17> 38:19>]
SYMBOL_METHOD: public void b2BlockAllocator::~b2BlockAllocator() [b2BlockAllocator.cpp <87:1 <87:19 87:35> 95:1>]
SYMBOL_METHOD: public void b2BlockAllocator::~b2BlockAllocator() [b2BlockAllocator.h <39:2 <39:2 39:18> 39:20>]
SYMBOL_METHOD: public void * b2BlockAllocator::Allocate(int32) [b2BlockAllocator.cpp <97:1 <97:25 97:32> 153:1>]
SYMBOL_METHOD: public void * b2BlockAllocator::Allocate(int32) [b2BlockAllocator.h <42:2 <42:8 42:15> 42:27>]
SYMBOL_METHOD: public void b2BlockAllocator::Free(void *, int32) [b2BlockAllocator.cpp <155:1 <155:24 155:27> 202:1>]
SYMBOL_METHOD: public void b2BlockAllocator::Free(void *, int32) [b2BlockAllocator.h <45:2 <45:7 45:10> 45:31>]
SYMBOL_METHOD: public void b2BlockAllocator::Clear() [b2BlockAllocator.cpp <204:1 <204:24 204:28> 215:1>]
SYMBOL_METHOD: public void b2BlockAllocator::Clear() [b2BlockAllocator.h <47:2 <47:7 47:11> 47:13>]
SYMBOL_FIELD: private b2Chunk * b2BlockAllocator::m_chunks [b2BlockAllocator.h <51:11 51:18>]
SYMBOL_FIELD: private int32 b2BlockAllocator::m_chunkCount [b2BlockAllocator.h <52:8 52:19>]
SYMBOL_FIELD: private int32 b2BlockAllocator::m_chunkSpace [b2BlockAllocator.h <53:8 53:19>]
SYMBOL_FIELD: private b2Block * [] b2BlockAllocator::m_freeLists [b2BlockAllocator.h <55:11 55:21>]
SYMBOL_FIELD: private static int32 [] b2BlockAllocator::s_blockSizes [b2BlockAllocator.cpp <24:25 24:36>]
SYMBOL_FIELD: private static int32 [] b2BlockAllocator::s_blockSizes [b2BlockAllocator.h <57:15 57:26>]
SYMBOL_FIELD: private static uint8 [] b2BlockAllocator::s_blockSizeLookup [b2BlockAllocator.cpp <41:25 41:41>]
SYMBOL_FIELD: private static uint8 [] b2BlockAllocator::s_blockSizeLookup [b2BlockAllocator.h <58:15 58:31>]
SYMBOL_FIELD: private static bool b2BlockAllocator::s_blockSizeLookupInitialized [b2BlockAllocator.cpp <42:24 42:51>]
SYMBOL_FIELD: private static bool b2BlockAllocator::s_blockSizeLookupInitialized [b2BlockAllocator.h <59:14 59:41>]
SYMBOL_BUILTIN_TYPE: bool
SYMBOL_METHOD: public void b2BlockAllocator::b2BlockAllocator(const b2BlockAllocator &) [b2BlockAllocator.h <35:7 <35:7 35:22> 35:22>]
SYMBOL_FIELD: public int32 b2Chunk::blockSize [b2BlockAllocator.cpp <46:8 46:16>]
SYMBOL_FIELD: public b2Block * b2Chunk::blocks [b2BlockAllocator.cpp <47:11 47:16>]
SYMBOL_FIELD: public b2Block * b2Block::next [b2BlockAllocator.cpp <52:11 52:14>]
SYMBOL_FUNCTION: void _wassert(const wchar_t *, const wchar_t *, unsigned int)
SYMBOL_FUNCTION: void * memset(void *, int, size_t)
SYMBOL_FUNCTION: void * memcpy(void *, const void *, size_t)
REFERENCE_INCLUDE: b2BlockAllocator.cpp -> b2BlockAllocator.h [b2BlockAllocator.cpp <19:10 19:42>]
REFERENCE_MACRO_USAGE: b2BlockAllocator.h -> B2_BLOCK_ALLOCATOR_H [b2BlockAllocator.h <19:9 19:28>]
REFERENCE_INCLUDE: b2BlockAllocator.h -> b2Settings.h [b2BlockAllocator.h <22:10 22:36>]
REFERENCE_MACRO_USAGE: b2Settings.h -> B2_SETTINGS_H [b2Settings.h <19:9 19:21>]
REFERENCE_INCLUDE: b2Settings.h -> stddef.h [b2Settings.h <22:10 22:19>]
REFERENCE_INCLUDE: stddef.h -> corecrt.h [stddef.h <11:10 11:20>]
REFERENCE_INCLUDE: corecrt.h -> vcruntime.h [corecrt.h <10:10 10:22>]
REFERENCE_INCLUDE: vcruntime.h -> sal.h [vcruntime.h <47:10 47:16>]
REFERENCE_INCLUDE: sal.h -> concurrencysal.h [sal.h <2990:10 2990:27>]
REFERENCE_INCLUDE: vcruntime.h -> vadefs.h [vcruntime.h <48:10 48:19>]
REFERENCE_INCLUDE: b2Settings.h -> assert.h [b2Settings.h <23:10 23:19>]
REFERENCE_INCLUDE: assert.h -> corecrt.h [assert.h <12:10 12:20>]
REFERENCE_INCLUDE: b2Settings.h -> float.h [b2Settings.h <24:10 24:18>]
REFERENCE_INCLUDE: float.h -> corecrt.h [float.h <12:10 12:20>]
REFERENCE_MACRO_USAGE: b2Settings.h -> NDEBUG [b2Settings.h <26:14 26:19>]
REFERENCE_INCLUDE: b2BlockAllocator.cpp -> limits.h [b2BlockAllocator.cpp <20:10 20:19>]
REFERENCE_INCLUDE: limits.h -> vcruntime.h [limits.h <11:10 11:22>]
REFERENCE_INCLUDE: b2BlockAllocator.cpp -> string.h [b2BlockAllocator.cpp <21:10 21:19>]
REFERENCE_INCLUDE: string.h -> corecrt.h [string.h <11:10 11:20>]
REFERENCE_INCLUDE: string.h -> corecrt_memory.h [string.h <12:10 12:27>]
REFERENCE_INCLUDE: corecrt_memory.h -> corecrt.h [corecrt_memory.h <13:10 13:20>]
REFERENCE_INCLUDE: corecrt_memory.h -> corecrt_memcpy_s.h [corecrt_memory.h <14:10 14:29>]
REFERENCE_INCLUDE: corecrt_memcpy_s.h -> corecrt.h [corecrt_memcpy_s.h <10:10 10:20>]
REFERENCE_INCLUDE: corecrt_memcpy_s.h -> errno.h [corecrt_memcpy_s.h <11:10 11:18>]
REFERENCE_INCLUDE: errno.h -> corecrt.h [errno.h <11:10 11:20>]
REFERENCE_INCLUDE: corecrt_memcpy_s.h -> vcruntime_string.h [corecrt_memcpy_s.h <12:10 12:29>]
REFERENCE_INCLUDE: vcruntime_string.h -> vcruntime.h [vcruntime_string.h <10:10 10:22>]
REFERENCE_INCLUDE: corecrt_memory.h -> vcruntime_string.h [corecrt_memory.h <15:10 15:29>]
REFERENCE_INCLUDE: string.h -> corecrt_wstring.h [string.h <13:10 13:28>]
REFERENCE_INCLUDE: corecrt_wstring.h -> corecrt.h [corecrt_wstring.h <11:10 11:20>]
REFERENCE_INCLUDE: corecrt_wstring.h -> vcruntime_string.h [corecrt_wstring.h <12:10 12:29>]
REFERENCE_INCLUDE: string.h -> vcruntime_string.h [string.h <14:10 14:29>]
REFERENCE_INCLUDE: b2BlockAllocator.cpp -> stddef.h [b2BlockAllocator.cpp <22:10 22:19>]
REFERENCE_MACRO_USAGE: b2BlockAllocator.cpp -> b2Assert [b2BlockAllocator.cpp <57:2 57:9>]
REFERENCE_MACRO_USAGE: b2BlockAllocator.cpp -> b2Assert [b2BlockAllocator.cpp <71:4 71:11>]
REFERENCE_MACRO_USAGE: b2BlockAllocator.cpp -> b2Assert [b2BlockAllocator.cpp <102:2 102:9>]
REFERENCE_MACRO_USAGE: b2BlockAllocator.cpp -> b2Assert [b2BlockAllocator.cpp <110:2 110:9>]
REFERENCE_MACRO_USAGE: b2BlockAllocator.cpp -> b2Assert [b2BlockAllocator.cpp <138:3 138:10>]
REFERENCE_MACRO_USAGE: b2BlockAllocator.cpp -> b2Assert [b2BlockAllocator.cpp <162:2 162:9>]
REFERENCE_MACRO_USAGE: b2BlockAllocator.cpp -> b2Assert [b2BlockAllocator.cpp <171:2 171:9>]
REFERENCE_MACRO_USAGE: b2BlockAllocator.cpp -> UCHAR_MAX [b2BlockAllocator.cpp <57:27 57:35>]
REFERENCE_MACRO_USAGE: b2Settings.h -> assert [b2Settings.h <31:21 31:26>]
REFERENCE_MACRO_USAGE: b2BlockAllocator.cpp -> _DEBUG [b2BlockAllocator.cpp <132:13 132:18>]
REFERENCE_MACRO_USAGE: b2BlockAllocator.cpp -> _DEBUG [b2BlockAllocator.cpp <173:8 173:13>]
REFERENCE_TYPE_USAGE: int8 -> signed char [b2Settings.h <33:9 33:14>]
REFERENCE_TYPE_USAGE: int16 -> short [b2Settings.h <34:9 34:14>]
REFERENCE_TYPE_USAGE: int32 -> int [b2Settings.h <35:9 35:14>]
REFERENCE_TYPE_USAGE: uint8 -> unsigned char [b2Settings.h <36:9 36:16>]
REFERENCE_TYPE_USAGE: uint16 -> unsigned short [b2Settings.h <37:9 37:16>]
REFERENCE_TYPE_USAGE: uint32 -> unsigned int [b2Settings.h <38:9 38:16>]
REFERENCE_TYPE_USAGE: float32 -> float [b2Settings.h <39:9 39:13>]
REFERENCE_TYPE_USAGE: float64 -> double [b2Settings.h <40:9 40:14>]
REFERENCE_TYPE_USAGE: void * b2Alloc(int32) -> void [b2Settings.h <135:1 135:4>]
REFERENCE_TYPE_USAGE: void * b2Alloc(int32) -> int32 [b2Settings.h <135:15 135:19>]
REFERENCE_TYPE_USAGE: void b2Free(void *) -> void [b2Settings.h <138:1 138:4>]
REFERENCE_TYPE_USAGE: void b2Free(void *) -> void [b2Settings.h <138:13 138:16>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> void [b2Settings.h <141:1 141:4>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> char [b2Settings.h <141:18 141:21>]
REFERENCE_TYPE_USAGE: int32 b2Version::major -> int32 [b2Settings.h <147:2 147:6>]
REFERENCE_TYPE_USAGE: int32 b2Version::minor -> int32 [b2Settings.h <148:2 148:6>]
REFERENCE_TYPE_USAGE: int32 b2Version::revision -> int32 [b2Settings.h <149:2 149:6>]
REFERENCE_TYPE_USAGE: b2Version b2_version -> b2Version [b2Settings.h <153:8 153:16>]
REFERENCE_TYPE_USAGE: const int32 b2_chunkSize -> int32 [b2BlockAllocator.h <24:7 24:11>]
REFERENCE_TYPE_USAGE: const int32 b2_maxBlockSize -> int32 [b2BlockAllocator.h <25:7 25:11>]
REFERENCE_TYPE_USAGE: const int32 b2_blockSizes -> int32 [b2BlockAllocator.h <26:7 26:11>]
REFERENCE_TYPE_USAGE: const int32 b2_chunkArrayIncrement -> int32 [b2BlockAllocator.h <27:7 27:11>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> void [b2BlockAllocator.cpp <97:1 97:4>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> void [b2BlockAllocator.cpp <102:2 102:9>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> void [b2BlockAllocator.cpp <110:2 110:9>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> void [b2BlockAllocator.cpp <138:3 138:10>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> void [b2BlockAllocator.h <42:2 42:5>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 [b2BlockAllocator.cpp <97:34 97:38>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 [b2BlockAllocator.cpp <109:2 109:6>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 [b2BlockAllocator.cpp <135:3 135:7>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 [b2BlockAllocator.cpp <137:3 137:7>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 [b2BlockAllocator.cpp <139:8 139:12>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 [b2BlockAllocator.h <42:17 42:21>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> void [b2BlockAllocator.cpp <155:1 155:4>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> void [b2BlockAllocator.cpp <155:29 155:32>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> void [b2BlockAllocator.cpp <162:2 162:9>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> void [b2BlockAllocator.cpp <171:2 171:9>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> void [b2BlockAllocator.h <45:2 45:5>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> void [b2BlockAllocator.h <45:12 45:15>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> int32 [b2BlockAllocator.cpp <155:38 155:42>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> int32 [b2BlockAllocator.cpp <170:2 170:6>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> int32 [b2BlockAllocator.h <45:21 45:25>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Clear() -> void [b2BlockAllocator.cpp <204:1 204:4>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Clear() -> void [b2BlockAllocator.h <47:2 47:5>]
REFERENCE_TYPE_USAGE: b2Chunk * b2BlockAllocator::m_chunks -> b2Chunk [b2BlockAllocator.h <51:2 51:8>]
REFERENCE_TYPE_USAGE: int32 b2BlockAllocator::m_chunkCount -> int32 [b2BlockAllocator.h <52:2 52:6>]
REFERENCE_TYPE_USAGE: int32 b2BlockAllocator::m_chunkSpace -> int32 [b2BlockAllocator.h <53:2 53:6>]
REFERENCE_TYPE_USAGE: b2Block * [] b2BlockAllocator::m_freeLists -> b2Block [b2BlockAllocator.h <55:2 55:8>]
REFERENCE_USAGE: b2Block * [] b2BlockAllocator::m_freeLists -> const int32 b2_blockSizes [b2BlockAllocator.h <55:23 55:35>]
REFERENCE_TYPE_USAGE: static int32 [] b2BlockAllocator::s_blockSizes -> int32 [b2BlockAllocator.cpp <24:1 24:5>]
REFERENCE_TYPE_USAGE: static int32 [] b2BlockAllocator::s_blockSizes -> int32 [b2BlockAllocator.h <57:9 57:13>]
REFERENCE_USAGE: static int32 [] b2BlockAllocator::s_blockSizes -> const int32 b2_blockSizes [b2BlockAllocator.cpp <24:38 24:50>]
REFERENCE_USAGE: static int32 [] b2BlockAllocator::s_blockSizes -> const int32 b2_blockSizes [b2BlockAllocator.h <57:28 57:40>]
REFERENCE_TYPE_USAGE: static uint8 [] b2BlockAllocator::s_blockSizeLookup -> uint8 [b2BlockAllocator.cpp <41:1 41:5>]
REFERENCE_TYPE_USAGE: static uint8 [] b2BlockAllocator::s_blockSizeLookup -> uint8 [b2BlockAllocator.h <58:9 58:13>]
REFERENCE_USAGE: static uint8 [] b2BlockAllocator::s_blockSizeLookup -> const int32 b2_maxBlockSize [b2BlockAllocator.cpp <41:43 41:57>]
REFERENCE_USAGE: static uint8 [] b2BlockAllocator::s_blockSizeLookup -> const int32 b2_maxBlockSize [b2BlockAllocator.h <58:33 58:47>]
REFERENCE_TYPE_USAGE: static bool b2BlockAllocator::s_blockSizeLookupInitialized -> bool [b2BlockAllocator.cpp <42:1 42:4>]
REFERENCE_TYPE_USAGE: static bool b2BlockAllocator::s_blockSizeLookupInitialized -> bool [b2BlockAllocator.h <59:9 59:12>]
REFERENCE_TYPE_USAGE: int32 b2Chunk::blockSize -> int32 [b2BlockAllocator.cpp <46:2 46:6>]
REFERENCE_TYPE_USAGE: b2Block * b2Chunk::blocks -> b2Block [b2BlockAllocator.cpp <47:2 47:8>]
REFERENCE_TYPE_USAGE: b2Block * b2Block::next -> b2Block [b2BlockAllocator.cpp <52:2 52:8>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> void [b2BlockAllocator.cpp <57:2 57:9>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> void [b2BlockAllocator.cpp <71:4 71:11>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> const int32 b2_blockSizes [b2BlockAllocator.cpp <57:11 57:23>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> const int32 b2_blockSizes [b2BlockAllocator.cpp <71:17 71:29>]
REFERENCE_CALL: void b2BlockAllocator::b2BlockAllocator() -> void _wassert(const wchar_t *, const wchar_t *, unsigned int) [b2BlockAllocator.cpp <57:2 57:9>]
REFERENCE_CALL: void b2BlockAllocator::b2BlockAllocator() -> void _wassert(const wchar_t *, const wchar_t *, unsigned int) [b2BlockAllocator.cpp <71:4 71:11>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> unsigned int [b2BlockAllocator.cpp <57:2 57:9>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> unsigned int [b2BlockAllocator.cpp <71:4 71:11>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> int32 b2BlockAllocator::m_chunkSpace [b2BlockAllocator.cpp <59:2 59:13>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> int32 b2BlockAllocator::m_chunkSpace [b2BlockAllocator.cpp <61:31 61:42>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> int32 b2BlockAllocator::m_chunkSpace [b2BlockAllocator.cpp <63:22 63:33>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> const int32 b2_chunkArrayIncrement [b2BlockAllocator.cpp <59:17 59:38>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> int32 b2BlockAllocator::m_chunkCount [b2BlockAllocator.cpp <60:2 60:13>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> b2Chunk * b2BlockAllocator::m_chunks [b2BlockAllocator.cpp <61:2 61:9>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> b2Chunk * b2BlockAllocator::m_chunks [b2BlockAllocator.cpp <63:9 63:16>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> b2Chunk [b2BlockAllocator.cpp <61:14 61:20>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> b2Chunk [b2BlockAllocator.cpp <61:53 61:59>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> b2Chunk [b2BlockAllocator.cpp <63:44 63:50>]
REFERENCE_CALL: void b2BlockAllocator::b2BlockAllocator() -> void * b2Alloc(int32) [b2BlockAllocator.cpp <61:23 61:29>]
REFERENCE_CALL: void b2BlockAllocator::b2BlockAllocator() -> void * memset(void *, int, size_t) [b2BlockAllocator.cpp <63:2 63:7>]
REFERENCE_CALL: void b2BlockAllocator::b2BlockAllocator() -> void * memset(void *, int, size_t) [b2BlockAllocator.cpp <64:2 64:7>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> b2Block * [] b2BlockAllocator::m_freeLists [b2BlockAllocator.cpp <64:9 64:19>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> b2Block * [] b2BlockAllocator::m_freeLists [b2BlockAllocator.cpp <64:32 64:42>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> static bool b2BlockAllocator::s_blockSizeLookupInitialized [b2BlockAllocator.cpp <66:6 66:33>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> static bool b2BlockAllocator::s_blockSizeLookupInitialized [b2BlockAllocator.cpp <83:3 83:30>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> int32 [b2BlockAllocator.cpp <68:3 68:7>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> int32 [b2BlockAllocator.cpp <69:8 69:12>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> const int32 b2_maxBlockSize [b2BlockAllocator.cpp <69:26 69:40>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> static int32 [] b2BlockAllocator::s_blockSizes [b2BlockAllocator.cpp <72:13 72:24>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> static uint8 [] b2BlockAllocator::s_blockSizeLookup [b2BlockAllocator.cpp <74:5 74:21>]
REFERENCE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> static uint8 [] b2BlockAllocator::s_blockSizeLookup [b2BlockAllocator.cpp <79:5 79:21>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> uint8 [b2BlockAllocator.cpp <74:29 74:33>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::b2BlockAllocator() -> uint8 [b2BlockAllocator.cpp <79:29 79:33>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::~b2BlockAllocator() -> int32 [b2BlockAllocator.cpp <89:7 89:11>]
REFERENCE_USAGE: void b2BlockAllocator::~b2BlockAllocator() -> int32 b2BlockAllocator::m_chunkCount [b2BlockAllocator.cpp <89:24 89:35>]
REFERENCE_CALL: void b2BlockAllocator::~b2BlockAllocator() -> void b2Free(void *) [b2BlockAllocator.cpp <91:3 91:8>]
REFERENCE_CALL: void b2BlockAllocator::~b2BlockAllocator() -> void b2Free(void *) [b2BlockAllocator.cpp <94:2 94:7>]
REFERENCE_USAGE: void b2BlockAllocator::~b2BlockAllocator() -> b2Block * b2Chunk::blocks [b2BlockAllocator.cpp <91:22 91:27>]
REFERENCE_USAGE: void b2BlockAllocator::~b2BlockAllocator() -> b2Chunk * b2BlockAllocator::m_chunks [b2BlockAllocator.cpp <91:10 91:17>]
REFERENCE_USAGE: void b2BlockAllocator::~b2BlockAllocator() -> b2Chunk * b2BlockAllocator::m_chunks [b2BlockAllocator.cpp <94:9 94:16>]
REFERENCE_CALL: void * b2BlockAllocator::Allocate(int32) -> void _wassert(const wchar_t *, const wchar_t *, unsigned int) [b2BlockAllocator.cpp <102:2 102:9>]
REFERENCE_CALL: void * b2BlockAllocator::Allocate(int32) -> void _wassert(const wchar_t *, const wchar_t *, unsigned int) [b2BlockAllocator.cpp <110:2 110:9>]
REFERENCE_CALL: void * b2BlockAllocator::Allocate(int32) -> void _wassert(const wchar_t *, const wchar_t *, unsigned int) [b2BlockAllocator.cpp <138:3 138:10>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> unsigned int [b2BlockAllocator.cpp <102:2 102:9>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> unsigned int [b2BlockAllocator.cpp <110:2 110:9>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> unsigned int [b2BlockAllocator.cpp <138:3 138:10>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> const int32 b2_maxBlockSize [b2BlockAllocator.cpp <104:13 104:27>]
REFERENCE_CALL: void * b2BlockAllocator::Allocate(int32) -> void * b2Alloc(int32) [b2BlockAllocator.cpp <106:10 106:16>]
REFERENCE_CALL: void * b2BlockAllocator::Allocate(int32) -> void * b2Alloc(int32) [b2BlockAllocator.cpp <124:25 124:31>]
REFERENCE_CALL: void * b2BlockAllocator::Allocate(int32) -> void * b2Alloc(int32) [b2BlockAllocator.cpp <131:29 131:35>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> static uint8 [] b2BlockAllocator::s_blockSizeLookup [b2BlockAllocator.cpp <109:16 109:32>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> const int32 b2_blockSizes [b2BlockAllocator.cpp <110:33 110:45>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * [] b2BlockAllocator::m_freeLists [b2BlockAllocator.cpp <112:6 112:16>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * [] b2BlockAllocator::m_freeLists [b2BlockAllocator.cpp <114:20 114:30>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * [] b2BlockAllocator::m_freeLists [b2BlockAllocator.cpp <115:3 115:13>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * [] b2BlockAllocator::m_freeLists [b2BlockAllocator.cpp <148:3 148:13>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block [b2BlockAllocator.cpp <114:3 114:9>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block [b2BlockAllocator.cpp <131:20 131:26>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block [b2BlockAllocator.cpp <141:4 141:10>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block [b2BlockAllocator.cpp <141:22 141:28>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block [b2BlockAllocator.cpp <142:4 142:10>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block [b2BlockAllocator.cpp <142:21 142:27>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block [b2BlockAllocator.cpp <145:3 145:9>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block [b2BlockAllocator.cpp <145:20 145:26>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * b2Block::next [b2BlockAllocator.cpp <115:31 115:34>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * b2Block::next [b2BlockAllocator.cpp <143:11 143:14>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * b2Block::next [b2BlockAllocator.cpp <146:9 146:12>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * b2Block::next [b2BlockAllocator.cpp <148:39 148:42>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 b2BlockAllocator::m_chunkCount [b2BlockAllocator.cpp <120:7 120:18>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 b2BlockAllocator::m_chunkCount [b2BlockAllocator.cpp <125:32 125:43>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 b2BlockAllocator::m_chunkCount [b2BlockAllocator.cpp <126:22 126:33>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 b2BlockAllocator::m_chunkCount [b2BlockAllocator.cpp <130:31 130:42>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 b2BlockAllocator::m_chunkCount [b2BlockAllocator.cpp <149:5 149:16>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 b2BlockAllocator::m_chunkSpace [b2BlockAllocator.cpp <120:23 120:34>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 b2BlockAllocator::m_chunkSpace [b2BlockAllocator.cpp <123:4 123:15>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 b2BlockAllocator::m_chunkSpace [b2BlockAllocator.cpp <124:33 124:44>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Chunk [b2BlockAllocator.cpp <122:4 122:10>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Chunk [b2BlockAllocator.cpp <124:16 124:22>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Chunk [b2BlockAllocator.cpp <124:55 124:61>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Chunk [b2BlockAllocator.cpp <125:54 125:60>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Chunk [b2BlockAllocator.cpp <126:71 126:77>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Chunk [b2BlockAllocator.cpp <130:3 130:9>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Chunk * b2BlockAllocator::m_chunks [b2BlockAllocator.cpp <122:25 122:32>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Chunk * b2BlockAllocator::m_chunks [b2BlockAllocator.cpp <124:4 124:11>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Chunk * b2BlockAllocator::m_chunks [b2BlockAllocator.cpp <125:11 125:18>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Chunk * b2BlockAllocator::m_chunks [b2BlockAllocator.cpp <126:11 126:18>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Chunk * b2BlockAllocator::m_chunks [b2BlockAllocator.cpp <130:20 130:27>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> const int32 b2_chunkArrayIncrement [b2BlockAllocator.cpp <123:20 123:41>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> const int32 b2_chunkArrayIncrement [b2BlockAllocator.cpp <126:39 126:60>]
REFERENCE_CALL: void * b2BlockAllocator::Allocate(int32) -> void * memcpy(void *, const void *, size_t) [b2BlockAllocator.cpp <125:4 125:9>]
REFERENCE_CALL: void * b2BlockAllocator::Allocate(int32) -> void * memset(void *, int, size_t) [b2BlockAllocator.cpp <126:4 126:9>]
REFERENCE_CALL: void * b2BlockAllocator::Allocate(int32) -> void b2Free(void *) [b2BlockAllocator.cpp <127:4 127:9>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * b2Chunk::blocks [b2BlockAllocator.cpp <131:10 131:15>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * b2Chunk::blocks [b2BlockAllocator.cpp <141:46 141:51>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * b2Chunk::blocks [b2BlockAllocator.cpp <142:45 142:50>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * b2Chunk::blocks [b2BlockAllocator.cpp <145:44 145:49>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * b2Chunk::blocks [b2BlockAllocator.cpp <148:31 148:36>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> b2Block * b2Chunk::blocks [b2BlockAllocator.cpp <151:17 151:22>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> const int32 b2_chunkSize [b2BlockAllocator.cpp <131:37 131:48>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> const int32 b2_chunkSize [b2BlockAllocator.cpp <137:22 137:33>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> const int32 b2_chunkSize [b2BlockAllocator.cpp <138:38 138:49>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> static int32 [] b2BlockAllocator::s_blockSizes [b2BlockAllocator.cpp <135:21 135:32>]
REFERENCE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int32 b2Chunk::blockSize [b2BlockAllocator.cpp <136:10 136:18>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int8 [b2BlockAllocator.cpp <141:33 141:36>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int8 [b2BlockAllocator.cpp <142:32 142:35>]
REFERENCE_TYPE_USAGE: void * b2BlockAllocator::Allocate(int32) -> int8 [b2BlockAllocator.cpp <145:31 145:34>]
REFERENCE_CALL: void b2BlockAllocator::Free(void *, int32) -> void _wassert(const wchar_t *, const wchar_t *, unsigned int) [b2BlockAllocator.cpp <162:2 162:9>]
REFERENCE_CALL: void b2BlockAllocator::Free(void *, int32) -> void _wassert(const wchar_t *, const wchar_t *, unsigned int) [b2BlockAllocator.cpp <171:2 171:9>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> unsigned int [b2BlockAllocator.cpp <162:2 162:9>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> unsigned int [b2BlockAllocator.cpp <171:2 171:9>]
REFERENCE_USAGE: void b2BlockAllocator::Free(void *, int32) -> const int32 b2_maxBlockSize [b2BlockAllocator.cpp <164:13 164:27>]
REFERENCE_CALL: void b2BlockAllocator::Free(void *, int32) -> void b2Free(void *) [b2BlockAllocator.cpp <166:3 166:8>]
REFERENCE_USAGE: void b2BlockAllocator::Free(void *, int32) -> static uint8 [] b2BlockAllocator::s_blockSizeLookup [b2BlockAllocator.cpp <170:16 170:32>]
REFERENCE_USAGE: void b2BlockAllocator::Free(void *, int32) -> const int32 b2_blockSizes [b2BlockAllocator.cpp <171:33 171:45>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> b2Block [b2BlockAllocator.cpp <199:2 199:8>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Free(void *, int32) -> b2Block [b2BlockAllocator.cpp <199:20 199:26>]
REFERENCE_USAGE: void b2BlockAllocator::Free(void *, int32) -> b2Block * b2Block::next [b2BlockAllocator.cpp <200:9 200:12>]
REFERENCE_USAGE: void b2BlockAllocator::Free(void *, int32) -> b2Block * [] b2BlockAllocator::m_freeLists [b2BlockAllocator.cpp <200:16 200:26>]
REFERENCE_USAGE: void b2BlockAllocator::Free(void *, int32) -> b2Block * [] b2BlockAllocator::m_freeLists [b2BlockAllocator.cpp <201:2 201:12>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Clear() -> int32 [b2BlockAllocator.cpp <206:7 206:11>]
REFERENCE_USAGE: void b2BlockAllocator::Clear() -> int32 b2BlockAllocator::m_chunkCount [b2BlockAllocator.cpp <206:24 206:35>]
REFERENCE_USAGE: void b2BlockAllocator::Clear() -> int32 b2BlockAllocator::m_chunkCount [b2BlockAllocator.cpp <211:2 211:13>]
REFERENCE_CALL: void b2BlockAllocator::Clear() -> void b2Free(void *) [b2BlockAllocator.cpp <208:3 208:8>]
REFERENCE_USAGE: void b2BlockAllocator::Clear() -> b2Block * b2Chunk::blocks [b2BlockAllocator.cpp <208:22 208:27>]
REFERENCE_USAGE: void b2BlockAllocator::Clear() -> b2Chunk * b2BlockAllocator::m_chunks [b2BlockAllocator.cpp <208:10 208:17>]
REFERENCE_USAGE: void b2BlockAllocator::Clear() -> b2Chunk * b2BlockAllocator::m_chunks [b2BlockAllocator.cpp <212:9 212:16>]
REFERENCE_CALL: void b2BlockAllocator::Clear() -> void * memset(void *, int, size_t) [b2BlockAllocator.cpp <212:2 212:7>]
REFERENCE_CALL: void b2BlockAllocator::Clear() -> void * memset(void *, int, size_t) [b2BlockAllocator.cpp <214:2 214:7>]
REFERENCE_USAGE: void b2BlockAllocator::Clear() -> int32 b2BlockAllocator::m_chunkSpace [b2BlockAllocator.cpp <212:22 212:33>]
REFERENCE_TYPE_USAGE: void b2BlockAllocator::Clear() -> b2Chunk [b2BlockAllocator.cpp <212:44 212:50>]
REFERENCE_USAGE: void b2BlockAllocator::Clear() -> b2Block * [] b2BlockAllocator::m_freeLists [b2BlockAllocator.cpp <214:9 214:19>]
REFERENCE_USAGE: void b2BlockAllocator::Clear() -> b2Block * [] b2BlockAllocator::m_freeLists [b2BlockAllocator.cpp <214:32 214:42>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<105:2> [b2BlockAllocator.cpp <105:2 105:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<105:2> [b2BlockAllocator.cpp <107:2 107:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<109:8> [b2BlockAllocator.cpp <109:8 109:12>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<109:8> [b2BlockAllocator.cpp <110:16 110:20>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<109:8> [b2BlockAllocator.cpp <110:25 110:29>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<109:8> [b2BlockAllocator.cpp <112:18 112:22>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<109:8> [b2BlockAllocator.cpp <114:32 114:36>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<109:8> [b2BlockAllocator.cpp <115:15 115:19>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<109:8> [b2BlockAllocator.cpp <135:34 135:38>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<109:8> [b2BlockAllocator.cpp <148:15 148:19>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<113:2> [b2BlockAllocator.cpp <113:2 113:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<113:2> [b2BlockAllocator.cpp <117:2 117:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<114:12> [b2BlockAllocator.cpp <114:12 114:16>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<114:12> [b2BlockAllocator.cpp <115:24 115:28>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<114:12> [b2BlockAllocator.cpp <116:10 116:14>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<119:2> [b2BlockAllocator.cpp <119:2 119:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<119:2> [b2BlockAllocator.cpp <152:2 152:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<121:3> [b2BlockAllocator.cpp <121:3 121:3>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<121:3> [b2BlockAllocator.cpp <128:3 128:3>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<122:13> [b2BlockAllocator.cpp <122:13 122:21>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<122:13> [b2BlockAllocator.cpp <125:21 125:29>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<122:13> [b2BlockAllocator.cpp <127:11 127:19>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<130:12> [b2BlockAllocator.cpp <130:12 130:16>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<130:12> [b2BlockAllocator.cpp <131:3 131:7>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<130:12> [b2BlockAllocator.cpp <136:3 136:7>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<130:12> [b2BlockAllocator.cpp <141:39 141:43>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<130:12> [b2BlockAllocator.cpp <142:38 142:42>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<130:12> [b2BlockAllocator.cpp <145:37 145:41>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<130:12> [b2BlockAllocator.cpp <148:24 148:28>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<130:12> [b2BlockAllocator.cpp <151:10 151:14>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<135:9> [b2BlockAllocator.cpp <135:9 135:17>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<135:9> [b2BlockAllocator.cpp <136:22 136:30>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<135:9> [b2BlockAllocator.cpp <137:37 137:45>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<135:9> [b2BlockAllocator.cpp <138:25 138:33>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<135:9> [b2BlockAllocator.cpp <141:55 141:63>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<135:9> [b2BlockAllocator.cpp <142:54 142:62>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<135:9> [b2BlockAllocator.cpp <145:53 145:61>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<137:9> [b2BlockAllocator.cpp <137:9 137:18>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<137:9> [b2BlockAllocator.cpp <138:12 138:21>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<137:9> [b2BlockAllocator.cpp <139:25 139:34>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<137:9> [b2BlockAllocator.cpp <145:66 145:75>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<139:14> [b2BlockAllocator.cpp <139:14 139:14>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<139:14> [b2BlockAllocator.cpp <139:21 139:21>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<139:14> [b2BlockAllocator.cpp <139:43 139:43>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<139:14> [b2BlockAllocator.cpp <141:67 141:67>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<139:14> [b2BlockAllocator.cpp <142:67 142:67>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<140:3> [b2BlockAllocator.cpp <140:3 140:3>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<140:3> [b2BlockAllocator.cpp <144:3 144:3>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<141:13> [b2BlockAllocator.cpp <141:13 141:17>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<141:13> [b2BlockAllocator.cpp <143:4 143:8>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<142:13> [b2BlockAllocator.cpp <142:13 142:16>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<142:13> [b2BlockAllocator.cpp <143:18 143:21>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<145:12> [b2BlockAllocator.cpp <145:12 145:15>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<145:12> [b2BlockAllocator.cpp <146:3 146:6>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<155:35> [b2BlockAllocator.cpp <155:35 155:35>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<155:35> [b2BlockAllocator.cpp <166:10 166:10>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<155:35> [b2BlockAllocator.cpp <199:29 199:29>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<155:44> [b2BlockAllocator.cpp <155:44 155:47>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<155:44> [b2BlockAllocator.cpp <157:6 157:9>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<155:44> [b2BlockAllocator.cpp <162:15 162:18>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<155:44> [b2BlockAllocator.cpp <164:6 164:9>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<155:44> [b2BlockAllocator.cpp <170:34 170:37>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<156:1> [b2BlockAllocator.cpp <156:1 156:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<156:1> [b2BlockAllocator.cpp <202:1 202:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<158:2> [b2BlockAllocator.cpp <158:2 158:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<158:2> [b2BlockAllocator.cpp <160:2 160:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<165:2> [b2BlockAllocator.cpp <165:2 165:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<165:2> [b2BlockAllocator.cpp <168:2 168:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<170:8> [b2BlockAllocator.cpp <170:8 170:12>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<170:8> [b2BlockAllocator.cpp <171:16 171:20>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<170:8> [b2BlockAllocator.cpp <171:25 171:29>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<170:8> [b2BlockAllocator.cpp <200:28 200:32>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<170:8> [b2BlockAllocator.cpp <201:14 201:18>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<199:11> [b2BlockAllocator.cpp <199:11 199:15>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<199:11> [b2BlockAllocator.cpp <200:2 200:6>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<199:11> [b2BlockAllocator.cpp <201:23 201:27>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<205:1> [b2BlockAllocator.cpp <205:1 205:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<205:1> [b2BlockAllocator.cpp <215:1 215:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<206:13> [b2BlockAllocator.cpp <206:13 206:13>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<206:13> [b2BlockAllocator.cpp <206:20 206:20>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<206:13> [b2BlockAllocator.cpp <206:40 206:40>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<206:13> [b2BlockAllocator.cpp <208:19 208:19>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<207:2> [b2BlockAllocator.cpp <207:2 207:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<207:2> [b2BlockAllocator.cpp <209:2 209:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<25:1> [b2BlockAllocator.cpp <25:1 25:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<25:1> [b2BlockAllocator.cpp <40:1 40:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<45:1> [b2BlockAllocator.cpp <45:1 45:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<45:1> [b2BlockAllocator.cpp <48:1 48:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<51:1> [b2BlockAllocator.cpp <51:1 51:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<51:1> [b2BlockAllocator.cpp <53:1 53:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<56:1> [b2BlockAllocator.cpp <56:1 56:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<56:1> [b2BlockAllocator.cpp <85:1 85:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<67:2> [b2BlockAllocator.cpp <67:2 67:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<67:2> [b2BlockAllocator.cpp <84:2 84:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<68:9> [b2BlockAllocator.cpp <68:9 68:9>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<68:9> [b2BlockAllocator.cpp <71:13 71:13>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<68:9> [b2BlockAllocator.cpp <72:26 72:26>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<68:9> [b2BlockAllocator.cpp <74:35 74:35>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<68:9> [b2BlockAllocator.cpp <78:7 78:7>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<68:9> [b2BlockAllocator.cpp <79:35 79:35>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<69:14> [b2BlockAllocator.cpp <69:14 69:14>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<69:14> [b2BlockAllocator.cpp <69:21 69:21>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<69:14> [b2BlockAllocator.cpp <69:45 69:45>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<69:14> [b2BlockAllocator.cpp <72:8 72:8>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<69:14> [b2BlockAllocator.cpp <74:23 74:23>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<69:14> [b2BlockAllocator.cpp <79:23 79:23>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<70:3> [b2BlockAllocator.cpp <70:3 70:3>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<70:3> [b2BlockAllocator.cpp <81:3 81:3>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<73:4> [b2BlockAllocator.cpp <73:4 73:4>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<73:4> [b2BlockAllocator.cpp <75:4 75:4>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<77:4> [b2BlockAllocator.cpp <77:4 77:4>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<77:4> [b2BlockAllocator.cpp <80:4 80:4>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<88:1> [b2BlockAllocator.cpp <88:1 88:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<88:1> [b2BlockAllocator.cpp <95:1 95:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<89:13> [b2BlockAllocator.cpp <89:13 89:13>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<89:13> [b2BlockAllocator.cpp <89:20 89:20>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<89:13> [b2BlockAllocator.cpp <89:40 89:40>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<89:13> [b2BlockAllocator.cpp <91:19 91:19>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<90:2> [b2BlockAllocator.cpp <90:2 90:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<90:2> [b2BlockAllocator.cpp <92:2 92:2>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<97:40> [b2BlockAllocator.cpp <97:40 97:43>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<97:40> [b2BlockAllocator.cpp <99:6 99:9>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<97:40> [b2BlockAllocator.cpp <102:15 102:18>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<97:40> [b2BlockAllocator.cpp <104:6 104:9>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<97:40> [b2BlockAllocator.cpp <106:18 106:21>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<97:40> [b2BlockAllocator.cpp <109:34 109:37>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<98:1> [b2BlockAllocator.cpp <98:1 98:1>]
LOCAL_SYMBOL: b2BlockAllocator.cpp<98:1> [b2BlockAllocator.cpp <153:1 153:1>]
LOCAL_SYMBOL: b2BlockAllocator.h<36:1> [b2BlockAllocator.h <36:1 36:1>]
LOCAL_SYMBOL: b2BlockAllocator.h<36:1> [b2BlockAllocator.h <60:1 60:1>]
LOCAL_SYMBOL: b2BlockAllocator.h<42:23> [b2BlockAllocator.h <42:23 42:26>]
LOCAL_SYMBOL: b2BlockAllocator.h<45:18> [b2BlockAllocator.h <45:18 45:18>]
LOCAL_SYMBOL: b2BlockAllocator.h<45:27> [b2BlockAllocator.h <45:27 45:30>]
LOCAL_SYMBOL: b2Settings.h<135:21> [b2Settings.h <135:21 135:24>]
LOCAL_SYMBOL: b2Settings.h<138:19> [b2Settings.h <138:19 138:21>]
LOCAL_SYMBOL: b2Settings.h<141:24> [b2Settings.h <141:24 141:29>]
LOCAL_SYMBOL: b2Settings.h<146:1> [b2Settings.h <146:1 146:1>]
LOCAL_SYMBOL: b2Settings.h<146:1> [b2Settings.h <150:1 150:1>]
COMMENT: comment [b2BlockAllocator.cpp <1:1 17:3>]
COMMENT: comment [b2BlockAllocator.cpp <26:7 26:11>]
COMMENT: comment [b2BlockAllocator.cpp <27:7 27:11>]
COMMENT: comment [b2BlockAllocator.cpp <28:7 28:11>]
COMMENT: comment [b2BlockAllocator.cpp <29:7 29:11>]
COMMENT: comment [b2BlockAllocator.cpp <30:7 30:11>]
COMMENT: comment [b2BlockAllocator.cpp <31:7 31:11>]
COMMENT: comment [b2BlockAllocator.cpp <32:7 32:11>]
COMMENT: comment [b2BlockAllocator.cpp <33:7 33:11>]
COMMENT: comment [b2BlockAllocator.cpp <34:7 34:11>]
COMMENT: comment [b2BlockAllocator.cpp <35:7 35:11>]
COMMENT: comment [b2BlockAllocator.cpp <36:7 36:12>]
COMMENT: comment [b2BlockAllocator.cpp <37:7 37:12>]
COMMENT: comment [b2BlockAllocator.cpp <38:7 38:12>]
COMMENT: comment [b2BlockAllocator.cpp <39:7 39:12>]
COMMENT: comment [b2BlockAllocator.h <1:1 17:3>]
COMMENT: comment [b2BlockAllocator.h <32:1 32:63>]
COMMENT: comment [b2BlockAllocator.h <33:1 33:54>]
COMMENT: comment [b2BlockAllocator.h <34:1 34:72>]
COMMENT: comment [b2BlockAllocator.h <41:2 41:88>]
COMMENT: comment [b2BlockAllocator.h <44:2 44:83>]
COMMENT: comment [b2Settings.h <1:1 17:3>]
COMMENT: comment [b2Settings.h <46:1 46:10>]
COMMENT: comment [b2Settings.h <47:1 47:75>]
COMMENT: comment [b2Settings.h <48:1 48:4>]
COMMENT: comment [b2Settings.h <50:1 50:13>]
COMMENT: comment [b2Settings.h <52:1 52:71>]
COMMENT: comment [b2Settings.h <53:1 53:27>]
COMMENT: comment [b2Settings.h <56:1 56:76>]
COMMENT: comment [b2Settings.h <57:1 57:70>]
COMMENT: comment [b2Settings.h <60:1 60:74>]
COMMENT: comment [b2Settings.h <61:1 61:68>]
COMMENT: comment [b2Settings.h <62:1 62:23>]
COMMENT: comment [b2Settings.h <65:1 65:78>]
COMMENT: comment [b2Settings.h <66:1 66:59>]
COMMENT: comment [b2Settings.h <67:1 67:40>]
COMMENT: comment [b2Settings.h <70:1 70:79>]
COMMENT: comment [b2Settings.h <71:1 71:70>]
COMMENT: comment [b2Settings.h <74:1 74:78>]
COMMENT: comment [b2Settings.h <75:1 75:70>]
COMMENT: comment [b2Settings.h <78:1 78:83>]
COMMENT: comment [b2Settings.h <79:1 79:91>]
COMMENT: comment [b2Settings.h <80:1 80:64>]
COMMENT: comment [b2Settings.h <83:1 83:78>]
COMMENT: comment [b2Settings.h <87:1 87:12>]
COMMENT: comment [b2Settings.h <89:1 89:68>]
COMMENT: comment [b2Settings.h <92:1 92:86>]
COMMENT: comment [b2Settings.h <93:1 93:64>]
COMMENT: comment [b2Settings.h <96:1 96:88>]
COMMENT: comment [b2Settings.h <97:1 97:23>]
COMMENT: comment [b2Settings.h <100:1 100:89>]
COMMENT: comment [b2Settings.h <101:1 101:23>]
COMMENT: comment [b2Settings.h <104:1 104:80>]
COMMENT: comment [b2Settings.h <105:1 105:70>]
COMMENT: comment [b2Settings.h <109:1 109:81>]
COMMENT: comment [b2Settings.h <110:1 110:70>]
COMMENT: comment [b2Settings.h <114:1 114:88>]
COMMENT: comment [b2Settings.h <115:1 115:89>]
COMMENT: comment [b2Settings.h <116:1 116:18>]
COMMENT: comment [b2Settings.h <121:1 121:9>]
COMMENT: comment [b2Settings.h <123:1 123:67>]
COMMENT: comment [b2Settings.h <126:1 126:72>]
COMMENT: comment [b2Settings.h <129:1 129:73>]
COMMENT: comment [b2Settings.h <132:1 132:21>]
COMMENT: comment [b2Settings.h <134:1 134:62>]
COMMENT: comment [b2Settings.h <137:1 137:71>]
COMMENT: comment [b2Settings.h <140:1 140:22>]
COMMENT: comment [b2Settings.h <143:1 143:30>]
COMMENT: comment [b2Settings.h <144:1 144:57>]
COMMENT: comment [b2Settings.h <147:16 147:40>]
COMMENT: comment [b2Settings.h <148:16 148:40>]
COMMENT: comment [b2Settings.h <149:19 149:33>]
COMMENT: comment [b2Settings.h <152:1 152:21>]
@@ -1,231 +0,0 @@
FILE: b2Settings.cpp
FILE: b2Settings.h
FILE: stddef.h non-indexed
FILE: corecrt.h non-indexed
FILE: vcruntime.h non-indexed
FILE: sal.h non-indexed
FILE: concurrencysal.h non-indexed
FILE: vadefs.h non-indexed
FILE: assert.h non-indexed
FILE: float.h non-indexed
FILE: stdio.h non-indexed
FILE: corecrt_wstdio.h non-indexed
FILE: corecrt_stdio_config.h non-indexed
FILE: stdarg.h non-indexed
FILE: stdlib.h non-indexed
FILE: corecrt_malloc.h non-indexed
FILE: corecrt_search.h non-indexed
FILE: corecrt_wstdlib.h non-indexed
FILE: limits.h non-indexed
SYMBOL_MACRO: B2_SETTINGS_H [b2Settings.h <20:9 20:21>]
SYMBOL_MACRO: b2DEBUG [b2Settings.h <27:10 27:16>]
SYMBOL_MACRO: B2_NOT_USED [b2Settings.h <30:9 <30:9 30:19> 30:33>]
SYMBOL_MACRO: b2Assert [b2Settings.h <31:9 <31:9 31:16> 31:28>]
SYMBOL_MACRO: b2_maxFloat [b2Settings.h <42:9 <42:9 42:19> 42:21>]
SYMBOL_MACRO: b2_epsilon [b2Settings.h <43:9 <43:9 43:18> 43:20>]
SYMBOL_MACRO: b2_pi [b2Settings.h <44:9 <44:9 44:13> 44:16>]
SYMBOL_MACRO: b2_maxManifoldPoints [b2Settings.h <54:9 <54:9 54:28> 54:29>]
SYMBOL_MACRO: b2_maxPolygonVertices [b2Settings.h <58:9 <58:9 58:29> 58:30>]
SYMBOL_MACRO: b2_aabbExtension [b2Settings.h <63:9 <63:9 63:24> 63:26>]
SYMBOL_MACRO: b2_aabbMultiplier [b2Settings.h <68:9 <68:9 68:25> 68:27>]
SYMBOL_MACRO: b2_linearSlop [b2Settings.h <72:9 <72:9 72:21> 72:24>]
SYMBOL_MACRO: b2_angularSlop [b2Settings.h <76:9 <76:9 76:22> 76:47>]
SYMBOL_MACRO: b2_polygonRadius [b2Settings.h <81:9 <81:9 81:24> 81:47>]
SYMBOL_MACRO: b2_maxSubSteps [b2Settings.h <84:9 <84:9 84:22> 84:25>]
SYMBOL_MACRO: b2_maxTOIContacts [b2Settings.h <90:9 <90:9 90:25> 90:28>]
SYMBOL_MACRO: b2_velocityThreshold [b2Settings.h <94:9 <94:9 94:28> 94:30>]
SYMBOL_MACRO: b2_maxLinearCorrection [b2Settings.h <98:9 <98:9 98:30> 98:32>]
SYMBOL_MACRO: b2_maxAngularCorrection [b2Settings.h <102:9 <102:9 102:31> 102:55>]
SYMBOL_MACRO: b2_maxTranslation [b2Settings.h <106:9 <106:9 106:25> 106:28>]
SYMBOL_MACRO: b2_maxTranslationSquared [b2Settings.h <107:9 <107:9 107:32> 107:71>]
SYMBOL_MACRO: b2_maxRotation [b2Settings.h <111:9 <111:9 111:22> 111:39>]
SYMBOL_MACRO: b2_maxRotationSquared [b2Settings.h <112:9 <112:9 112:29> 112:63>]
SYMBOL_MACRO: b2_baumgarte [b2Settings.h <117:9 <117:9 117:20> 117:24>]
SYMBOL_MACRO: b2_toiBaugarte [b2Settings.h <118:9 <118:9 118:22> 118:26>]
SYMBOL_MACRO: b2_timeToSleep [b2Settings.h <124:9 <124:9 124:22> 124:26>]
SYMBOL_MACRO: b2_linearSleepTolerance [b2Settings.h <127:9 <127:9 127:31> 127:33>]
SYMBOL_MACRO: b2_angularSleepTolerance [b2Settings.h <130:9 <130:9 130:32> 130:55>]
SYMBOL_TYPEDEF: int8 [b2Settings.h <33:21 33:24>]
SYMBOL_BUILTIN_TYPE: signed char
SYMBOL_TYPEDEF: int16 [b2Settings.h <34:22 34:26>]
SYMBOL_BUILTIN_TYPE: short
SYMBOL_TYPEDEF: int32 [b2Settings.h <35:20 35:24>]
SYMBOL_BUILTIN_TYPE: int
SYMBOL_TYPEDEF: uint8 [b2Settings.h <36:23 36:27>]
SYMBOL_BUILTIN_TYPE: unsigned char
SYMBOL_TYPEDEF: uint16 [b2Settings.h <37:24 37:29>]
SYMBOL_BUILTIN_TYPE: unsigned short
SYMBOL_TYPEDEF: uint32 [b2Settings.h <38:22 38:27>]
SYMBOL_BUILTIN_TYPE: unsigned int
SYMBOL_TYPEDEF: float32 [b2Settings.h <39:15 39:21>]
SYMBOL_BUILTIN_TYPE: float
SYMBOL_TYPEDEF: float64 [b2Settings.h <40:16 40:22>]
SYMBOL_BUILTIN_TYPE: double
SYMBOL_FUNCTION: void * b2Alloc(int32) [b2Settings.cpp <27:1 <27:7 27:13> 30:1>]
SYMBOL_FUNCTION: void * b2Alloc(int32) [b2Settings.h <135:1 <135:7 135:13> 135:25>]
SYMBOL_BUILTIN_TYPE: void
SYMBOL_FUNCTION: void b2Free(void *) [b2Settings.cpp <32:1 <32:6 32:11> 35:1>]
SYMBOL_FUNCTION: void b2Free(void *) [b2Settings.h <138:1 <138:6 138:11> 138:22>]
SYMBOL_FUNCTION: void b2Log(const char *) [b2Settings.cpp <38:1 <38:6 38:10> 44:1>]
SYMBOL_FUNCTION: void b2Log(const char *) [b2Settings.h <141:1 <141:6 141:10> 141:35>]
SYMBOL_BUILTIN_TYPE: char
SYMBOL_STRUCT: b2Version [b2Settings.h <145:1 <145:8 145:16> 150:1>]
SYMBOL_FIELD: public int32 b2Version::major [b2Settings.h <147:8 147:12>]
SYMBOL_FIELD: public int32 b2Version::minor [b2Settings.h <148:8 148:12>]
SYMBOL_FIELD: public int32 b2Version::revision [b2Settings.h <149:8 149:15>]
SYMBOL_GLOBAL_VARIABLE: b2Version b2_version [b2Settings.cpp <24:11 24:20>]
SYMBOL_GLOBAL_VARIABLE: b2Version b2_version [b2Settings.h <153:18 153:27>]
SYMBOL_FUNCTION: void * malloc(size_t)
SYMBOL_FUNCTION: void free(void *)
SYMBOL_FUNCTION: void __vcrt_assert_va_start_is_not_reference<const char *>::__vcrt_assert_va_start_is_not_reference()
SYMBOL_FUNCTION: int vprintf(const char * const, va_list)
REFERENCE_INCLUDE: b2Settings.cpp -> b2Settings.h [b2Settings.cpp <19:10 19:36>]
REFERENCE_MACRO_USAGE: b2Settings.h -> B2_SETTINGS_H [b2Settings.h <19:9 19:21>]
REFERENCE_INCLUDE: b2Settings.h -> stddef.h [b2Settings.h <22:10 22:19>]
REFERENCE_INCLUDE: stddef.h -> corecrt.h [stddef.h <11:10 11:20>]
REFERENCE_INCLUDE: corecrt.h -> vcruntime.h [corecrt.h <10:10 10:22>]
REFERENCE_INCLUDE: vcruntime.h -> sal.h [vcruntime.h <47:10 47:16>]
REFERENCE_INCLUDE: sal.h -> concurrencysal.h [sal.h <2990:10 2990:27>]
REFERENCE_INCLUDE: vcruntime.h -> vadefs.h [vcruntime.h <48:10 48:19>]
REFERENCE_INCLUDE: b2Settings.h -> assert.h [b2Settings.h <23:10 23:19>]
REFERENCE_INCLUDE: assert.h -> corecrt.h [assert.h <12:10 12:20>]
REFERENCE_INCLUDE: b2Settings.h -> float.h [b2Settings.h <24:10 24:18>]
REFERENCE_INCLUDE: float.h -> corecrt.h [float.h <12:10 12:20>]
REFERENCE_MACRO_USAGE: b2Settings.h -> NDEBUG [b2Settings.h <26:14 26:19>]
REFERENCE_INCLUDE: b2Settings.cpp -> stdio.h [b2Settings.cpp <20:10 20:18>]
REFERENCE_INCLUDE: stdio.h -> corecrt.h [stdio.h <11:10 11:20>]
REFERENCE_INCLUDE: stdio.h -> corecrt_wstdio.h [stdio.h <12:10 12:27>]
REFERENCE_INCLUDE: corecrt_wstdio.h -> corecrt.h [corecrt_wstdio.h <12:10 12:20>]
REFERENCE_INCLUDE: corecrt_wstdio.h -> corecrt_stdio_config.h [corecrt_wstdio.h <13:10 13:33>]
REFERENCE_INCLUDE: corecrt_stdio_config.h -> corecrt.h [corecrt_stdio_config.h <10:10 10:20>]
REFERENCE_INCLUDE: b2Settings.cpp -> stdarg.h [b2Settings.cpp <21:10 21:19>]
REFERENCE_INCLUDE: stdarg.h -> vcruntime.h [stdarg.h <11:10 11:22>]
REFERENCE_INCLUDE: b2Settings.cpp -> stdlib.h [b2Settings.cpp <22:10 22:19>]
REFERENCE_INCLUDE: stdlib.h -> corecrt.h [stdlib.h <11:10 11:20>]
REFERENCE_INCLUDE: stdlib.h -> corecrt_malloc.h [stdlib.h <12:10 12:27>]
REFERENCE_INCLUDE: corecrt_malloc.h -> corecrt.h [corecrt_malloc.h <11:10 11:20>]
REFERENCE_INCLUDE: stdlib.h -> corecrt_search.h [stdlib.h <13:10 13:27>]
REFERENCE_INCLUDE: corecrt_search.h -> corecrt.h [corecrt_search.h <13:10 13:20>]
REFERENCE_INCLUDE: corecrt_search.h -> stddef.h [corecrt_search.h <14:10 14:19>]
REFERENCE_INCLUDE: stdlib.h -> corecrt_wstdlib.h [stdlib.h <14:10 14:28>]
REFERENCE_INCLUDE: corecrt_wstdlib.h -> corecrt.h [corecrt_wstdlib.h <11:10 11:20>]
REFERENCE_INCLUDE: stdlib.h -> limits.h [stdlib.h <15:10 15:19>]
REFERENCE_INCLUDE: limits.h -> vcruntime.h [limits.h <11:10 11:22>]
REFERENCE_MACRO_USAGE: b2Settings.cpp -> va_start [b2Settings.cpp <41:2 41:9>]
REFERENCE_MACRO_USAGE: b2Settings.cpp -> va_end [b2Settings.cpp <43:2 43:7>]
REFERENCE_TYPE_USAGE: int8 -> signed char [b2Settings.h <33:9 33:14>]
REFERENCE_TYPE_USAGE: int16 -> short [b2Settings.h <34:9 34:14>]
REFERENCE_TYPE_USAGE: int32 -> int [b2Settings.h <35:9 35:14>]
REFERENCE_TYPE_USAGE: uint8 -> unsigned char [b2Settings.h <36:9 36:16>]
REFERENCE_TYPE_USAGE: uint16 -> unsigned short [b2Settings.h <37:9 37:16>]
REFERENCE_TYPE_USAGE: uint32 -> unsigned int [b2Settings.h <38:9 38:16>]
REFERENCE_TYPE_USAGE: float32 -> float [b2Settings.h <39:9 39:13>]
REFERENCE_TYPE_USAGE: float64 -> double [b2Settings.h <40:9 40:14>]
REFERENCE_TYPE_USAGE: void * b2Alloc(int32) -> void [b2Settings.cpp <27:1 27:4>]
REFERENCE_TYPE_USAGE: void * b2Alloc(int32) -> void [b2Settings.h <135:1 135:4>]
REFERENCE_TYPE_USAGE: void * b2Alloc(int32) -> int32 [b2Settings.cpp <27:15 27:19>]
REFERENCE_TYPE_USAGE: void * b2Alloc(int32) -> int32 [b2Settings.h <135:15 135:19>]
REFERENCE_TYPE_USAGE: void b2Free(void *) -> void [b2Settings.cpp <32:1 32:4>]
REFERENCE_TYPE_USAGE: void b2Free(void *) -> void [b2Settings.cpp <32:13 32:16>]
REFERENCE_TYPE_USAGE: void b2Free(void *) -> void [b2Settings.h <138:1 138:4>]
REFERENCE_TYPE_USAGE: void b2Free(void *) -> void [b2Settings.h <138:13 138:16>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> void [b2Settings.cpp <38:1 38:4>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> void [b2Settings.cpp <41:2 41:9>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> void [b2Settings.cpp <43:2 43:7>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> void [b2Settings.h <141:1 141:4>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> char [b2Settings.cpp <38:18 38:21>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> char [b2Settings.cpp <41:2 41:9>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> char [b2Settings.h <141:18 141:21>]
REFERENCE_TYPE_USAGE: int32 b2Version::major -> int32 [b2Settings.h <147:2 147:6>]
REFERENCE_TYPE_USAGE: int32 b2Version::minor -> int32 [b2Settings.h <148:2 148:6>]
REFERENCE_TYPE_USAGE: int32 b2Version::revision -> int32 [b2Settings.h <149:2 149:6>]
REFERENCE_TYPE_USAGE: b2Version b2_version -> b2Version [b2Settings.cpp <24:1 24:9>]
REFERENCE_TYPE_USAGE: b2Version b2_version -> b2Version [b2Settings.h <153:8 153:16>]
REFERENCE_CALL: void * b2Alloc(int32) -> void * malloc(size_t) [b2Settings.cpp <29:9 29:14>]
REFERENCE_CALL: void b2Free(void *) -> void free(void *) [b2Settings.cpp <34:2 34:5>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> va_list [b2Settings.cpp <40:2 40:8>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> va_list [b2Settings.cpp <41:2 41:9>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> va_list [b2Settings.cpp <43:2 43:7>]
REFERENCE_CALL: void b2Log(const char *) -> void __vcrt_assert_va_start_is_not_reference<const char *>::__vcrt_assert_va_start_is_not_reference() [b2Settings.cpp <41:2 41:9>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> __vcrt_assert_va_start_is_not_reference<const char *> [b2Settings.cpp <41:2 41:9>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> int [b2Settings.cpp <41:2 41:9>]
REFERENCE_CALL: void b2Log(const char *) -> int vprintf(const char * const, va_list) [b2Settings.cpp <42:2 42:8>]
LOCAL_SYMBOL: b2Settings.cpp<24:24> [b2Settings.cpp <24:24 24:24>]
LOCAL_SYMBOL: b2Settings.cpp<24:24> [b2Settings.cpp <24:32 24:32>]
LOCAL_SYMBOL: b2Settings.cpp<27:21> [b2Settings.cpp <27:21 27:24>]
LOCAL_SYMBOL: b2Settings.cpp<27:21> [b2Settings.cpp <29:16 29:19>]
LOCAL_SYMBOL: b2Settings.cpp<28:1> [b2Settings.cpp <28:1 28:1>]
LOCAL_SYMBOL: b2Settings.cpp<28:1> [b2Settings.cpp <30:1 30:1>]
LOCAL_SYMBOL: b2Settings.cpp<32:19> [b2Settings.cpp <32:19 32:21>]
LOCAL_SYMBOL: b2Settings.cpp<32:19> [b2Settings.cpp <34:7 34:9>]
LOCAL_SYMBOL: b2Settings.cpp<33:1> [b2Settings.cpp <33:1 33:1>]
LOCAL_SYMBOL: b2Settings.cpp<33:1> [b2Settings.cpp <35:1 35:1>]
LOCAL_SYMBOL: b2Settings.cpp<38:24> [b2Settings.cpp <38:24 38:29>]
LOCAL_SYMBOL: b2Settings.cpp<38:24> [b2Settings.cpp <41:17 41:22>]
LOCAL_SYMBOL: b2Settings.cpp<38:24> [b2Settings.cpp <42:10 42:15>]
LOCAL_SYMBOL: b2Settings.cpp<39:1> [b2Settings.cpp <39:1 39:1>]
LOCAL_SYMBOL: b2Settings.cpp<39:1> [b2Settings.cpp <44:1 44:1>]
LOCAL_SYMBOL: b2Settings.cpp<40:10> [b2Settings.cpp <40:10 40:13>]
LOCAL_SYMBOL: b2Settings.cpp<40:10> [b2Settings.cpp <41:11 41:14>]
LOCAL_SYMBOL: b2Settings.cpp<40:10> [b2Settings.cpp <42:18 42:21>]
LOCAL_SYMBOL: b2Settings.cpp<40:10> [b2Settings.cpp <43:9 43:12>]
LOCAL_SYMBOL: b2Settings.h<135:21> [b2Settings.h <135:21 135:24>]
LOCAL_SYMBOL: b2Settings.h<138:19> [b2Settings.h <138:19 138:21>]
LOCAL_SYMBOL: b2Settings.h<141:24> [b2Settings.h <141:24 141:29>]
LOCAL_SYMBOL: b2Settings.h<146:1> [b2Settings.h <146:1 146:1>]
LOCAL_SYMBOL: b2Settings.h<146:1> [b2Settings.h <150:1 150:1>]
COMMENT: comment [b2Settings.cpp <1:1 17:3>]
COMMENT: comment [b2Settings.cpp <26:1 26:62>]
COMMENT: comment [b2Settings.cpp <37:1 37:53>]
COMMENT: comment [b2Settings.h <1:1 17:3>]
COMMENT: comment [b2Settings.h <46:1 46:10>]
COMMENT: comment [b2Settings.h <47:1 47:75>]
COMMENT: comment [b2Settings.h <48:1 48:4>]
COMMENT: comment [b2Settings.h <50:1 50:13>]
COMMENT: comment [b2Settings.h <52:1 52:71>]
COMMENT: comment [b2Settings.h <53:1 53:27>]
COMMENT: comment [b2Settings.h <56:1 56:76>]
COMMENT: comment [b2Settings.h <57:1 57:70>]
COMMENT: comment [b2Settings.h <60:1 60:74>]
COMMENT: comment [b2Settings.h <61:1 61:68>]
COMMENT: comment [b2Settings.h <62:1 62:23>]
COMMENT: comment [b2Settings.h <65:1 65:78>]
COMMENT: comment [b2Settings.h <66:1 66:59>]
COMMENT: comment [b2Settings.h <67:1 67:40>]
COMMENT: comment [b2Settings.h <70:1 70:79>]
COMMENT: comment [b2Settings.h <71:1 71:70>]
COMMENT: comment [b2Settings.h <74:1 74:78>]
COMMENT: comment [b2Settings.h <75:1 75:70>]
COMMENT: comment [b2Settings.h <78:1 78:83>]
COMMENT: comment [b2Settings.h <79:1 79:91>]
COMMENT: comment [b2Settings.h <80:1 80:64>]
COMMENT: comment [b2Settings.h <83:1 83:78>]
COMMENT: comment [b2Settings.h <87:1 87:12>]
COMMENT: comment [b2Settings.h <89:1 89:68>]
COMMENT: comment [b2Settings.h <92:1 92:86>]
COMMENT: comment [b2Settings.h <93:1 93:64>]
COMMENT: comment [b2Settings.h <96:1 96:88>]
COMMENT: comment [b2Settings.h <97:1 97:23>]
COMMENT: comment [b2Settings.h <100:1 100:89>]
COMMENT: comment [b2Settings.h <101:1 101:23>]
COMMENT: comment [b2Settings.h <104:1 104:80>]
COMMENT: comment [b2Settings.h <105:1 105:70>]
COMMENT: comment [b2Settings.h <109:1 109:81>]
COMMENT: comment [b2Settings.h <110:1 110:70>]
COMMENT: comment [b2Settings.h <114:1 114:88>]
COMMENT: comment [b2Settings.h <115:1 115:89>]
COMMENT: comment [b2Settings.h <116:1 116:18>]
COMMENT: comment [b2Settings.h <121:1 121:9>]
COMMENT: comment [b2Settings.h <123:1 123:67>]
COMMENT: comment [b2Settings.h <126:1 126:72>]
COMMENT: comment [b2Settings.h <129:1 129:73>]
COMMENT: comment [b2Settings.h <132:1 132:21>]
COMMENT: comment [b2Settings.h <134:1 134:62>]
COMMENT: comment [b2Settings.h <137:1 137:71>]
COMMENT: comment [b2Settings.h <140:1 140:22>]
COMMENT: comment [b2Settings.h <143:1 143:30>]
COMMENT: comment [b2Settings.h <144:1 144:57>]
COMMENT: comment [b2Settings.h <147:16 147:40>]
COMMENT: comment [b2Settings.h <148:16 148:40>]
COMMENT: comment [b2Settings.h <149:19 149:33>]
COMMENT: comment [b2Settings.h <152:1 152:21>]
@@ -1,607 +0,0 @@
FILE: b2Timer.cpp
FILE: b2Timer.h
FILE: b2Settings.h
FILE: stddef.h non-indexed
FILE: corecrt.h non-indexed
FILE: vcruntime.h non-indexed
FILE: sal.h non-indexed
FILE: concurrencysal.h non-indexed
FILE: vadefs.h non-indexed
FILE: assert.h non-indexed
FILE: float.h non-indexed
FILE: Windows.h non-indexed
FILE: winapifamily.h non-indexed
FILE: sdkddkver.h non-indexed
FILE: excpt.h non-indexed
FILE: stdarg.h non-indexed
FILE: windef.h non-indexed
FILE: minwindef.h non-indexed
FILE: specstrings.h non-indexed
FILE: specstrings_strict.h non-indexed
FILE: specstrings_undef.h non-indexed
FILE: driverspecs.h non-indexed
FILE: sdv_driverspecs.h non-indexed
FILE: winnt.h non-indexed
FILE: ctype.h non-indexed
FILE: corecrt_wctype.h non-indexed
FILE: kernelspecs.h non-indexed
FILE: basetsd.h non-indexed
FILE: guiddef.h non-indexed
FILE: string.h non-indexed
FILE: corecrt_memory.h non-indexed
FILE: corecrt_memcpy_s.h non-indexed
FILE: errno.h non-indexed
FILE: vcruntime_string.h non-indexed
FILE: corecrt_wstring.h non-indexed
FILE: pshpack4.h non-indexed
FILE: poppack.h non-indexed
FILE: pshpack2.h non-indexed
FILE: pshpack8.h non-indexed
FILE: apiset.h non-indexed
FILE: ktmtypes.h non-indexed
FILE: WinBase.h non-indexed
FILE: apisetcconv.h non-indexed
FILE: minwinbase.h non-indexed
FILE: processenv.h non-indexed
FILE: fileapi.h non-indexed
FILE: debugapi.h non-indexed
FILE: utilapiset.h non-indexed
FILE: handleapi.h non-indexed
FILE: errhandlingapi.h non-indexed
FILE: fibersapi.h non-indexed
FILE: namedpipeapi.h non-indexed
FILE: profileapi.h non-indexed
FILE: heapapi.h non-indexed
FILE: ioapiset.h non-indexed
FILE: synchapi.h non-indexed
FILE: interlockedapi.h non-indexed
FILE: processthreadsapi.h non-indexed
FILE: sysinfoapi.h non-indexed
FILE: memoryapi.h non-indexed
FILE: threadpoollegacyapiset.h non-indexed
FILE: threadpoolapiset.h non-indexed
FILE: bemapiset.h non-indexed
FILE: jobapi.h non-indexed
FILE: wow64apiset.h non-indexed
FILE: libloaderapi.h non-indexed
FILE: securitybaseapi.h non-indexed
FILE: namespaceapi.h non-indexed
FILE: systemtopologyapi.h non-indexed
FILE: processtopologyapi.h non-indexed
FILE: securityappcontainer.h non-indexed
FILE: realtimeapiset.h non-indexed
FILE: winerror.h non-indexed
FILE: timezoneapi.h non-indexed
FILE: wingdi.h non-indexed
FILE: pshpack1.h non-indexed
FILE: WinUser.h non-indexed
FILE: tvout.h non-indexed
FILE: WinNls.h non-indexed
FILE: datetimeapi.h non-indexed
FILE: stringapiset.h non-indexed
FILE: wincon.h non-indexed
FILE: consoleapi.h non-indexed
FILE: winver.h non-indexed
FILE: verrsrc.h non-indexed
FILE: winreg.h non-indexed
FILE: reason.h non-indexed
FILE: winnetwk.h non-indexed
FILE: wnnc.h non-indexed
FILE: stralign.h non-indexed
FILE: winsvc.h non-indexed
FILE: mcx.h non-indexed
FILE: imm.h non-indexed
FILE: ime_cmodes.h non-indexed
SYMBOL_MACRO: B2_TIMER_H [b2Timer.h <20:9 20:18>]
SYMBOL_MACRO: B2_SETTINGS_H [b2Settings.h <20:9 20:21>]
SYMBOL_MACRO: b2DEBUG [b2Settings.h <27:10 27:16>]
SYMBOL_MACRO: B2_NOT_USED [b2Settings.h <30:9 <30:9 30:19> 30:33>]
SYMBOL_MACRO: b2Assert [b2Settings.h <31:9 <31:9 31:16> 31:28>]
SYMBOL_MACRO: b2_maxFloat [b2Settings.h <42:9 <42:9 42:19> 42:21>]
SYMBOL_MACRO: b2_epsilon [b2Settings.h <43:9 <43:9 43:18> 43:20>]
SYMBOL_MACRO: b2_pi [b2Settings.h <44:9 <44:9 44:13> 44:16>]
SYMBOL_MACRO: b2_maxManifoldPoints [b2Settings.h <54:9 <54:9 54:28> 54:29>]
SYMBOL_MACRO: b2_maxPolygonVertices [b2Settings.h <58:9 <58:9 58:29> 58:30>]
SYMBOL_MACRO: b2_aabbExtension [b2Settings.h <63:9 <63:9 63:24> 63:26>]
SYMBOL_MACRO: b2_aabbMultiplier [b2Settings.h <68:9 <68:9 68:25> 68:27>]
SYMBOL_MACRO: b2_linearSlop [b2Settings.h <72:9 <72:9 72:21> 72:24>]
SYMBOL_MACRO: b2_angularSlop [b2Settings.h <76:9 <76:9 76:22> 76:47>]
SYMBOL_MACRO: b2_polygonRadius [b2Settings.h <81:9 <81:9 81:24> 81:47>]
SYMBOL_MACRO: b2_maxSubSteps [b2Settings.h <84:9 <84:9 84:22> 84:25>]
SYMBOL_MACRO: b2_maxTOIContacts [b2Settings.h <90:9 <90:9 90:25> 90:28>]
SYMBOL_MACRO: b2_velocityThreshold [b2Settings.h <94:9 <94:9 94:28> 94:30>]
SYMBOL_MACRO: b2_maxLinearCorrection [b2Settings.h <98:9 <98:9 98:30> 98:32>]
SYMBOL_MACRO: b2_maxAngularCorrection [b2Settings.h <102:9 <102:9 102:31> 102:55>]
SYMBOL_MACRO: b2_maxTranslation [b2Settings.h <106:9 <106:9 106:25> 106:28>]
SYMBOL_MACRO: b2_maxTranslationSquared [b2Settings.h <107:9 <107:9 107:32> 107:71>]
SYMBOL_MACRO: b2_maxRotation [b2Settings.h <111:9 <111:9 111:22> 111:39>]
SYMBOL_MACRO: b2_maxRotationSquared [b2Settings.h <112:9 <112:9 112:29> 112:63>]
SYMBOL_MACRO: b2_baumgarte [b2Settings.h <117:9 <117:9 117:20> 117:24>]
SYMBOL_MACRO: b2_toiBaugarte [b2Settings.h <118:9 <118:9 118:22> 118:26>]
SYMBOL_MACRO: b2_timeToSleep [b2Settings.h <124:9 <124:9 124:22> 124:26>]
SYMBOL_MACRO: b2_linearSleepTolerance [b2Settings.h <127:9 <127:9 127:31> 127:33>]
SYMBOL_MACRO: b2_angularSleepTolerance [b2Settings.h <130:9 <130:9 130:32> 130:55>]
SYMBOL_MACRO: WIN32_LEAN_AND_MEAN [b2Timer.cpp <26:9 26:27>]
SYMBOL_TYPEDEF: int8 [b2Settings.h <33:21 33:24>]
SYMBOL_BUILTIN_TYPE: signed char
SYMBOL_TYPEDEF: int16 [b2Settings.h <34:22 34:26>]
SYMBOL_BUILTIN_TYPE: short
SYMBOL_TYPEDEF: int32 [b2Settings.h <35:20 35:24>]
SYMBOL_BUILTIN_TYPE: int
SYMBOL_TYPEDEF: uint8 [b2Settings.h <36:23 36:27>]
SYMBOL_BUILTIN_TYPE: unsigned char
SYMBOL_TYPEDEF: uint16 [b2Settings.h <37:24 37:29>]
SYMBOL_BUILTIN_TYPE: unsigned short
SYMBOL_TYPEDEF: uint32 [b2Settings.h <38:22 38:27>]
SYMBOL_BUILTIN_TYPE: unsigned int
SYMBOL_TYPEDEF: float32 [b2Settings.h <39:15 39:21>]
SYMBOL_BUILTIN_TYPE: float
SYMBOL_TYPEDEF: float64 [b2Settings.h <40:16 40:22>]
SYMBOL_BUILTIN_TYPE: double
SYMBOL_FUNCTION: void * b2Alloc(int32) [b2Settings.h <135:1 <135:7 135:13> 135:25>]
SYMBOL_BUILTIN_TYPE: void
SYMBOL_FUNCTION: void b2Free(void *) [b2Settings.h <138:1 <138:6 138:11> 138:22>]
SYMBOL_FUNCTION: void b2Log(const char *) [b2Settings.h <141:1 <141:6 141:10> 141:35>]
SYMBOL_BUILTIN_TYPE: char
SYMBOL_STRUCT: b2Version [b2Settings.h <145:1 <145:8 145:16> 150:1>]
SYMBOL_FIELD: public int32 b2Version::major [b2Settings.h <147:8 147:12>]
SYMBOL_FIELD: public int32 b2Version::minor [b2Settings.h <148:8 148:12>]
SYMBOL_FIELD: public int32 b2Version::revision [b2Settings.h <149:8 149:15>]
SYMBOL_GLOBAL_VARIABLE: b2Version b2_version [b2Settings.h <153:18 153:27>]
QUALIFIER: b2Timer [b2Timer.cpp <23:9 23:15>]
QUALIFIER: b2Timer [b2Timer.cpp <31:1 31:7>]
QUALIFIER: b2Timer [b2Timer.cpp <49:6 49:12>]
QUALIFIER: b2Timer [b2Timer.cpp <56:9 56:15>]
SYMBOL_CLASS: b2Timer [b2Timer.h <26:1 <26:7 26:13> 48:1>]
SYMBOL_METHOD: public void b2Timer::b2Timer() [b2Timer.cpp <31:1 <31:10 31:16> 47:1>]
SYMBOL_METHOD: public void b2Timer::b2Timer() [b2Timer.h <31:1 <31:2 <31:2 31:8> 31:10> 47:1>]
SYMBOL_METHOD: public void b2Timer::Reset() [b2Timer.cpp <49:1 <49:15 49:19> 54:1>]
SYMBOL_METHOD: public void b2Timer::Reset() [b2Timer.h <34:2 <34:7 34:11> 34:13>]
SYMBOL_METHOD: public float32 b2Timer::GetMilliseconds() const [b2Timer.cpp <56:1 <56:18 56:32> 63:1>]
SYMBOL_METHOD: public float32 b2Timer::GetMilliseconds() const [b2Timer.h <37:2 <37:10 37:24> 37:32>]
SYMBOL_FIELD: private float64 b2Timer::m_start [b2Timer.h <42:10 42:16>]
SYMBOL_FIELD: private static float64 b2Timer::s_invFrequency [b2Timer.cpp <23:18 23:31>]
SYMBOL_FIELD: private static float64 b2Timer::s_invFrequency [b2Timer.h <43:17 43:30>]
SYMBOL_METHOD: public void b2Timer::b2Timer(const b2Timer &) [b2Timer.h <26:7 <26:7 26:13> 26:13>]
SYMBOL_METHOD: public void b2Timer::b2Timer(b2Timer &&) [b2Timer.h <26:7 <26:7 26:13> 26:13>]
SYMBOL_FUNCTION: void _LARGE_INTEGER::_LARGE_INTEGER()
SYMBOL_FUNCTION: BOOL QueryPerformanceFrequency(LARGE_INTEGER *)
SYMBOL_FUNCTION: BOOL QueryPerformanceCounter(LARGE_INTEGER *)
REFERENCE_INCLUDE: b2Timer.cpp -> b2Timer.h [b2Timer.cpp <19:10 19:33>]
REFERENCE_MACRO_USAGE: b2Timer.h -> B2_TIMER_H [b2Timer.h <19:9 19:18>]
REFERENCE_INCLUDE: b2Timer.h -> b2Settings.h [b2Timer.h <22:10 22:36>]
REFERENCE_MACRO_USAGE: b2Settings.h -> B2_SETTINGS_H [b2Settings.h <19:9 19:21>]
REFERENCE_INCLUDE: b2Settings.h -> stddef.h [b2Settings.h <22:10 22:19>]
REFERENCE_INCLUDE: stddef.h -> corecrt.h [stddef.h <11:10 11:20>]
REFERENCE_INCLUDE: corecrt.h -> vcruntime.h [corecrt.h <10:10 10:22>]
REFERENCE_INCLUDE: vcruntime.h -> sal.h [vcruntime.h <47:10 47:16>]
REFERENCE_INCLUDE: sal.h -> concurrencysal.h [sal.h <2990:10 2990:27>]
REFERENCE_INCLUDE: vcruntime.h -> vadefs.h [vcruntime.h <48:10 48:19>]
REFERENCE_INCLUDE: b2Settings.h -> assert.h [b2Settings.h <23:10 23:19>]
REFERENCE_INCLUDE: assert.h -> corecrt.h [assert.h <12:10 12:20>]
REFERENCE_INCLUDE: b2Settings.h -> float.h [b2Settings.h <24:10 24:18>]
REFERENCE_INCLUDE: float.h -> corecrt.h [float.h <12:10 12:20>]
REFERENCE_MACRO_USAGE: b2Settings.h -> NDEBUG [b2Settings.h <26:14 26:19>]
REFERENCE_MACRO_USAGE: b2Timer.h -> _WIN32 [b2Timer.h <41:13 41:18>]
REFERENCE_MACRO_USAGE: b2Timer.cpp -> _WIN32 [b2Timer.cpp <21:13 21:18>]
REFERENCE_MACRO_USAGE: b2Timer.cpp -> WIN32_LEAN_AND_MEAN [b2Timer.cpp <25:9 25:27>]
REFERENCE_INCLUDE: b2Timer.cpp -> Windows.h [b2Timer.cpp <29:10 29:20>]
REFERENCE_INCLUDE: Windows.h -> winapifamily.h [Windows.h <1:10 1:25>]
REFERENCE_INCLUDE: Windows.h -> sdkddkver.h [Windows.h <22:10 22:22>]
REFERENCE_INCLUDE: Windows.h -> excpt.h [Windows.h <160:10 160:18>]
REFERENCE_INCLUDE: excpt.h -> vcruntime.h [excpt.h <12:10 12:22>]
REFERENCE_INCLUDE: Windows.h -> stdarg.h [Windows.h <161:10 161:19>]
REFERENCE_INCLUDE: stdarg.h -> vcruntime.h [stdarg.h <11:10 11:22>]
REFERENCE_INCLUDE: Windows.h -> windef.h [Windows.h <164:10 164:19>]
REFERENCE_INCLUDE: windef.h -> winapifamily.h [windef.h <1:10 1:25>]
REFERENCE_INCLUDE: windef.h -> minwindef.h [windef.h <24:10 24:22>]
REFERENCE_INCLUDE: minwindef.h -> specstrings.h [minwindef.h <14:10 14:24>]
REFERENCE_INCLUDE: specstrings.h -> sal.h [specstrings.h <56:10 56:16>]
REFERENCE_INCLUDE: specstrings.h -> specstrings_strict.h [specstrings.h <513:10 513:31>]
REFERENCE_INCLUDE: specstrings_strict.h -> specstrings_undef.h [specstrings_strict.h <188:10 188:30>]
REFERENCE_INCLUDE: specstrings.h -> driverspecs.h [specstrings.h <534:10 534:24>]
REFERENCE_INCLUDE: driverspecs.h -> sdv_driverspecs.h [driverspecs.h <125:10 125:28>]
REFERENCE_INCLUDE: driverspecs.h -> concurrencysal.h [driverspecs.h <126:10 126:27>]
REFERENCE_INCLUDE: minwindef.h -> winapifamily.h [minwindef.h <16:10 16:25>]
REFERENCE_INCLUDE: minwindef.h -> winnt.h [minwindef.h <182:10 182:18>]
REFERENCE_INCLUDE: winnt.h -> ctype.h [winnt.h <31:10 31:18>]
REFERENCE_INCLUDE: ctype.h -> corecrt.h [ctype.h <11:10 11:20>]
REFERENCE_INCLUDE: ctype.h -> corecrt_wctype.h [ctype.h <12:10 12:27>]
REFERENCE_INCLUDE: corecrt_wctype.h -> corecrt.h [corecrt_wctype.h <11:10 11:20>]
REFERENCE_INCLUDE: winnt.h -> winapifamily.h [winnt.h <32:10 32:25>]
REFERENCE_INCLUDE: winnt.h -> specstrings.h [winnt.h <82:10 82:24>]
REFERENCE_INCLUDE: winnt.h -> kernelspecs.h [winnt.h <83:10 83:24>]
REFERENCE_INCLUDE: kernelspecs.h -> driverspecs.h [kernelspecs.h <36:10 36:24>]
REFERENCE_INCLUDE: winnt.h -> basetsd.h [winnt.h <171:10 171:20>]
REFERENCE_INCLUDE: winnt.h -> guiddef.h [winnt.h <1083:10 1083:20>]
REFERENCE_INCLUDE: guiddef.h -> string.h [guiddef.h <146:10 146:19>]
REFERENCE_INCLUDE: string.h -> corecrt.h [string.h <11:10 11:20>]
REFERENCE_INCLUDE: string.h -> corecrt_memory.h [string.h <12:10 12:27>]
REFERENCE_INCLUDE: corecrt_memory.h -> corecrt.h [corecrt_memory.h <13:10 13:20>]
REFERENCE_INCLUDE: corecrt_memory.h -> corecrt_memcpy_s.h [corecrt_memory.h <14:10 14:29>]
REFERENCE_INCLUDE: corecrt_memcpy_s.h -> corecrt.h [corecrt_memcpy_s.h <10:10 10:20>]
REFERENCE_INCLUDE: corecrt_memcpy_s.h -> errno.h [corecrt_memcpy_s.h <11:10 11:18>]
REFERENCE_INCLUDE: errno.h -> corecrt.h [errno.h <11:10 11:20>]
REFERENCE_INCLUDE: corecrt_memcpy_s.h -> vcruntime_string.h [corecrt_memcpy_s.h <12:10 12:29>]
REFERENCE_INCLUDE: vcruntime_string.h -> vcruntime.h [vcruntime_string.h <10:10 10:22>]
REFERENCE_INCLUDE: corecrt_memory.h -> vcruntime_string.h [corecrt_memory.h <15:10 15:29>]
REFERENCE_INCLUDE: string.h -> corecrt_wstring.h [string.h <13:10 13:28>]
REFERENCE_INCLUDE: corecrt_wstring.h -> corecrt.h [corecrt_wstring.h <11:10 11:20>]
REFERENCE_INCLUDE: corecrt_wstring.h -> vcruntime_string.h [corecrt_wstring.h <12:10 12:29>]
REFERENCE_INCLUDE: string.h -> vcruntime_string.h [string.h <14:10 14:29>]
REFERENCE_INCLUDE: winnt.h -> excpt.h [winnt.h <1304:10 1304:18>]
REFERENCE_INCLUDE: winnt.h -> sdkddkver.h [winnt.h <1466:10 1466:22>]
REFERENCE_INCLUDE: winnt.h -> pshpack4.h [winnt.h <5937:10 5937:21>]
REFERENCE_INCLUDE: winnt.h -> pshpack4.h [winnt.h <8835:10 8835:21>]
REFERENCE_INCLUDE: winnt.h -> pshpack4.h [winnt.h <9168:10 9168:21>]
REFERENCE_INCLUDE: winnt.h -> pshpack4.h [winnt.h <14869:10 14869:21>]
REFERENCE_INCLUDE: winnt.h -> poppack.h [winnt.h <6037:10 6037:20>]
REFERENCE_INCLUDE: winnt.h -> poppack.h [winnt.h <8935:10 8935:20>]
REFERENCE_INCLUDE: winnt.h -> poppack.h [winnt.h <9177:10 9177:20>]
REFERENCE_INCLUDE: winnt.h -> poppack.h [winnt.h <14999:10 14999:20>]
REFERENCE_INCLUDE: winnt.h -> poppack.h [winnt.h <15579:10 15579:20>]
REFERENCE_INCLUDE: winnt.h -> poppack.h [winnt.h <16074:10 16074:20>]
REFERENCE_INCLUDE: winnt.h -> poppack.h [winnt.h <16183:10 16183:20>]
REFERENCE_INCLUDE: winnt.h -> poppack.h [winnt.h <16764:10 16764:20>]
REFERENCE_INCLUDE: winnt.h -> pshpack2.h [winnt.h <14877:10 14877:21>]
REFERENCE_INCLUDE: winnt.h -> pshpack2.h [winnt.h <15405:10 15405:21>]
REFERENCE_INCLUDE: winnt.h -> pshpack2.h [winnt.h <15568:10 15568:21>]
REFERENCE_INCLUDE: winnt.h -> pshpack8.h [winnt.h <16171:10 16171:21>]
REFERENCE_INCLUDE: winnt.h -> apiset.h [winnt.h <16892:10 16892:19>]
REFERENCE_INCLUDE: winnt.h -> string.h [winnt.h <17464:10 17464:19>]
REFERENCE_INCLUDE: winnt.h -> ktmtypes.h [winnt.h <19112:10 19112:21>]
REFERENCE_INCLUDE: windef.h -> winnt.h [windef.h <31:10 31:18>]
REFERENCE_INCLUDE: Windows.h -> WinBase.h [Windows.h <165:10 165:20>]
REFERENCE_INCLUDE: WinBase.h -> winapifamily.h [WinBase.h <1:10 1:25>]
REFERENCE_INCLUDE: WinBase.h -> apisetcconv.h [WinBase.h <30:10 30:24>]
REFERENCE_INCLUDE: WinBase.h -> minwinbase.h [WinBase.h <31:10 31:23>]
REFERENCE_INCLUDE: WinBase.h -> processenv.h [WinBase.h <37:10 37:23>]
REFERENCE_INCLUDE: processenv.h -> apiset.h [processenv.h <19:10 19:19>]
REFERENCE_INCLUDE: processenv.h -> apisetcconv.h [processenv.h <20:10 20:24>]
REFERENCE_INCLUDE: processenv.h -> minwindef.h [processenv.h <23:10 23:22>]
REFERENCE_INCLUDE: WinBase.h -> fileapi.h [WinBase.h <38:10 38:20>]
REFERENCE_INCLUDE: fileapi.h -> apiset.h [fileapi.h <21:10 21:19>]
REFERENCE_INCLUDE: fileapi.h -> apisetcconv.h [fileapi.h <22:10 22:24>]
REFERENCE_INCLUDE: fileapi.h -> minwindef.h [fileapi.h <23:10 23:22>]
REFERENCE_INCLUDE: fileapi.h -> minwinbase.h [fileapi.h <24:10 24:23>]
REFERENCE_INCLUDE: WinBase.h -> debugapi.h [WinBase.h <39:10 39:21>]
REFERENCE_INCLUDE: debugapi.h -> apiset.h [debugapi.h <19:10 19:19>]
REFERENCE_INCLUDE: debugapi.h -> apisetcconv.h [debugapi.h <20:10 20:24>]
REFERENCE_INCLUDE: debugapi.h -> minwindef.h [debugapi.h <21:10 21:22>]
REFERENCE_INCLUDE: debugapi.h -> minwinbase.h [debugapi.h <22:10 22:23>]
REFERENCE_INCLUDE: WinBase.h -> utilapiset.h [WinBase.h <40:10 40:23>]
REFERENCE_INCLUDE: utilapiset.h -> apiset.h [utilapiset.h <17:10 17:19>]
REFERENCE_INCLUDE: utilapiset.h -> apisetcconv.h [utilapiset.h <18:10 18:24>]
REFERENCE_INCLUDE: utilapiset.h -> minwindef.h [utilapiset.h <19:10 19:22>]
REFERENCE_INCLUDE: WinBase.h -> handleapi.h [WinBase.h <41:10 41:22>]
REFERENCE_INCLUDE: handleapi.h -> apiset.h [handleapi.h <17:10 17:19>]
REFERENCE_INCLUDE: handleapi.h -> apisetcconv.h [handleapi.h <18:10 18:24>]
REFERENCE_INCLUDE: handleapi.h -> minwindef.h [handleapi.h <19:10 19:22>]
REFERENCE_INCLUDE: WinBase.h -> errhandlingapi.h [WinBase.h <42:10 42:27>]
REFERENCE_INCLUDE: errhandlingapi.h -> apiset.h [errhandlingapi.h <19:10 19:19>]
REFERENCE_INCLUDE: errhandlingapi.h -> apisetcconv.h [errhandlingapi.h <20:10 20:24>]
REFERENCE_INCLUDE: errhandlingapi.h -> minwindef.h [errhandlingapi.h <21:10 21:22>]
REFERENCE_INCLUDE: WinBase.h -> fibersapi.h [WinBase.h <43:10 43:22>]
REFERENCE_INCLUDE: fibersapi.h -> apiset.h [fibersapi.h <19:10 19:19>]
REFERENCE_INCLUDE: fibersapi.h -> apisetcconv.h [fibersapi.h <20:10 20:24>]
REFERENCE_INCLUDE: fibersapi.h -> minwindef.h [fibersapi.h <21:10 21:22>]
REFERENCE_INCLUDE: WinBase.h -> namedpipeapi.h [WinBase.h <44:10 44:25>]
REFERENCE_INCLUDE: namedpipeapi.h -> apiset.h [namedpipeapi.h <19:10 19:19>]
REFERENCE_INCLUDE: namedpipeapi.h -> apisetcconv.h [namedpipeapi.h <20:10 20:24>]
REFERENCE_INCLUDE: namedpipeapi.h -> minwindef.h [namedpipeapi.h <21:10 21:22>]
REFERENCE_INCLUDE: namedpipeapi.h -> minwinbase.h [namedpipeapi.h <22:10 22:23>]
REFERENCE_INCLUDE: WinBase.h -> profileapi.h [WinBase.h <45:10 45:23>]
REFERENCE_INCLUDE: profileapi.h -> apiset.h [profileapi.h <17:10 17:19>]
REFERENCE_INCLUDE: profileapi.h -> apisetcconv.h [profileapi.h <18:10 18:24>]
REFERENCE_INCLUDE: profileapi.h -> minwindef.h [profileapi.h <19:10 19:22>]
REFERENCE_INCLUDE: WinBase.h -> heapapi.h [WinBase.h <46:10 46:20>]
REFERENCE_INCLUDE: heapapi.h -> apiset.h [heapapi.h <17:10 17:19>]
REFERENCE_INCLUDE: heapapi.h -> apisetcconv.h [heapapi.h <18:10 18:24>]
REFERENCE_INCLUDE: heapapi.h -> minwindef.h [heapapi.h <19:10 19:22>]
REFERENCE_INCLUDE: heapapi.h -> minwinbase.h [heapapi.h <20:10 20:23>]
REFERENCE_INCLUDE: WinBase.h -> ioapiset.h [WinBase.h <47:10 47:21>]
REFERENCE_INCLUDE: ioapiset.h -> apiset.h [ioapiset.h <19:10 19:19>]
REFERENCE_INCLUDE: ioapiset.h -> apisetcconv.h [ioapiset.h <20:10 20:24>]
REFERENCE_INCLUDE: ioapiset.h -> minwindef.h [ioapiset.h <21:10 21:22>]
REFERENCE_INCLUDE: ioapiset.h -> minwinbase.h [ioapiset.h <22:10 22:23>]
REFERENCE_INCLUDE: WinBase.h -> synchapi.h [WinBase.h <48:10 48:21>]
REFERENCE_INCLUDE: synchapi.h -> apiset.h [synchapi.h <20:10 20:19>]
REFERENCE_INCLUDE: synchapi.h -> apisetcconv.h [synchapi.h <21:10 21:24>]
REFERENCE_INCLUDE: synchapi.h -> minwindef.h [synchapi.h <22:10 22:22>]
REFERENCE_INCLUDE: synchapi.h -> minwinbase.h [synchapi.h <23:10 23:23>]
REFERENCE_INCLUDE: WinBase.h -> interlockedapi.h [WinBase.h <49:10 49:27>]
REFERENCE_INCLUDE: interlockedapi.h -> apiset.h [interlockedapi.h <19:10 19:19>]
REFERENCE_INCLUDE: interlockedapi.h -> apisetcconv.h [interlockedapi.h <20:10 20:24>]
REFERENCE_INCLUDE: interlockedapi.h -> minwindef.h [interlockedapi.h <21:10 21:22>]
REFERENCE_INCLUDE: WinBase.h -> processthreadsapi.h [WinBase.h <50:10 50:30>]
REFERENCE_INCLUDE: processthreadsapi.h -> apiset.h [processthreadsapi.h <20:10 20:19>]
REFERENCE_INCLUDE: processthreadsapi.h -> apisetcconv.h [processthreadsapi.h <21:10 21:24>]
REFERENCE_INCLUDE: processthreadsapi.h -> minwindef.h [processthreadsapi.h <22:10 22:22>]
REFERENCE_INCLUDE: processthreadsapi.h -> minwinbase.h [processthreadsapi.h <23:10 23:23>]
REFERENCE_INCLUDE: WinBase.h -> sysinfoapi.h [WinBase.h <51:10 51:23>]
REFERENCE_INCLUDE: sysinfoapi.h -> apiset.h [sysinfoapi.h <21:10 21:19>]
REFERENCE_INCLUDE: sysinfoapi.h -> apisetcconv.h [sysinfoapi.h <22:10 22:24>]
REFERENCE_INCLUDE: sysinfoapi.h -> minwindef.h [sysinfoapi.h <23:10 23:22>]
REFERENCE_INCLUDE: sysinfoapi.h -> minwinbase.h [sysinfoapi.h <24:10 24:23>]
REFERENCE_INCLUDE: WinBase.h -> memoryapi.h [WinBase.h <52:10 52:22>]
REFERENCE_INCLUDE: memoryapi.h -> apiset.h [memoryapi.h <20:10 20:19>]
REFERENCE_INCLUDE: memoryapi.h -> apisetcconv.h [memoryapi.h <21:10 21:24>]
REFERENCE_INCLUDE: memoryapi.h -> minwindef.h [memoryapi.h <22:10 22:22>]
REFERENCE_INCLUDE: memoryapi.h -> minwinbase.h [memoryapi.h <23:10 23:23>]
REFERENCE_INCLUDE: WinBase.h -> threadpoollegacyapiset.h [WinBase.h <53:10 53:35>]
REFERENCE_INCLUDE: threadpoollegacyapiset.h -> apiset.h [threadpoollegacyapiset.h <17:10 17:19>]
REFERENCE_INCLUDE: threadpoollegacyapiset.h -> apisetcconv.h [threadpoollegacyapiset.h <18:10 18:24>]
REFERENCE_INCLUDE: threadpoollegacyapiset.h -> minwindef.h [threadpoollegacyapiset.h <19:10 19:22>]
REFERENCE_INCLUDE: threadpoollegacyapiset.h -> minwinbase.h [threadpoollegacyapiset.h <20:10 20:23>]
REFERENCE_INCLUDE: WinBase.h -> threadpoolapiset.h [WinBase.h <54:10 54:29>]
REFERENCE_INCLUDE: threadpoolapiset.h -> apiset.h [threadpoolapiset.h <18:10 18:19>]
REFERENCE_INCLUDE: threadpoolapiset.h -> apisetcconv.h [threadpoolapiset.h <19:10 19:24>]
REFERENCE_INCLUDE: threadpoolapiset.h -> minwindef.h [threadpoolapiset.h <20:10 20:22>]
REFERENCE_INCLUDE: threadpoolapiset.h -> minwinbase.h [threadpoolapiset.h <21:10 21:23>]
REFERENCE_INCLUDE: WinBase.h -> bemapiset.h [WinBase.h <55:10 55:22>]
REFERENCE_INCLUDE: bemapiset.h -> apiset.h [bemapiset.h <17:10 17:19>]
REFERENCE_INCLUDE: bemapiset.h -> apisetcconv.h [bemapiset.h <18:10 18:24>]
REFERENCE_INCLUDE: bemapiset.h -> minwindef.h [bemapiset.h <19:10 19:22>]
REFERENCE_INCLUDE: bemapiset.h -> minwinbase.h [bemapiset.h <20:10 20:23>]
REFERENCE_INCLUDE: WinBase.h -> jobapi.h [WinBase.h <56:10 56:19>]
REFERENCE_INCLUDE: jobapi.h -> apiset.h [jobapi.h <17:10 17:19>]
REFERENCE_INCLUDE: jobapi.h -> apisetcconv.h [jobapi.h <18:10 18:24>]
REFERENCE_INCLUDE: jobapi.h -> minwindef.h [jobapi.h <19:10 19:22>]
REFERENCE_INCLUDE: jobapi.h -> minwinbase.h [jobapi.h <20:10 20:23>]
REFERENCE_INCLUDE: WinBase.h -> wow64apiset.h [WinBase.h <57:10 57:24>]
REFERENCE_INCLUDE: wow64apiset.h -> apiset.h [wow64apiset.h <17:10 17:19>]
REFERENCE_INCLUDE: wow64apiset.h -> apisetcconv.h [wow64apiset.h <18:10 18:24>]
REFERENCE_INCLUDE: wow64apiset.h -> minwindef.h [wow64apiset.h <19:10 19:22>]
REFERENCE_INCLUDE: wow64apiset.h -> minwinbase.h [wow64apiset.h <20:10 20:23>]
REFERENCE_INCLUDE: WinBase.h -> libloaderapi.h [WinBase.h <58:10 58:25>]
REFERENCE_INCLUDE: libloaderapi.h -> apiset.h [libloaderapi.h <20:10 20:19>]
REFERENCE_INCLUDE: libloaderapi.h -> apisetcconv.h [libloaderapi.h <21:10 21:24>]
REFERENCE_INCLUDE: libloaderapi.h -> minwindef.h [libloaderapi.h <22:10 22:22>]
REFERENCE_INCLUDE: libloaderapi.h -> minwinbase.h [libloaderapi.h <23:10 23:23>]
REFERENCE_INCLUDE: WinBase.h -> securitybaseapi.h [WinBase.h <59:10 59:28>]
REFERENCE_INCLUDE: securitybaseapi.h -> apiset.h [securitybaseapi.h <19:10 19:19>]
REFERENCE_INCLUDE: securitybaseapi.h -> apisetcconv.h [securitybaseapi.h <20:10 20:24>]
REFERENCE_INCLUDE: securitybaseapi.h -> minwindef.h [securitybaseapi.h <21:10 21:22>]
REFERENCE_INCLUDE: securitybaseapi.h -> minwinbase.h [securitybaseapi.h <22:10 22:23>]
REFERENCE_INCLUDE: WinBase.h -> namespaceapi.h [WinBase.h <60:10 60:25>]
REFERENCE_INCLUDE: namespaceapi.h -> apiset.h [namespaceapi.h <17:10 17:19>]
REFERENCE_INCLUDE: namespaceapi.h -> apisetcconv.h [namespaceapi.h <18:10 18:24>]
REFERENCE_INCLUDE: namespaceapi.h -> minwindef.h [namespaceapi.h <19:10 19:22>]
REFERENCE_INCLUDE: namespaceapi.h -> minwinbase.h [namespaceapi.h <20:10 20:23>]
REFERENCE_INCLUDE: WinBase.h -> systemtopologyapi.h [WinBase.h <61:10 61:30>]
REFERENCE_INCLUDE: systemtopologyapi.h -> apiset.h [systemtopologyapi.h <17:10 17:19>]
REFERENCE_INCLUDE: systemtopologyapi.h -> apisetcconv.h [systemtopologyapi.h <18:10 18:24>]
REFERENCE_INCLUDE: systemtopologyapi.h -> minwindef.h [systemtopologyapi.h <19:10 19:22>]
REFERENCE_INCLUDE: systemtopologyapi.h -> minwinbase.h [systemtopologyapi.h <20:10 20:23>]
REFERENCE_INCLUDE: WinBase.h -> processtopologyapi.h [WinBase.h <62:10 62:31>]
REFERENCE_INCLUDE: processtopologyapi.h -> apiset.h [processtopologyapi.h <18:10 18:19>]
REFERENCE_INCLUDE: processtopologyapi.h -> apisetcconv.h [processtopologyapi.h <19:10 19:24>]
REFERENCE_INCLUDE: processtopologyapi.h -> minwindef.h [processtopologyapi.h <20:10 20:22>]
REFERENCE_INCLUDE: processtopologyapi.h -> minwinbase.h [processtopologyapi.h <21:10 21:23>]
REFERENCE_INCLUDE: WinBase.h -> securityappcontainer.h [WinBase.h <63:10 63:33>]
REFERENCE_INCLUDE: securityappcontainer.h -> apiset.h [securityappcontainer.h <17:10 17:19>]
REFERENCE_INCLUDE: securityappcontainer.h -> apisetcconv.h [securityappcontainer.h <18:10 18:24>]
REFERENCE_INCLUDE: securityappcontainer.h -> minwindef.h [securityappcontainer.h <21:10 21:22>]
REFERENCE_INCLUDE: securityappcontainer.h -> minwinbase.h [securityappcontainer.h <22:10 22:23>]
REFERENCE_INCLUDE: WinBase.h -> realtimeapiset.h [WinBase.h <64:10 64:27>]
REFERENCE_INCLUDE: realtimeapiset.h -> apiset.h [realtimeapiset.h <17:10 17:19>]
REFERENCE_INCLUDE: realtimeapiset.h -> apisetcconv.h [realtimeapiset.h <18:10 18:24>]
REFERENCE_INCLUDE: realtimeapiset.h -> minwindef.h [realtimeapiset.h <19:10 19:22>]
REFERENCE_INCLUDE: WinBase.h -> winerror.h [WinBase.h <7358:10 7358:21>]
REFERENCE_INCLUDE: winerror.h -> specstrings.h [winerror.h <24:10 24:24>]
REFERENCE_INCLUDE: WinBase.h -> timezoneapi.h [WinBase.h <7359:10 7359:24>]
REFERENCE_INCLUDE: timezoneapi.h -> apiset.h [timezoneapi.h <18:10 18:19>]
REFERENCE_INCLUDE: timezoneapi.h -> apisetcconv.h [timezoneapi.h <19:10 19:24>]
REFERENCE_INCLUDE: timezoneapi.h -> minwindef.h [timezoneapi.h <20:10 20:22>]
REFERENCE_INCLUDE: timezoneapi.h -> minwinbase.h [timezoneapi.h <21:10 21:23>]
REFERENCE_INCLUDE: Windows.h -> wingdi.h [Windows.h <166:10 166:19>]
REFERENCE_INCLUDE: wingdi.h -> winapifamily.h [wingdi.h <1:10 1:25>]
REFERENCE_INCLUDE: wingdi.h -> pshpack1.h [wingdi.h <611:10 611:21>]
REFERENCE_INCLUDE: wingdi.h -> poppack.h [wingdi.h <625:10 625:20>]
REFERENCE_INCLUDE: wingdi.h -> poppack.h [wingdi.h <944:10 944:20>]
REFERENCE_INCLUDE: wingdi.h -> poppack.h [wingdi.h <1060:10 1060:20>]
REFERENCE_INCLUDE: wingdi.h -> poppack.h [wingdi.h <1204:10 1204:20>]
REFERENCE_INCLUDE: wingdi.h -> poppack.h [wingdi.h <1295:10 1295:20>]
REFERENCE_INCLUDE: wingdi.h -> pshpack2.h [wingdi.h <928:10 928:21>]
REFERENCE_INCLUDE: wingdi.h -> pshpack2.h [wingdi.h <1039:10 1039:21>]
REFERENCE_INCLUDE: wingdi.h -> pshpack4.h [wingdi.h <1138:10 1138:21>]
REFERENCE_INCLUDE: wingdi.h -> pshpack4.h [wingdi.h <1221:10 1221:21>]
REFERENCE_INCLUDE: Windows.h -> WinUser.h [Windows.h <167:10 167:20>]
REFERENCE_INCLUDE: WinUser.h -> winapifamily.h [WinUser.h <1:10 1:25>]
REFERENCE_INCLUDE: WinUser.h -> stdarg.h [WinUser.h <51:10 51:19>]
REFERENCE_INCLUDE: WinUser.h -> libloaderapi.h [WinUser.h <54:10 54:25>]
REFERENCE_INCLUDE: WinUser.h -> pshpack2.h [WinUser.h <4686:10 4686:21>]
REFERENCE_INCLUDE: WinUser.h -> poppack.h [WinUser.h <4770:10 4770:20>]
REFERENCE_INCLUDE: WinUser.h -> tvout.h [WinUser.h <12344:10 12344:18>]
REFERENCE_INCLUDE: tvout.h -> winapifamily.h [tvout.h <1:10 1:25>]
REFERENCE_INCLUDE: Windows.h -> WinNls.h [Windows.h <169:10 169:19>]
REFERENCE_INCLUDE: WinNls.h -> winapifamily.h [WinNls.h <20:10 20:25>]
REFERENCE_INCLUDE: WinNls.h -> datetimeapi.h [WinNls.h <30:10 30:24>]
REFERENCE_INCLUDE: datetimeapi.h -> apiset.h [datetimeapi.h <19:10 19:19>]
REFERENCE_INCLUDE: datetimeapi.h -> apisetcconv.h [datetimeapi.h <20:10 20:24>]
REFERENCE_INCLUDE: datetimeapi.h -> minwindef.h [datetimeapi.h <21:10 21:22>]
REFERENCE_INCLUDE: datetimeapi.h -> minwinbase.h [datetimeapi.h <22:10 22:23>]
REFERENCE_INCLUDE: WinNls.h -> libloaderapi.h [WinNls.h <31:10 31:25>]
REFERENCE_INCLUDE: WinNls.h -> stringapiset.h [WinNls.h <1279:10 1279:25>]
REFERENCE_INCLUDE: stringapiset.h -> apiset.h [stringapiset.h <17:10 17:19>]
REFERENCE_INCLUDE: stringapiset.h -> apisetcconv.h [stringapiset.h <18:10 18:24>]
REFERENCE_INCLUDE: stringapiset.h -> minwindef.h [stringapiset.h <19:10 19:22>]
REFERENCE_INCLUDE: stringapiset.h -> WinNls.h [stringapiset.h <20:10 20:19>]
REFERENCE_INCLUDE: Windows.h -> wincon.h [Windows.h <172:10 172:19>]
REFERENCE_INCLUDE: wincon.h -> winapifamily.h [wincon.h <1:10 1:25>]
REFERENCE_INCLUDE: wincon.h -> wingdi.h [wincon.h <34:10 34:19>]
REFERENCE_INCLUDE: wincon.h -> consoleapi.h [wincon.h <817:10 817:23>]
REFERENCE_INCLUDE: consoleapi.h -> apiset.h [consoleapi.h <17:10 17:19>]
REFERENCE_INCLUDE: consoleapi.h -> apisetcconv.h [consoleapi.h <18:10 18:24>]
REFERENCE_INCLUDE: consoleapi.h -> Windows.h [consoleapi.h <21:10 21:20>]
REFERENCE_INCLUDE: Windows.h -> winver.h [Windows.h <173:10 173:19>]
REFERENCE_INCLUDE: winver.h -> winapifamily.h [winver.h <1:10 1:25>]
REFERENCE_INCLUDE: winver.h -> specstrings.h [winver.h <18:10 18:24>]
REFERENCE_INCLUDE: winver.h -> verrsrc.h [winver.h <19:10 19:20>]
REFERENCE_INCLUDE: verrsrc.h -> winapifamily.h [verrsrc.h <1:10 1:25>]
REFERENCE_INCLUDE: Windows.h -> winreg.h [Windows.h <176:10 176:19>]
REFERENCE_INCLUDE: winreg.h -> winapifamily.h [winreg.h <20:10 20:25>]
REFERENCE_INCLUDE: winreg.h -> apiset.h [winreg.h <22:10 22:19>]
REFERENCE_INCLUDE: winreg.h -> apisetcconv.h [winreg.h <23:10 23:24>]
REFERENCE_INCLUDE: winreg.h -> minwindef.h [winreg.h <24:10 24:22>]
REFERENCE_INCLUDE: winreg.h -> minwinbase.h [winreg.h <25:10 25:23>]
REFERENCE_INCLUDE: winreg.h -> reason.h [winreg.h <1316:10 1316:19>]
REFERENCE_INCLUDE: reason.h -> winapifamily.h [reason.h <1:10 1:25>]
REFERENCE_INCLUDE: Windows.h -> winnetwk.h [Windows.h <179:10 179:21>]
REFERENCE_INCLUDE: winnetwk.h -> winapifamily.h [winnetwk.h <1:10 1:25>]
REFERENCE_INCLUDE: winnetwk.h -> wnnc.h [winnetwk.h <43:10 43:17>]
REFERENCE_INCLUDE: wnnc.h -> winapifamily.h [wnnc.h <1:10 1:25>]
REFERENCE_INCLUDE: Windows.h -> stralign.h [Windows.h <217:10 217:21>]
REFERENCE_INCLUDE: stralign.h -> winapifamily.h [stralign.h <1:10 1:25>]
REFERENCE_INCLUDE: Windows.h -> winsvc.h [Windows.h <230:10 230:19>]
REFERENCE_INCLUDE: winsvc.h -> winapifamily.h [winsvc.h <21:10 21:25>]
REFERENCE_INCLUDE: Windows.h -> mcx.h [Windows.h <235:10 235:16>]
REFERENCE_INCLUDE: Windows.h -> imm.h [Windows.h <239:10 239:16>]
REFERENCE_INCLUDE: imm.h -> winapifamily.h [imm.h <1:10 1:25>]
REFERENCE_INCLUDE: imm.h -> ime_cmodes.h [imm.h <638:10 638:23>]
REFERENCE_TYPE_USAGE: int8 -> signed char [b2Settings.h <33:9 33:14>]
REFERENCE_TYPE_USAGE: int16 -> short [b2Settings.h <34:9 34:14>]
REFERENCE_TYPE_USAGE: int32 -> int [b2Settings.h <35:9 35:14>]
REFERENCE_TYPE_USAGE: uint8 -> unsigned char [b2Settings.h <36:9 36:16>]
REFERENCE_TYPE_USAGE: uint16 -> unsigned short [b2Settings.h <37:9 37:16>]
REFERENCE_TYPE_USAGE: uint32 -> unsigned int [b2Settings.h <38:9 38:16>]
REFERENCE_TYPE_USAGE: float32 -> float [b2Settings.h <39:9 39:13>]
REFERENCE_TYPE_USAGE: float64 -> double [b2Settings.h <40:9 40:14>]
REFERENCE_TYPE_USAGE: void * b2Alloc(int32) -> void [b2Settings.h <135:1 135:4>]
REFERENCE_TYPE_USAGE: void * b2Alloc(int32) -> int32 [b2Settings.h <135:15 135:19>]
REFERENCE_TYPE_USAGE: void b2Free(void *) -> void [b2Settings.h <138:1 138:4>]
REFERENCE_TYPE_USAGE: void b2Free(void *) -> void [b2Settings.h <138:13 138:16>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> void [b2Settings.h <141:1 141:4>]
REFERENCE_TYPE_USAGE: void b2Log(const char *) -> char [b2Settings.h <141:18 141:21>]
REFERENCE_TYPE_USAGE: int32 b2Version::major -> int32 [b2Settings.h <147:2 147:6>]
REFERENCE_TYPE_USAGE: int32 b2Version::minor -> int32 [b2Settings.h <148:2 148:6>]
REFERENCE_TYPE_USAGE: int32 b2Version::revision -> int32 [b2Settings.h <149:2 149:6>]
REFERENCE_TYPE_USAGE: b2Version b2_version -> b2Version [b2Settings.h <153:8 153:16>]
REFERENCE_TYPE_USAGE: void b2Timer::Reset() -> void [b2Timer.cpp <49:1 49:4>]
REFERENCE_TYPE_USAGE: void b2Timer::Reset() -> void [b2Timer.h <34:2 34:5>]
REFERENCE_TYPE_USAGE: float32 b2Timer::GetMilliseconds() const -> float32 [b2Timer.cpp <56:1 56:7>]
REFERENCE_TYPE_USAGE: float32 b2Timer::GetMilliseconds() const -> float32 [b2Timer.cpp <61:2 61:8>]
REFERENCE_TYPE_USAGE: float32 b2Timer::GetMilliseconds() const -> float32 [b2Timer.cpp <61:15 61:21>]
REFERENCE_TYPE_USAGE: float32 b2Timer::GetMilliseconds() const -> float32 [b2Timer.h <37:2 37:8>]
REFERENCE_TYPE_USAGE: float64 b2Timer::m_start -> float64 [b2Timer.h <42:2 42:8>]
REFERENCE_TYPE_USAGE: static float64 b2Timer::s_invFrequency -> float64 [b2Timer.cpp <23:1 23:7>]
REFERENCE_TYPE_USAGE: static float64 b2Timer::s_invFrequency -> float64 [b2Timer.h <43:9 43:15>]
REFERENCE_TYPE_USAGE: void b2Timer::b2Timer() -> LARGE_INTEGER [b2Timer.cpp <33:2 33:14>]
REFERENCE_CALL: void b2Timer::b2Timer() -> void _LARGE_INTEGER::_LARGE_INTEGER() [b2Timer.cpp <33:16 33:27>]
REFERENCE_USAGE: void b2Timer::b2Timer() -> static float64 b2Timer::s_invFrequency [b2Timer.cpp <35:6 35:19>]
REFERENCE_USAGE: void b2Timer::b2Timer() -> static float64 b2Timer::s_invFrequency [b2Timer.cpp <38:3 38:16>]
REFERENCE_USAGE: void b2Timer::b2Timer() -> static float64 b2Timer::s_invFrequency [b2Timer.cpp <39:7 39:20>]
REFERENCE_USAGE: void b2Timer::b2Timer() -> static float64 b2Timer::s_invFrequency [b2Timer.cpp <41:4 41:17>]
REFERENCE_USAGE: void b2Timer::b2Timer() -> static float64 b2Timer::s_invFrequency [b2Timer.cpp <41:31 41:44>]
REFERENCE_CALL: void b2Timer::b2Timer() -> BOOL QueryPerformanceFrequency(LARGE_INTEGER *) [b2Timer.cpp <37:3 37:27>]
REFERENCE_TYPE_USAGE: void b2Timer::b2Timer() -> float64 [b2Timer.cpp <38:20 38:26>]
REFERENCE_TYPE_USAGE: void b2Timer::b2Timer() -> float64 [b2Timer.cpp <46:12 46:18>]
REFERENCE_USAGE: void b2Timer::b2Timer() -> LONGLONG _LARGE_INTEGER::QuadPart [b2Timer.cpp <38:41 38:48>]
REFERENCE_USAGE: void b2Timer::b2Timer() -> LONGLONG _LARGE_INTEGER::QuadPart [b2Timer.cpp <46:33 46:40>]
REFERENCE_CALL: void b2Timer::b2Timer() -> BOOL QueryPerformanceCounter(LARGE_INTEGER *) [b2Timer.cpp <45:2 45:24>]
REFERENCE_USAGE: void b2Timer::b2Timer() -> float64 b2Timer::m_start [b2Timer.cpp <46:2 46:8>]
REFERENCE_TYPE_USAGE: void b2Timer::Reset() -> LARGE_INTEGER [b2Timer.cpp <51:2 51:14>]
REFERENCE_CALL: void b2Timer::Reset() -> void _LARGE_INTEGER::_LARGE_INTEGER() [b2Timer.cpp <51:16 51:27>]
REFERENCE_CALL: void b2Timer::Reset() -> BOOL QueryPerformanceCounter(LARGE_INTEGER *) [b2Timer.cpp <52:2 52:24>]
REFERENCE_USAGE: void b2Timer::Reset() -> float64 b2Timer::m_start [b2Timer.cpp <53:2 53:8>]
REFERENCE_TYPE_USAGE: void b2Timer::Reset() -> float64 [b2Timer.cpp <53:12 53:18>]
REFERENCE_USAGE: void b2Timer::Reset() -> LONGLONG _LARGE_INTEGER::QuadPart [b2Timer.cpp <53:33 53:40>]
REFERENCE_TYPE_USAGE: float32 b2Timer::GetMilliseconds() const -> LARGE_INTEGER [b2Timer.cpp <58:2 58:14>]
REFERENCE_CALL: float32 b2Timer::GetMilliseconds() const -> void _LARGE_INTEGER::_LARGE_INTEGER() [b2Timer.cpp <58:16 58:27>]
REFERENCE_CALL: float32 b2Timer::GetMilliseconds() const -> BOOL QueryPerformanceCounter(LARGE_INTEGER *) [b2Timer.cpp <59:2 59:24>]
REFERENCE_TYPE_USAGE: float32 b2Timer::GetMilliseconds() const -> float64 [b2Timer.cpp <60:2 60:8>]
REFERENCE_TYPE_USAGE: float32 b2Timer::GetMilliseconds() const -> float64 [b2Timer.cpp <60:18 60:24>]
REFERENCE_USAGE: float32 b2Timer::GetMilliseconds() const -> LONGLONG _LARGE_INTEGER::QuadPart [b2Timer.cpp <60:39 60:46>]
REFERENCE_USAGE: float32 b2Timer::GetMilliseconds() const -> static float64 b2Timer::s_invFrequency [b2Timer.cpp <61:23 61:36>]
REFERENCE_USAGE: float32 b2Timer::GetMilliseconds() const -> float64 b2Timer::m_start [b2Timer.cpp <61:49 61:55>]
LOCAL_SYMBOL: b2Settings.h<135:21> [b2Settings.h <135:21 135:24>]
LOCAL_SYMBOL: b2Settings.h<138:19> [b2Settings.h <138:19 138:21>]
LOCAL_SYMBOL: b2Settings.h<141:24> [b2Settings.h <141:24 141:29>]
LOCAL_SYMBOL: b2Settings.h<146:1> [b2Settings.h <146:1 146:1>]
LOCAL_SYMBOL: b2Settings.h<146:1> [b2Settings.h <150:1 150:1>]
LOCAL_SYMBOL: b2Timer.cpp<32:1> [b2Timer.cpp <32:1 32:1>]
LOCAL_SYMBOL: b2Timer.cpp<32:1> [b2Timer.cpp <47:1 47:1>]
LOCAL_SYMBOL: b2Timer.cpp<33:16> [b2Timer.cpp <33:16 33:27>]
LOCAL_SYMBOL: b2Timer.cpp<33:16> [b2Timer.cpp <37:30 37:41>]
LOCAL_SYMBOL: b2Timer.cpp<33:16> [b2Timer.cpp <38:28 38:39>]
LOCAL_SYMBOL: b2Timer.cpp<33:16> [b2Timer.cpp <45:27 45:38>]
LOCAL_SYMBOL: b2Timer.cpp<33:16> [b2Timer.cpp <46:20 46:31>]
LOCAL_SYMBOL: b2Timer.cpp<36:2> [b2Timer.cpp <36:2 36:2>]
LOCAL_SYMBOL: b2Timer.cpp<36:2> [b2Timer.cpp <43:2 43:2>]
LOCAL_SYMBOL: b2Timer.cpp<40:3> [b2Timer.cpp <40:3 40:3>]
LOCAL_SYMBOL: b2Timer.cpp<40:3> [b2Timer.cpp <42:3 42:3>]
LOCAL_SYMBOL: b2Timer.cpp<50:1> [b2Timer.cpp <50:1 50:1>]
LOCAL_SYMBOL: b2Timer.cpp<50:1> [b2Timer.cpp <54:1 54:1>]
LOCAL_SYMBOL: b2Timer.cpp<51:16> [b2Timer.cpp <51:16 51:27>]
LOCAL_SYMBOL: b2Timer.cpp<51:16> [b2Timer.cpp <52:27 52:38>]
LOCAL_SYMBOL: b2Timer.cpp<51:16> [b2Timer.cpp <53:20 53:31>]
LOCAL_SYMBOL: b2Timer.cpp<57:1> [b2Timer.cpp <57:1 57:1>]
LOCAL_SYMBOL: b2Timer.cpp<57:1> [b2Timer.cpp <63:1 63:1>]
LOCAL_SYMBOL: b2Timer.cpp<58:16> [b2Timer.cpp <58:16 58:27>]
LOCAL_SYMBOL: b2Timer.cpp<58:16> [b2Timer.cpp <59:27 59:38>]
LOCAL_SYMBOL: b2Timer.cpp<58:16> [b2Timer.cpp <60:26 60:37>]
LOCAL_SYMBOL: b2Timer.cpp<60:10> [b2Timer.cpp <60:10 60:14>]
LOCAL_SYMBOL: b2Timer.cpp<60:10> [b2Timer.cpp <61:41 61:45>]
LOCAL_SYMBOL: b2Timer.cpp<61:10> [b2Timer.cpp <61:10 61:11>]
LOCAL_SYMBOL: b2Timer.cpp<61:10> [b2Timer.cpp <62:9 62:10>]
LOCAL_SYMBOL: b2Timer.h<27:1> [b2Timer.h <27:1 27:1>]
LOCAL_SYMBOL: b2Timer.h<27:1> [b2Timer.h <48:1 48:1>]
COMMENT: comment [b2Timer.cpp <1:1 17:3>]
COMMENT: comment [b2Timer.h <1:1 17:3>]
COMMENT: comment [b2Timer.h <24:1 24:65>]
COMMENT: comment [b2Timer.h <25:1 25:32>]
COMMENT: comment [b2Timer.h <30:2 30:17>]
COMMENT: comment [b2Timer.h <33:2 33:22>]
COMMENT: comment [b2Timer.h <36:2 36:56>]
COMMENT: comment [b2Settings.h <1:1 17:3>]
COMMENT: comment [b2Settings.h <46:1 46:10>]
COMMENT: comment [b2Settings.h <47:1 47:75>]
COMMENT: comment [b2Settings.h <48:1 48:4>]
COMMENT: comment [b2Settings.h <50:1 50:13>]
COMMENT: comment [b2Settings.h <52:1 52:71>]
COMMENT: comment [b2Settings.h <53:1 53:27>]
COMMENT: comment [b2Settings.h <56:1 56:76>]
COMMENT: comment [b2Settings.h <57:1 57:70>]
COMMENT: comment [b2Settings.h <60:1 60:74>]
COMMENT: comment [b2Settings.h <61:1 61:68>]
COMMENT: comment [b2Settings.h <62:1 62:23>]
COMMENT: comment [b2Settings.h <65:1 65:78>]
COMMENT: comment [b2Settings.h <66:1 66:59>]
COMMENT: comment [b2Settings.h <67:1 67:40>]
COMMENT: comment [b2Settings.h <70:1 70:79>]
COMMENT: comment [b2Settings.h <71:1 71:70>]
COMMENT: comment [b2Settings.h <74:1 74:78>]
COMMENT: comment [b2Settings.h <75:1 75:70>]
COMMENT: comment [b2Settings.h <78:1 78:83>]
COMMENT: comment [b2Settings.h <79:1 79:91>]
COMMENT: comment [b2Settings.h <80:1 80:64>]
COMMENT: comment [b2Settings.h <83:1 83:78>]
COMMENT: comment [b2Settings.h <87:1 87:12>]
COMMENT: comment [b2Settings.h <89:1 89:68>]
COMMENT: comment [b2Settings.h <92:1 92:86>]
COMMENT: comment [b2Settings.h <93:1 93:64>]
COMMENT: comment [b2Settings.h <96:1 96:88>]
COMMENT: comment [b2Settings.h <97:1 97:23>]
COMMENT: comment [b2Settings.h <100:1 100:89>]
COMMENT: comment [b2Settings.h <101:1 101:23>]
COMMENT: comment [b2Settings.h <104:1 104:80>]
COMMENT: comment [b2Settings.h <105:1 105:70>]
COMMENT: comment [b2Settings.h <109:1 109:81>]
COMMENT: comment [b2Settings.h <110:1 110:70>]
COMMENT: comment [b2Settings.h <114:1 114:88>]
COMMENT: comment [b2Settings.h <115:1 115:89>]
COMMENT: comment [b2Settings.h <116:1 116:18>]
COMMENT: comment [b2Settings.h <121:1 121:9>]
COMMENT: comment [b2Settings.h <123:1 123:67>]
COMMENT: comment [b2Settings.h <126:1 126:72>]
COMMENT: comment [b2Settings.h <129:1 129:73>]
COMMENT: comment [b2Settings.h <132:1 132:21>]
COMMENT: comment [b2Settings.h <134:1 134:62>]
COMMENT: comment [b2Settings.h <137:1 137:71>]
COMMENT: comment [b2Settings.h <140:1 140:22>]
COMMENT: comment [b2Settings.h <143:1 143:30>]
COMMENT: comment [b2Settings.h <144:1 144:57>]
COMMENT: comment [b2Settings.h <147:16 147:40>]
COMMENT: comment [b2Settings.h <148:16 148:40>]
COMMENT: comment [b2Settings.h <149:19 149:33>]
COMMENT: comment [b2Settings.h <152:1 152:21>]
@@ -1,68 +0,0 @@
/*
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#ifndef BOX2D_H
#define BOX2D_H
/**
\mainpage Box2D API Documentation
\section intro_sec Getting Started
For documentation please see http://box2d.org/documentation.html
For discussion please visit http://box2d.org/forum
*/
// These include files constitute the main Box2D API
#include "Box2D/Common/b2Settings.h"
#include "Box2D/Common/b2Draw.h"
#include "Box2D/Common/b2Timer.h"
#include "Box2D/Collision/Shapes/b2CircleShape.h"
#include "Box2D/Collision/Shapes/b2EdgeShape.h"
#include "Box2D/Collision/Shapes/b2ChainShape.h"
#include "Box2D/Collision/Shapes/b2PolygonShape.h"
#include "Box2D/Collision/b2BroadPhase.h"
#include "Box2D/Collision/b2Distance.h"
#include "Box2D/Collision/b2DynamicTree.h"
#include "Box2D/Collision/b2TimeOfImpact.h"
#include "Box2D/Dynamics/b2Body.h"
#include "Box2D/Dynamics/b2Fixture.h"
#include "Box2D/Dynamics/b2WorldCallbacks.h"
#include "Box2D/Dynamics/b2TimeStep.h"
#include "Box2D/Dynamics/b2World.h"
#include "Box2D/Dynamics/Contacts/b2Contact.h"
#include "Box2D/Dynamics/Joints/b2DistanceJoint.h"
#include "Box2D/Dynamics/Joints/b2FrictionJoint.h"
#include "Box2D/Dynamics/Joints/b2GearJoint.h"
#include "Box2D/Dynamics/Joints/b2MotorJoint.h"
#include "Box2D/Dynamics/Joints/b2MouseJoint.h"
#include "Box2D/Dynamics/Joints/b2PrismaticJoint.h"
#include "Box2D/Dynamics/Joints/b2PulleyJoint.h"
#include "Box2D/Dynamics/Joints/b2RevoluteJoint.h"
#include "Box2D/Dynamics/Joints/b2RopeJoint.h"
#include "Box2D/Dynamics/Joints/b2WeldJoint.h"
#include "Box2D/Dynamics/Joints/b2WheelJoint.h"
#endif
@@ -1,198 +0,0 @@
/*
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#include "Box2D/Collision/Shapes/b2ChainShape.h"
#include "Box2D/Collision/Shapes/b2EdgeShape.h"
#include <new>
#include <string.h>
b2ChainShape::~b2ChainShape()
{
Clear();
}
void b2ChainShape::Clear()
{
b2Free(m_vertices);
m_vertices = nullptr;
m_count = 0;
}
void b2ChainShape::CreateLoop(const b2Vec2* vertices, int32 count)
{
b2Assert(m_vertices == nullptr && m_count == 0);
b2Assert(count >= 3);
if (count < 3)
{
return;
}
for (int32 i = 1; i < count; ++i)
{
b2Vec2 v1 = vertices[i-1];
b2Vec2 v2 = vertices[i];
// If the code crashes here, it means your vertices are too close together.
b2Assert(b2DistanceSquared(v1, v2) > b2_linearSlop * b2_linearSlop);
}
m_count = count + 1;
m_vertices = (b2Vec2*)b2Alloc(m_count * sizeof(b2Vec2));
memcpy(m_vertices, vertices, count * sizeof(b2Vec2));
m_vertices[count] = m_vertices[0];
m_prevVertex = m_vertices[m_count - 2];
m_nextVertex = m_vertices[1];
m_hasPrevVertex = true;
m_hasNextVertex = true;
}
void b2ChainShape::CreateChain(const b2Vec2* vertices, int32 count)
{
b2Assert(m_vertices == nullptr && m_count == 0);
b2Assert(count >= 2);
for (int32 i = 1; i < count; ++i)
{
// If the code crashes here, it means your vertices are too close together.
b2Assert(b2DistanceSquared(vertices[i-1], vertices[i]) > b2_linearSlop * b2_linearSlop);
}
m_count = count;
m_vertices = (b2Vec2*)b2Alloc(count * sizeof(b2Vec2));
memcpy(m_vertices, vertices, m_count * sizeof(b2Vec2));
m_hasPrevVertex = false;
m_hasNextVertex = false;
m_prevVertex.SetZero();
m_nextVertex.SetZero();
}
void b2ChainShape::SetPrevVertex(const b2Vec2& prevVertex)
{
m_prevVertex = prevVertex;
m_hasPrevVertex = true;
}
void b2ChainShape::SetNextVertex(const b2Vec2& nextVertex)
{
m_nextVertex = nextVertex;
m_hasNextVertex = true;
}
b2Shape* b2ChainShape::Clone(b2BlockAllocator* allocator) const
{
void* mem = allocator->Allocate(sizeof(b2ChainShape));
b2ChainShape* clone = new (mem) b2ChainShape;
clone->CreateChain(m_vertices, m_count);
clone->m_prevVertex = m_prevVertex;
clone->m_nextVertex = m_nextVertex;
clone->m_hasPrevVertex = m_hasPrevVertex;
clone->m_hasNextVertex = m_hasNextVertex;
return clone;
}
int32 b2ChainShape::GetChildCount() const
{
// edge count = vertex count - 1
return m_count - 1;
}
void b2ChainShape::GetChildEdge(b2EdgeShape* edge, int32 index) const
{
b2Assert(0 <= index && index < m_count - 1);
edge->m_type = b2Shape::e_edge;
edge->m_radius = m_radius;
edge->m_vertex1 = m_vertices[index + 0];
edge->m_vertex2 = m_vertices[index + 1];
if (index > 0)
{
edge->m_vertex0 = m_vertices[index - 1];
edge->m_hasVertex0 = true;
}
else
{
edge->m_vertex0 = m_prevVertex;
edge->m_hasVertex0 = m_hasPrevVertex;
}
if (index < m_count - 2)
{
edge->m_vertex3 = m_vertices[index + 2];
edge->m_hasVertex3 = true;
}
else
{
edge->m_vertex3 = m_nextVertex;
edge->m_hasVertex3 = m_hasNextVertex;
}
}
bool b2ChainShape::TestPoint(const b2Transform& xf, const b2Vec2& p) const
{
B2_NOT_USED(xf);
B2_NOT_USED(p);
return false;
}
bool b2ChainShape::RayCast(b2RayCastOutput* output, const b2RayCastInput& input,
const b2Transform& xf, int32 childIndex) const
{
b2Assert(childIndex < m_count);
b2EdgeShape edgeShape;
int32 i1 = childIndex;
int32 i2 = childIndex + 1;
if (i2 == m_count)
{
i2 = 0;
}
edgeShape.m_vertex1 = m_vertices[i1];
edgeShape.m_vertex2 = m_vertices[i2];
return edgeShape.RayCast(output, input, xf, 0);
}
void b2ChainShape::ComputeAABB(b2AABB* aabb, const b2Transform& xf, int32 childIndex) const
{
b2Assert(childIndex < m_count);
int32 i1 = childIndex;
int32 i2 = childIndex + 1;
if (i2 == m_count)
{
i2 = 0;
}
b2Vec2 v1 = b2Mul(xf, m_vertices[i1]);
b2Vec2 v2 = b2Mul(xf, m_vertices[i2]);
aabb->lowerBound = b2Min(v1, v2);
aabb->upperBound = b2Max(v1, v2);
}
void b2ChainShape::ComputeMass(b2MassData* massData, float32 density) const
{
B2_NOT_USED(density);
massData->mass = 0.0f;
massData->center.SetZero();
massData->I = 0.0f;
}
@@ -1,105 +0,0 @@
/*
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#ifndef B2_CHAIN_SHAPE_H
#define B2_CHAIN_SHAPE_H
#include "Box2D/Collision/Shapes/b2Shape.h"
class b2EdgeShape;
/// A chain shape is a free form sequence of line segments.
/// The chain has two-sided collision, so you can use inside and outside collision.
/// Therefore, you may use any winding order.
/// Since there may be many vertices, they are allocated using b2Alloc.
/// Connectivity information is used to create smooth collisions.
/// WARNING: The chain will not collide properly if there are self-intersections.
class b2ChainShape : public b2Shape
{
public:
b2ChainShape();
/// The destructor frees the vertices using b2Free.
~b2ChainShape();
/// Clear all data.
void Clear();
/// Create a loop. This automatically adjusts connectivity.
/// @param vertices an array of vertices, these are copied
/// @param count the vertex count
void CreateLoop(const b2Vec2* vertices, int32 count);
/// Create a chain with isolated end vertices.
/// @param vertices an array of vertices, these are copied
/// @param count the vertex count
void CreateChain(const b2Vec2* vertices, int32 count);
/// Establish connectivity to a vertex that precedes the first vertex.
/// Don't call this for loops.
void SetPrevVertex(const b2Vec2& prevVertex);
/// Establish connectivity to a vertex that follows the last vertex.
/// Don't call this for loops.
void SetNextVertex(const b2Vec2& nextVertex);
/// Implement b2Shape. Vertices are cloned using b2Alloc.
b2Shape* Clone(b2BlockAllocator* allocator) const override;
/// @see b2Shape::GetChildCount
int32 GetChildCount() const override;
/// Get a child edge.
void GetChildEdge(b2EdgeShape* edge, int32 index) const;
/// This always return false.
/// @see b2Shape::TestPoint
bool TestPoint(const b2Transform& transform, const b2Vec2& p) const override;
/// Implement b2Shape.
bool RayCast(b2RayCastOutput* output, const b2RayCastInput& input,
const b2Transform& transform, int32 childIndex) const override;
/// @see b2Shape::ComputeAABB
void ComputeAABB(b2AABB* aabb, const b2Transform& transform, int32 childIndex) const override;
/// Chains have zero mass.
/// @see b2Shape::ComputeMass
void ComputeMass(b2MassData* massData, float32 density) const override;
/// The vertices. Owned by this class.
b2Vec2* m_vertices;
/// The vertex count.
int32 m_count;
b2Vec2 m_prevVertex, m_nextVertex;
bool m_hasPrevVertex, m_hasNextVertex;
};
inline b2ChainShape::b2ChainShape()
{
m_type = e_chain;
m_radius = b2_polygonRadius;
m_vertices = nullptr;
m_count = 0;
m_hasPrevVertex = false;
m_hasNextVertex = false;
}
#endif
@@ -1,99 +0,0 @@
/*
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#include "Box2D/Collision/Shapes/b2CircleShape.h"
#include <new>
b2Shape* b2CircleShape::Clone(b2BlockAllocator* allocator) const
{
void* mem = allocator->Allocate(sizeof(b2CircleShape));
b2CircleShape* clone = new (mem) b2CircleShape;
*clone = *this;
return clone;
}
int32 b2CircleShape::GetChildCount() const
{
return 1;
}
bool b2CircleShape::TestPoint(const b2Transform& transform, const b2Vec2& p) const
{
b2Vec2 center = transform.p + b2Mul(transform.q, m_p);
b2Vec2 d = p - center;
return b2Dot(d, d) <= m_radius * m_radius;
}
// Collision Detection in Interactive 3D Environments by Gino van den Bergen
// From Section 3.1.2
// x = s + a * r
// norm(x) = radius
bool b2CircleShape::RayCast(b2RayCastOutput* output, const b2RayCastInput& input,
const b2Transform& transform, int32 childIndex) const
{
B2_NOT_USED(childIndex);
b2Vec2 position = transform.p + b2Mul(transform.q, m_p);
b2Vec2 s = input.p1 - position;
float32 b = b2Dot(s, s) - m_radius * m_radius;
// Solve quadratic equation.
b2Vec2 r = input.p2 - input.p1;
float32 c = b2Dot(s, r);
float32 rr = b2Dot(r, r);
float32 sigma = c * c - rr * b;
// Check for negative discriminant and short segment.
if (sigma < 0.0f || rr < b2_epsilon)
{
return false;
}
// Find the point of intersection of the line with the circle.
float32 a = -(c + b2Sqrt(sigma));
// Is the intersection point on the segment?
if (0.0f <= a && a <= input.maxFraction * rr)
{
a /= rr;
output->fraction = a;
output->normal = s + a * r;
output->normal.Normalize();
return true;
}
return false;
}
void b2CircleShape::ComputeAABB(b2AABB* aabb, const b2Transform& transform, int32 childIndex) const
{
B2_NOT_USED(childIndex);
b2Vec2 p = transform.p + b2Mul(transform.q, m_p);
aabb->lowerBound.Set(p.x - m_radius, p.y - m_radius);
aabb->upperBound.Set(p.x + m_radius, p.y + m_radius);
}
void b2CircleShape::ComputeMass(b2MassData* massData, float32 density) const
{
massData->mass = density * b2_pi * m_radius * m_radius;
massData->center = m_p;
// inertia about the local origin
massData->I = massData->mass * (0.5f * m_radius * m_radius + b2Dot(m_p, m_p));
}
@@ -1,60 +0,0 @@
/*
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#ifndef B2_CIRCLE_SHAPE_H
#define B2_CIRCLE_SHAPE_H
#include "Box2D/Collision/Shapes/b2Shape.h"
/// A circle shape.
class b2CircleShape : public b2Shape
{
public:
b2CircleShape();
/// Implement b2Shape.
b2Shape* Clone(b2BlockAllocator* allocator) const override;
/// @see b2Shape::GetChildCount
int32 GetChildCount() const override;
/// Implement b2Shape.
bool TestPoint(const b2Transform& transform, const b2Vec2& p) const override;
/// Implement b2Shape.
bool RayCast(b2RayCastOutput* output, const b2RayCastInput& input,
const b2Transform& transform, int32 childIndex) const override;
/// @see b2Shape::ComputeAABB
void ComputeAABB(b2AABB* aabb, const b2Transform& transform, int32 childIndex) const override;
/// @see b2Shape::ComputeMass
void ComputeMass(b2MassData* massData, float32 density) const override;
/// Position
b2Vec2 m_p;
};
inline b2CircleShape::b2CircleShape()
{
m_type = e_circle;
m_radius = 0.0f;
m_p.SetZero();
}
#endif
@@ -1,138 +0,0 @@
/*
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#include "Box2D/Collision/Shapes/b2EdgeShape.h"
#include <new>
void b2EdgeShape::Set(const b2Vec2& v1, const b2Vec2& v2)
{
m_vertex1 = v1;
m_vertex2 = v2;
m_hasVertex0 = false;
m_hasVertex3 = false;
}
b2Shape* b2EdgeShape::Clone(b2BlockAllocator* allocator) const
{
void* mem = allocator->Allocate(sizeof(b2EdgeShape));
b2EdgeShape* clone = new (mem) b2EdgeShape;
*clone = *this;
return clone;
}
int32 b2EdgeShape::GetChildCount() const
{
return 1;
}
bool b2EdgeShape::TestPoint(const b2Transform& xf, const b2Vec2& p) const
{
B2_NOT_USED(xf);
B2_NOT_USED(p);
return false;
}
// p = p1 + t * d
// v = v1 + s * e
// p1 + t * d = v1 + s * e
// s * e - t * d = p1 - v1
bool b2EdgeShape::RayCast(b2RayCastOutput* output, const b2RayCastInput& input,
const b2Transform& xf, int32 childIndex) const
{
B2_NOT_USED(childIndex);
// Put the ray into the edge's frame of reference.
b2Vec2 p1 = b2MulT(xf.q, input.p1 - xf.p);
b2Vec2 p2 = b2MulT(xf.q, input.p2 - xf.p);
b2Vec2 d = p2 - p1;
b2Vec2 v1 = m_vertex1;
b2Vec2 v2 = m_vertex2;
b2Vec2 e = v2 - v1;
b2Vec2 normal(e.y, -e.x);
normal.Normalize();
// q = p1 + t * d
// dot(normal, q - v1) = 0
// dot(normal, p1 - v1) + t * dot(normal, d) = 0
float32 numerator = b2Dot(normal, v1 - p1);
float32 denominator = b2Dot(normal, d);
if (denominator == 0.0f)
{
return false;
}
float32 t = numerator / denominator;
if (t < 0.0f || input.maxFraction < t)
{
return false;
}
b2Vec2 q = p1 + t * d;
// q = v1 + s * r
// s = dot(q - v1, r) / dot(r, r)
b2Vec2 r = v2 - v1;
float32 rr = b2Dot(r, r);
if (rr == 0.0f)
{
return false;
}
float32 s = b2Dot(q - v1, r) / rr;
if (s < 0.0f || 1.0f < s)
{
return false;
}
output->fraction = t;
if (numerator > 0.0f)
{
output->normal = -b2Mul(xf.q, normal);
}
else
{
output->normal = b2Mul(xf.q, normal);
}
return true;
}
void b2EdgeShape::ComputeAABB(b2AABB* aabb, const b2Transform& xf, int32 childIndex) const
{
B2_NOT_USED(childIndex);
b2Vec2 v1 = b2Mul(xf, m_vertex1);
b2Vec2 v2 = b2Mul(xf, m_vertex2);
b2Vec2 lower = b2Min(v1, v2);
b2Vec2 upper = b2Max(v1, v2);
b2Vec2 r(m_radius, m_radius);
aabb->lowerBound = lower - r;
aabb->upperBound = upper + r;
}
void b2EdgeShape::ComputeMass(b2MassData* massData, float32 density) const
{
B2_NOT_USED(density);
massData->mass = 0.0f;
massData->center = 0.5f * (m_vertex1 + m_vertex2);
massData->I = 0.0f;
}
@@ -1,74 +0,0 @@
/*
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#ifndef B2_EDGE_SHAPE_H
#define B2_EDGE_SHAPE_H
#include "Box2D/Collision/Shapes/b2Shape.h"
/// A line segment (edge) shape. These can be connected in chains or loops
/// to other edge shapes. The connectivity information is used to ensure
/// correct contact normals.
class b2EdgeShape : public b2Shape
{
public:
b2EdgeShape();
/// Set this as an isolated edge.
void Set(const b2Vec2& v1, const b2Vec2& v2);
/// Implement b2Shape.
b2Shape* Clone(b2BlockAllocator* allocator) const override;
/// @see b2Shape::GetChildCount
int32 GetChildCount() const override;
/// @see b2Shape::TestPoint
bool TestPoint(const b2Transform& transform, const b2Vec2& p) const override;
/// Implement b2Shape.
bool RayCast(b2RayCastOutput* output, const b2RayCastInput& input,
const b2Transform& transform, int32 childIndex) const override;
/// @see b2Shape::ComputeAABB
void ComputeAABB(b2AABB* aabb, const b2Transform& transform, int32 childIndex) const override;
/// @see b2Shape::ComputeMass
void ComputeMass(b2MassData* massData, float32 density) const override;
/// These are the edge vertices
b2Vec2 m_vertex1, m_vertex2;
/// Optional adjacent vertices. These are used for smooth collision.
b2Vec2 m_vertex0, m_vertex3;
bool m_hasVertex0, m_hasVertex3;
};
inline b2EdgeShape::b2EdgeShape()
{
m_type = e_edge;
m_radius = b2_polygonRadius;
m_vertex0.x = 0.0f;
m_vertex0.y = 0.0f;
m_vertex3.x = 0.0f;
m_vertex3.y = 0.0f;
m_hasVertex0 = false;
m_hasVertex3 = false;
}
#endif
@@ -1,468 +0,0 @@
/*
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#include "Box2D/Collision/Shapes/b2PolygonShape.h"
#include <new>
b2Shape* b2PolygonShape::Clone(b2BlockAllocator* allocator) const
{
void* mem = allocator->Allocate(sizeof(b2PolygonShape));
b2PolygonShape* clone = new (mem) b2PolygonShape;
*clone = *this;
return clone;
}
void b2PolygonShape::SetAsBox(float32 hx, float32 hy)
{
m_count = 4;
m_vertices[0].Set(-hx, -hy);
m_vertices[1].Set( hx, -hy);
m_vertices[2].Set( hx, hy);
m_vertices[3].Set(-hx, hy);
m_normals[0].Set(0.0f, -1.0f);
m_normals[1].Set(1.0f, 0.0f);
m_normals[2].Set(0.0f, 1.0f);
m_normals[3].Set(-1.0f, 0.0f);
m_centroid.SetZero();
}
void b2PolygonShape::SetAsBox(float32 hx, float32 hy, const b2Vec2& center, float32 angle)
{
m_count = 4;
m_vertices[0].Set(-hx, -hy);
m_vertices[1].Set( hx, -hy);
m_vertices[2].Set( hx, hy);
m_vertices[3].Set(-hx, hy);
m_normals[0].Set(0.0f, -1.0f);
m_normals[1].Set(1.0f, 0.0f);
m_normals[2].Set(0.0f, 1.0f);
m_normals[3].Set(-1.0f, 0.0f);
m_centroid = center;
b2Transform xf;
xf.p = center;
xf.q.Set(angle);
// Transform vertices and normals.
for (int32 i = 0; i < m_count; ++i)
{
m_vertices[i] = b2Mul(xf, m_vertices[i]);
m_normals[i] = b2Mul(xf.q, m_normals[i]);
}
}
int32 b2PolygonShape::GetChildCount() const
{
return 1;
}
static b2Vec2 ComputeCentroid(const b2Vec2* vs, int32 count)
{
b2Assert(count >= 3);
b2Vec2 c; c.Set(0.0f, 0.0f);
float32 area = 0.0f;
// pRef is the reference point for forming triangles.
// It's location doesn't change the result (except for rounding error).
b2Vec2 pRef(0.0f, 0.0f);
#if 0
// This code would put the reference point inside the polygon.
for (int32 i = 0; i < count; ++i)
{
pRef += vs[i];
}
pRef *= 1.0f / count;
#endif
const float32 inv3 = 1.0f / 3.0f;
for (int32 i = 0; i < count; ++i)
{
// Triangle vertices.
b2Vec2 p1 = pRef;
b2Vec2 p2 = vs[i];
b2Vec2 p3 = i + 1 < count ? vs[i+1] : vs[0];
b2Vec2 e1 = p2 - p1;
b2Vec2 e2 = p3 - p1;
float32 D = b2Cross(e1, e2);
float32 triangleArea = 0.5f * D;
area += triangleArea;
// Area weighted centroid
c += triangleArea * inv3 * (p1 + p2 + p3);
}
// Centroid
b2Assert(area > b2_epsilon);
c *= 1.0f / area;
return c;
}
void b2PolygonShape::Set(const b2Vec2* vertices, int32 count)
{
b2Assert(3 <= count && count <= b2_maxPolygonVertices);
if (count < 3)
{
SetAsBox(1.0f, 1.0f);
return;
}
int32 n = b2Min(count, b2_maxPolygonVertices);
// Perform welding and copy vertices into local buffer.
b2Vec2 ps[b2_maxPolygonVertices];
int32 tempCount = 0;
for (int32 i = 0; i < n; ++i)
{
b2Vec2 v = vertices[i];
bool unique = true;
for (int32 j = 0; j < tempCount; ++j)
{
if (b2DistanceSquared(v, ps[j]) < ((0.5f * b2_linearSlop) * (0.5f * b2_linearSlop)))
{
unique = false;
break;
}
}
if (unique)
{
ps[tempCount++] = v;
}
}
n = tempCount;
if (n < 3)
{
// Polygon is degenerate.
b2Assert(false);
SetAsBox(1.0f, 1.0f);
return;
}
// Create the convex hull using the Gift wrapping algorithm
// http://en.wikipedia.org/wiki/Gift_wrapping_algorithm
// Find the right most point on the hull
int32 i0 = 0;
float32 x0 = ps[0].x;
for (int32 i = 1; i < n; ++i)
{
float32 x = ps[i].x;
if (x > x0 || (x == x0 && ps[i].y < ps[i0].y))
{
i0 = i;
x0 = x;
}
}
int32 hull[b2_maxPolygonVertices];
int32 m = 0;
int32 ih = i0;
for (;;)
{
b2Assert(m < b2_maxPolygonVertices);
hull[m] = ih;
int32 ie = 0;
for (int32 j = 1; j < n; ++j)
{
if (ie == ih)
{
ie = j;
continue;
}
b2Vec2 r = ps[ie] - ps[hull[m]];
b2Vec2 v = ps[j] - ps[hull[m]];
float32 c = b2Cross(r, v);
if (c < 0.0f)
{
ie = j;
}
// Collinearity check
if (c == 0.0f && v.LengthSquared() > r.LengthSquared())
{
ie = j;
}
}
++m;
ih = ie;
if (ie == i0)
{
break;
}
}
if (m < 3)
{
// Polygon is degenerate.
b2Assert(false);
SetAsBox(1.0f, 1.0f);
return;
}
m_count = m;
// Copy vertices.
for (int32 i = 0; i < m; ++i)
{
m_vertices[i] = ps[hull[i]];
}
// Compute normals. Ensure the edges have non-zero length.
for (int32 i = 0; i < m; ++i)
{
int32 i1 = i;
int32 i2 = i + 1 < m ? i + 1 : 0;
b2Vec2 edge = m_vertices[i2] - m_vertices[i1];
b2Assert(edge.LengthSquared() > b2_epsilon * b2_epsilon);
m_normals[i] = b2Cross(edge, 1.0f);
m_normals[i].Normalize();
}
// Compute the polygon centroid.
m_centroid = ComputeCentroid(m_vertices, m);
}
bool b2PolygonShape::TestPoint(const b2Transform& xf, const b2Vec2& p) const
{
b2Vec2 pLocal = b2MulT(xf.q, p - xf.p);
for (int32 i = 0; i < m_count; ++i)
{
float32 dot = b2Dot(m_normals[i], pLocal - m_vertices[i]);
if (dot > 0.0f)
{
return false;
}
}
return true;
}
bool b2PolygonShape::RayCast(b2RayCastOutput* output, const b2RayCastInput& input,
const b2Transform& xf, int32 childIndex) const
{
B2_NOT_USED(childIndex);
// Put the ray into the polygon's frame of reference.
b2Vec2 p1 = b2MulT(xf.q, input.p1 - xf.p);
b2Vec2 p2 = b2MulT(xf.q, input.p2 - xf.p);
b2Vec2 d = p2 - p1;
float32 lower = 0.0f, upper = input.maxFraction;
int32 index = -1;
for (int32 i = 0; i < m_count; ++i)
{
// p = p1 + a * d
// dot(normal, p - v) = 0
// dot(normal, p1 - v) + a * dot(normal, d) = 0
float32 numerator = b2Dot(m_normals[i], m_vertices[i] - p1);
float32 denominator = b2Dot(m_normals[i], d);
if (denominator == 0.0f)
{
if (numerator < 0.0f)
{
return false;
}
}
else
{
// Note: we want this predicate without division:
// lower < numerator / denominator, where denominator < 0
// Since denominator < 0, we have to flip the inequality:
// lower < numerator / denominator <==> denominator * lower > numerator.
if (denominator < 0.0f && numerator < lower * denominator)
{
// Increase lower.
// The segment enters this half-space.
lower = numerator / denominator;
index = i;
}
else if (denominator > 0.0f && numerator < upper * denominator)
{
// Decrease upper.
// The segment exits this half-space.
upper = numerator / denominator;
}
}
// The use of epsilon here causes the assert on lower to trip
// in some cases. Apparently the use of epsilon was to make edge
// shapes work, but now those are handled separately.
//if (upper < lower - b2_epsilon)
if (upper < lower)
{
return false;
}
}
b2Assert(0.0f <= lower && lower <= input.maxFraction);
if (index >= 0)
{
output->fraction = lower;
output->normal = b2Mul(xf.q, m_normals[index]);
return true;
}
return false;
}
void b2PolygonShape::ComputeAABB(b2AABB* aabb, const b2Transform& xf, int32 childIndex) const
{
B2_NOT_USED(childIndex);
b2Vec2 lower = b2Mul(xf, m_vertices[0]);
b2Vec2 upper = lower;
for (int32 i = 1; i < m_count; ++i)
{
b2Vec2 v = b2Mul(xf, m_vertices[i]);
lower = b2Min(lower, v);
upper = b2Max(upper, v);
}
b2Vec2 r(m_radius, m_radius);
aabb->lowerBound = lower - r;
aabb->upperBound = upper + r;
}
void b2PolygonShape::ComputeMass(b2MassData* massData, float32 density) const
{
// Polygon mass, centroid, and inertia.
// Let rho be the polygon density in mass per unit area.
// Then:
// mass = rho * int(dA)
// centroid.x = (1/mass) * rho * int(x * dA)
// centroid.y = (1/mass) * rho * int(y * dA)
// I = rho * int((x*x + y*y) * dA)
//
// We can compute these integrals by summing all the integrals
// for each triangle of the polygon. To evaluate the integral
// for a single triangle, we make a change of variables to
// the (u,v) coordinates of the triangle:
// x = x0 + e1x * u + e2x * v
// y = y0 + e1y * u + e2y * v
// where 0 <= u && 0 <= v && u + v <= 1.
//
// We integrate u from [0,1-v] and then v from [0,1].
// We also need to use the Jacobian of the transformation:
// D = cross(e1, e2)
//
// Simplification: triangle centroid = (1/3) * (p1 + p2 + p3)
//
// The rest of the derivation is handled by computer algebra.
b2Assert(m_count >= 3);
b2Vec2 center; center.Set(0.0f, 0.0f);
float32 area = 0.0f;
float32 I = 0.0f;
// s is the reference point for forming triangles.
// It's location doesn't change the result (except for rounding error).
b2Vec2 s(0.0f, 0.0f);
// This code would put the reference point inside the polygon.
for (int32 i = 0; i < m_count; ++i)
{
s += m_vertices[i];
}
s *= 1.0f / m_count;
const float32 k_inv3 = 1.0f / 3.0f;
for (int32 i = 0; i < m_count; ++i)
{
// Triangle vertices.
b2Vec2 e1 = m_vertices[i] - s;
b2Vec2 e2 = i + 1 < m_count ? m_vertices[i+1] - s : m_vertices[0] - s;
float32 D = b2Cross(e1, e2);
float32 triangleArea = 0.5f * D;
area += triangleArea;
// Area weighted centroid
center += triangleArea * k_inv3 * (e1 + e2);
float32 ex1 = e1.x, ey1 = e1.y;
float32 ex2 = e2.x, ey2 = e2.y;
float32 intx2 = ex1*ex1 + ex2*ex1 + ex2*ex2;
float32 inty2 = ey1*ey1 + ey2*ey1 + ey2*ey2;
I += (0.25f * k_inv3 * D) * (intx2 + inty2);
}
// Total mass
massData->mass = density * area;
// Center of mass
b2Assert(area > b2_epsilon);
center *= 1.0f / area;
massData->center = center + s;
// Inertia tensor relative to the local origin (point s).
massData->I = density * I;
// Shift to center of mass then to original body origin.
massData->I += massData->mass * (b2Dot(massData->center, massData->center) - b2Dot(center, center));
}
bool b2PolygonShape::Validate() const
{
for (int32 i = 0; i < m_count; ++i)
{
int32 i1 = i;
int32 i2 = i < m_count - 1 ? i1 + 1 : 0;
b2Vec2 p = m_vertices[i1];
b2Vec2 e = m_vertices[i2] - p;
for (int32 j = 0; j < m_count; ++j)
{
if (j == i1 || j == i2)
{
continue;
}
b2Vec2 v = m_vertices[j] - p;
float32 c = b2Cross(e, v);
if (c < 0.0f)
{
return false;
}
}
}
return true;
}
@@ -1,89 +0,0 @@
/*
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#ifndef B2_POLYGON_SHAPE_H
#define B2_POLYGON_SHAPE_H
#include "Box2D/Collision/Shapes/b2Shape.h"
/// A convex polygon. It is assumed that the interior of the polygon is to
/// the left of each edge.
/// Polygons have a maximum number of vertices equal to b2_maxPolygonVertices.
/// In most cases you should not need many vertices for a convex polygon.
class b2PolygonShape : public b2Shape
{
public:
b2PolygonShape();
/// Implement b2Shape.
b2Shape* Clone(b2BlockAllocator* allocator) const override;
/// @see b2Shape::GetChildCount
int32 GetChildCount() const override;
/// Create a convex hull from the given array of local points.
/// The count must be in the range [3, b2_maxPolygonVertices].
/// @warning the points may be re-ordered, even if they form a convex polygon
/// @warning collinear points are handled but not removed. Collinear points
/// may lead to poor stacking behavior.
void Set(const b2Vec2* points, int32 count);
/// Build vertices to represent an axis-aligned box centered on the local origin.
/// @param hx the half-width.
/// @param hy the half-height.
void SetAsBox(float32 hx, float32 hy);
/// Build vertices to represent an oriented box.
/// @param hx the half-width.
/// @param hy the half-height.
/// @param center the center of the box in local coordinates.
/// @param angle the rotation of the box in local coordinates.
void SetAsBox(float32 hx, float32 hy, const b2Vec2& center, float32 angle);
/// @see b2Shape::TestPoint
bool TestPoint(const b2Transform& transform, const b2Vec2& p) const override;
/// Implement b2Shape.
bool RayCast(b2RayCastOutput* output, const b2RayCastInput& input,
const b2Transform& transform, int32 childIndex) const override;
/// @see b2Shape::ComputeAABB
void ComputeAABB(b2AABB* aabb, const b2Transform& transform, int32 childIndex) const override;
/// @see b2Shape::ComputeMass
void ComputeMass(b2MassData* massData, float32 density) const override;
/// Validate convexity. This is a very time consuming operation.
/// @returns true if valid
bool Validate() const;
b2Vec2 m_centroid;
b2Vec2 m_vertices[b2_maxPolygonVertices];
b2Vec2 m_normals[b2_maxPolygonVertices];
int32 m_count;
};
inline b2PolygonShape::b2PolygonShape()
{
m_type = e_polygon;
m_radius = b2_polygonRadius;
m_count = 0;
m_centroid.SetZero();
}
#endif
@@ -1,104 +0,0 @@
/*
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#ifndef B2_SHAPE_H
#define B2_SHAPE_H
#include "Box2D/Common/b2BlockAllocator.h"
#include "Box2D/Common/b2Math.h"
#include "Box2D/Collision/b2Collision.h"
/// This holds the mass data computed for a shape.
struct b2MassData
{
/// The mass of the shape, usually in kilograms.
float32 mass;
/// The position of the shape's centroid relative to the shape's origin.
b2Vec2 center;
/// The rotational inertia of the shape about the local origin.
float32 I;
};
/// A shape is used for collision detection. You can create a shape however you like.
/// Shapes used for simulation in b2World are created automatically when a b2Fixture
/// is created. Shapes may encapsulate a one or more child shapes.
class b2Shape
{
public:
enum Type
{
e_circle = 0,
e_edge = 1,
e_polygon = 2,
e_chain = 3,
e_typeCount = 4
};
virtual ~b2Shape() {}
/// Clone the concrete shape using the provided allocator.
virtual b2Shape* Clone(b2BlockAllocator* allocator) const = 0;
/// Get the type of this shape. You can use this to down cast to the concrete shape.
/// @return the shape type.
Type GetType() const;
/// Get the number of child primitives.
virtual int32 GetChildCount() const = 0;
/// Test a point for containment in this shape. This only works for convex shapes.
/// @param xf the shape world transform.
/// @param p a point in world coordinates.
virtual bool TestPoint(const b2Transform& xf, const b2Vec2& p) const = 0;
/// Cast a ray against a child shape.
/// @param output the ray-cast results.
/// @param input the ray-cast input parameters.
/// @param transform the transform to be applied to the shape.
/// @param childIndex the child shape index
virtual bool RayCast(b2RayCastOutput* output, const b2RayCastInput& input,
const b2Transform& transform, int32 childIndex) const = 0;
/// Given a transform, compute the associated axis aligned bounding box for a child shape.
/// @param aabb returns the axis aligned box.
/// @param xf the world transform of the shape.
/// @param childIndex the child shape
virtual void ComputeAABB(b2AABB* aabb, const b2Transform& xf, int32 childIndex) const = 0;
/// Compute the mass properties of this shape using its dimensions and density.
/// The inertia tensor is computed about the local origin.
/// @param massData returns the mass data for this shape.
/// @param density the density in kilograms per meter squared.
virtual void ComputeMass(b2MassData* massData, float32 density) const = 0;
Type m_type;
/// Radius of a shape. For polygonal shapes this must be b2_polygonRadius. There is no support for
/// making rounded polygons.
float32 m_radius;
};
inline b2Shape::Type b2Shape::GetType() const
{
return m_type;
}
#endif
@@ -1,119 +0,0 @@
/*
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#include "Box2D/Collision/b2BroadPhase.h"
b2BroadPhase::b2BroadPhase()
{
m_proxyCount = 0;
m_pairCapacity = 16;
m_pairCount = 0;
m_pairBuffer = (b2Pair*)b2Alloc(m_pairCapacity * sizeof(b2Pair));
m_moveCapacity = 16;
m_moveCount = 0;
m_moveBuffer = (int32*)b2Alloc(m_moveCapacity * sizeof(int32));
}
b2BroadPhase::~b2BroadPhase()
{
b2Free(m_moveBuffer);
b2Free(m_pairBuffer);
}
int32 b2BroadPhase::CreateProxy(const b2AABB& aabb, void* userData)
{
int32 proxyId = m_tree.CreateProxy(aabb, userData);
++m_proxyCount;
BufferMove(proxyId);
return proxyId;
}
void b2BroadPhase::DestroyProxy(int32 proxyId)
{
UnBufferMove(proxyId);
--m_proxyCount;
m_tree.DestroyProxy(proxyId);
}
void b2BroadPhase::MoveProxy(int32 proxyId, const b2AABB& aabb, const b2Vec2& displacement)
{
bool buffer = m_tree.MoveProxy(proxyId, aabb, displacement);
if (buffer)
{
BufferMove(proxyId);
}
}
void b2BroadPhase::TouchProxy(int32 proxyId)
{
BufferMove(proxyId);
}
void b2BroadPhase::BufferMove(int32 proxyId)
{
if (m_moveCount == m_moveCapacity)
{
int32* oldBuffer = m_moveBuffer;
m_moveCapacity *= 2;
m_moveBuffer = (int32*)b2Alloc(m_moveCapacity * sizeof(int32));
memcpy(m_moveBuffer, oldBuffer, m_moveCount * sizeof(int32));
b2Free(oldBuffer);
}
m_moveBuffer[m_moveCount] = proxyId;
++m_moveCount;
}
void b2BroadPhase::UnBufferMove(int32 proxyId)
{
for (int32 i = 0; i < m_moveCount; ++i)
{
if (m_moveBuffer[i] == proxyId)
{
m_moveBuffer[i] = e_nullProxy;
}
}
}
// This is called from b2DynamicTree::Query when we are gathering pairs.
bool b2BroadPhase::QueryCallback(int32 proxyId)
{
// A proxy cannot form a pair with itself.
if (proxyId == m_queryProxyId)
{
return true;
}
// Grow the pair buffer as needed.
if (m_pairCount == m_pairCapacity)
{
b2Pair* oldBuffer = m_pairBuffer;
m_pairCapacity *= 2;
m_pairBuffer = (b2Pair*)b2Alloc(m_pairCapacity * sizeof(b2Pair));
memcpy(m_pairBuffer, oldBuffer, m_pairCount * sizeof(b2Pair));
b2Free(oldBuffer);
}
m_pairBuffer[m_pairCount].proxyIdA = b2Min(proxyId, m_queryProxyId);
m_pairBuffer[m_pairCount].proxyIdB = b2Max(proxyId, m_queryProxyId);
++m_pairCount;
return true;
}
@@ -1,257 +0,0 @@
/*
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#ifndef B2_BROAD_PHASE_H
#define B2_BROAD_PHASE_H
#include "Box2D/Common/b2Settings.h"
#include "Box2D/Collision/b2Collision.h"
#include "Box2D/Collision/b2DynamicTree.h"
#include <algorithm>
struct b2Pair
{
int32 proxyIdA;
int32 proxyIdB;
};
/// The broad-phase is used for computing pairs and performing volume queries and ray casts.
/// This broad-phase does not persist pairs. Instead, this reports potentially new pairs.
/// It is up to the client to consume the new pairs and to track subsequent overlap.
class b2BroadPhase
{
public:
enum
{
e_nullProxy = -1
};
b2BroadPhase();
~b2BroadPhase();
/// Create a proxy with an initial AABB. Pairs are not reported until
/// UpdatePairs is called.
int32 CreateProxy(const b2AABB& aabb, void* userData);
/// Destroy a proxy. It is up to the client to remove any pairs.
void DestroyProxy(int32 proxyId);
/// Call MoveProxy as many times as you like, then when you are done
/// call UpdatePairs to finalized the proxy pairs (for your time step).
void MoveProxy(int32 proxyId, const b2AABB& aabb, const b2Vec2& displacement);
/// Call to trigger a re-processing of it's pairs on the next call to UpdatePairs.
void TouchProxy(int32 proxyId);
/// Get the fat AABB for a proxy.
const b2AABB& GetFatAABB(int32 proxyId) const;
/// Get user data from a proxy. Returns nullptr if the id is invalid.
void* GetUserData(int32 proxyId) const;
/// Test overlap of fat AABBs.
bool TestOverlap(int32 proxyIdA, int32 proxyIdB) const;
/// Get the number of proxies.
int32 GetProxyCount() const;
/// Update the pairs. This results in pair callbacks. This can only add pairs.
template <typename T>
void UpdatePairs(T* callback);
/// Query an AABB for overlapping proxies. The callback class
/// is called for each proxy that overlaps the supplied AABB.
template <typename T>
void Query(T* callback, const b2AABB& aabb) const;
/// Ray-cast against the proxies in the tree. This relies on the callback
/// to perform a exact ray-cast in the case were the proxy contains a shape.
/// The callback also performs the any collision filtering. This has performance
/// roughly equal to k * log(n), where k is the number of collisions and n is the
/// number of proxies in the tree.
/// @param input the ray-cast input data. The ray extends from p1 to p1 + maxFraction * (p2 - p1).
/// @param callback a callback class that is called for each proxy that is hit by the ray.
template <typename T>
void RayCast(T* callback, const b2RayCastInput& input) const;
/// Get the height of the embedded tree.
int32 GetTreeHeight() const;
/// Get the balance of the embedded tree.
int32 GetTreeBalance() const;
/// Get the quality metric of the embedded tree.
float32 GetTreeQuality() const;
/// Shift the world origin. Useful for large worlds.
/// The shift formula is: position -= newOrigin
/// @param newOrigin the new origin with respect to the old origin
void ShiftOrigin(const b2Vec2& newOrigin);
private:
friend class b2DynamicTree;
void BufferMove(int32 proxyId);
void UnBufferMove(int32 proxyId);
bool QueryCallback(int32 proxyId);
b2DynamicTree m_tree;
int32 m_proxyCount;
int32* m_moveBuffer;
int32 m_moveCapacity;
int32 m_moveCount;
b2Pair* m_pairBuffer;
int32 m_pairCapacity;
int32 m_pairCount;
int32 m_queryProxyId;
};
/// This is used to sort pairs.
inline bool b2PairLessThan(const b2Pair& pair1, const b2Pair& pair2)
{
if (pair1.proxyIdA < pair2.proxyIdA)
{
return true;
}
if (pair1.proxyIdA == pair2.proxyIdA)
{
return pair1.proxyIdB < pair2.proxyIdB;
}
return false;
}
inline void* b2BroadPhase::GetUserData(int32 proxyId) const
{
return m_tree.GetUserData(proxyId);
}
inline bool b2BroadPhase::TestOverlap(int32 proxyIdA, int32 proxyIdB) const
{
const b2AABB& aabbA = m_tree.GetFatAABB(proxyIdA);
const b2AABB& aabbB = m_tree.GetFatAABB(proxyIdB);
return b2TestOverlap(aabbA, aabbB);
}
inline const b2AABB& b2BroadPhase::GetFatAABB(int32 proxyId) const
{
return m_tree.GetFatAABB(proxyId);
}
inline int32 b2BroadPhase::GetProxyCount() const
{
return m_proxyCount;
}
inline int32 b2BroadPhase::GetTreeHeight() const
{
return m_tree.GetHeight();
}
inline int32 b2BroadPhase::GetTreeBalance() const
{
return m_tree.GetMaxBalance();
}
inline float32 b2BroadPhase::GetTreeQuality() const
{
return m_tree.GetAreaRatio();
}
template <typename T>
void b2BroadPhase::UpdatePairs(T* callback)
{
// Reset pair buffer
m_pairCount = 0;
// Perform tree queries for all moving proxies.
for (int32 i = 0; i < m_moveCount; ++i)
{
m_queryProxyId = m_moveBuffer[i];
if (m_queryProxyId == e_nullProxy)
{
continue;
}
// We have to query the tree with the fat AABB so that
// we don't fail to create a pair that may touch later.
const b2AABB& fatAABB = m_tree.GetFatAABB(m_queryProxyId);
// Query tree, create pairs and add them pair buffer.
m_tree.Query(this, fatAABB);
}
// Reset move buffer
m_moveCount = 0;
// Sort the pair buffer to expose duplicates.
std::sort(m_pairBuffer, m_pairBuffer + m_pairCount, b2PairLessThan);
// Send the pairs back to the client.
int32 i = 0;
while (i < m_pairCount)
{
b2Pair* primaryPair = m_pairBuffer + i;
void* userDataA = m_tree.GetUserData(primaryPair->proxyIdA);
void* userDataB = m_tree.GetUserData(primaryPair->proxyIdB);
callback->AddPair(userDataA, userDataB);
++i;
// Skip any duplicate pairs.
while (i < m_pairCount)
{
b2Pair* pair = m_pairBuffer + i;
if (pair->proxyIdA != primaryPair->proxyIdA || pair->proxyIdB != primaryPair->proxyIdB)
{
break;
}
++i;
}
}
// Try to keep the tree balanced.
//m_tree.Rebalance(4);
}
template <typename T>
inline void b2BroadPhase::Query(T* callback, const b2AABB& aabb) const
{
m_tree.Query(callback, aabb);
}
template <typename T>
inline void b2BroadPhase::RayCast(T* callback, const b2RayCastInput& input) const
{
m_tree.RayCast(callback, input);
}
inline void b2BroadPhase::ShiftOrigin(const b2Vec2& newOrigin)
{
m_tree.ShiftOrigin(newOrigin);
}
#endif
@@ -1,154 +0,0 @@
/*
* Copyright (c) 2007-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#include "Box2D/Collision/b2Collision.h"
#include "Box2D/Collision/Shapes/b2CircleShape.h"
#include "Box2D/Collision/Shapes/b2PolygonShape.h"
void b2CollideCircles(
b2Manifold* manifold,
const b2CircleShape* circleA, const b2Transform& xfA,
const b2CircleShape* circleB, const b2Transform& xfB)
{
manifold->pointCount = 0;
b2Vec2 pA = b2Mul(xfA, circleA->m_p);
b2Vec2 pB = b2Mul(xfB, circleB->m_p);
b2Vec2 d = pB - pA;
float32 distSqr = b2Dot(d, d);
float32 rA = circleA->m_radius, rB = circleB->m_radius;
float32 radius = rA + rB;
if (distSqr > radius * radius)
{
return;
}
manifold->type = b2Manifold::e_circles;
manifold->localPoint = circleA->m_p;
manifold->localNormal.SetZero();
manifold->pointCount = 1;
manifold->points[0].localPoint = circleB->m_p;
manifold->points[0].id.key = 0;
}
void b2CollidePolygonAndCircle(
b2Manifold* manifold,
const b2PolygonShape* polygonA, const b2Transform& xfA,
const b2CircleShape* circleB, const b2Transform& xfB)
{
manifold->pointCount = 0;
// Compute circle position in the frame of the polygon.
b2Vec2 c = b2Mul(xfB, circleB->m_p);
b2Vec2 cLocal = b2MulT(xfA, c);
// Find the min separating edge.
int32 normalIndex = 0;
float32 separation = -b2_maxFloat;
float32 radius = polygonA->m_radius + circleB->m_radius;
int32 vertexCount = polygonA->m_count;
const b2Vec2* vertices = polygonA->m_vertices;
const b2Vec2* normals = polygonA->m_normals;
for (int32 i = 0; i < vertexCount; ++i)
{
float32 s = b2Dot(normals[i], cLocal - vertices[i]);
if (s > radius)
{
// Early out.
return;
}
if (s > separation)
{
separation = s;
normalIndex = i;
}
}
// Vertices that subtend the incident face.
int32 vertIndex1 = normalIndex;
int32 vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;
b2Vec2 v1 = vertices[vertIndex1];
b2Vec2 v2 = vertices[vertIndex2];
// If the center is inside the polygon ...
if (separation < b2_epsilon)
{
manifold->pointCount = 1;
manifold->type = b2Manifold::e_faceA;
manifold->localNormal = normals[normalIndex];
manifold->localPoint = 0.5f * (v1 + v2);
manifold->points[0].localPoint = circleB->m_p;
manifold->points[0].id.key = 0;
return;
}
// Compute barycentric coordinates
float32 u1 = b2Dot(cLocal - v1, v2 - v1);
float32 u2 = b2Dot(cLocal - v2, v1 - v2);
if (u1 <= 0.0f)
{
if (b2DistanceSquared(cLocal, v1) > radius * radius)
{
return;
}
manifold->pointCount = 1;
manifold->type = b2Manifold::e_faceA;
manifold->localNormal = cLocal - v1;
manifold->localNormal.Normalize();
manifold->localPoint = v1;
manifold->points[0].localPoint = circleB->m_p;
manifold->points[0].id.key = 0;
}
else if (u2 <= 0.0f)
{
if (b2DistanceSquared(cLocal, v2) > radius * radius)
{
return;
}
manifold->pointCount = 1;
manifold->type = b2Manifold::e_faceA;
manifold->localNormal = cLocal - v2;
manifold->localNormal.Normalize();
manifold->localPoint = v2;
manifold->points[0].localPoint = circleB->m_p;
manifold->points[0].id.key = 0;
}
else
{
b2Vec2 faceCenter = 0.5f * (v1 + v2);
float32 s = b2Dot(cLocal - faceCenter, normals[vertIndex1]);
if (s > radius)
{
return;
}
manifold->pointCount = 1;
manifold->type = b2Manifold::e_faceA;
manifold->localNormal = normals[vertIndex1];
manifold->localPoint = faceCenter;
manifold->points[0].localPoint = circleB->m_p;
manifold->points[0].id.key = 0;
}
}
@@ -1,698 +0,0 @@
/*
* Copyright (c) 2007-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#include "Box2D/Collision/b2Collision.h"
#include "Box2D/Collision/Shapes/b2CircleShape.h"
#include "Box2D/Collision/Shapes/b2EdgeShape.h"
#include "Box2D/Collision/Shapes/b2PolygonShape.h"
// Compute contact points for edge versus circle.
// This accounts for edge connectivity.
void b2CollideEdgeAndCircle(b2Manifold* manifold,
const b2EdgeShape* edgeA, const b2Transform& xfA,
const b2CircleShape* circleB, const b2Transform& xfB)
{
manifold->pointCount = 0;
// Compute circle in frame of edge
b2Vec2 Q = b2MulT(xfA, b2Mul(xfB, circleB->m_p));
b2Vec2 A = edgeA->m_vertex1, B = edgeA->m_vertex2;
b2Vec2 e = B - A;
// Barycentric coordinates
float32 u = b2Dot(e, B - Q);
float32 v = b2Dot(e, Q - A);
float32 radius = edgeA->m_radius + circleB->m_radius;
b2ContactFeature cf;
cf.indexB = 0;
cf.typeB = b2ContactFeature::e_vertex;
// Region A
if (v <= 0.0f)
{
b2Vec2 P = A;
b2Vec2 d = Q - P;
float32 dd = b2Dot(d, d);
if (dd > radius * radius)
{
return;
}
// Is there an edge connected to A?
if (edgeA->m_hasVertex0)
{
b2Vec2 A1 = edgeA->m_vertex0;
b2Vec2 B1 = A;
b2Vec2 e1 = B1 - A1;
float32 u1 = b2Dot(e1, B1 - Q);
// Is the circle in Region AB of the previous edge?
if (u1 > 0.0f)
{
return;
}
}
cf.indexA = 0;
cf.typeA = b2ContactFeature::e_vertex;
manifold->pointCount = 1;
manifold->type = b2Manifold::e_circles;
manifold->localNormal.SetZero();
manifold->localPoint = P;
manifold->points[0].id.key = 0;
manifold->points[0].id.cf = cf;
manifold->points[0].localPoint = circleB->m_p;
return;
}
// Region B
if (u <= 0.0f)
{
b2Vec2 P = B;
b2Vec2 d = Q - P;
float32 dd = b2Dot(d, d);
if (dd > radius * radius)
{
return;
}
// Is there an edge connected to B?
if (edgeA->m_hasVertex3)
{
b2Vec2 B2 = edgeA->m_vertex3;
b2Vec2 A2 = B;
b2Vec2 e2 = B2 - A2;
float32 v2 = b2Dot(e2, Q - A2);
// Is the circle in Region AB of the next edge?
if (v2 > 0.0f)
{
return;
}
}
cf.indexA = 1;
cf.typeA = b2ContactFeature::e_vertex;
manifold->pointCount = 1;
manifold->type = b2Manifold::e_circles;
manifold->localNormal.SetZero();
manifold->localPoint = P;
manifold->points[0].id.key = 0;
manifold->points[0].id.cf = cf;
manifold->points[0].localPoint = circleB->m_p;
return;
}
// Region AB
float32 den = b2Dot(e, e);
b2Assert(den > 0.0f);
b2Vec2 P = (1.0f / den) * (u * A + v * B);
b2Vec2 d = Q - P;
float32 dd = b2Dot(d, d);
if (dd > radius * radius)
{
return;
}
b2Vec2 n(-e.y, e.x);
if (b2Dot(n, Q - A) < 0.0f)
{
n.Set(-n.x, -n.y);
}
n.Normalize();
cf.indexA = 0;
cf.typeA = b2ContactFeature::e_face;
manifold->pointCount = 1;
manifold->type = b2Manifold::e_faceA;
manifold->localNormal = n;
manifold->localPoint = A;
manifold->points[0].id.key = 0;
manifold->points[0].id.cf = cf;
manifold->points[0].localPoint = circleB->m_p;
}
// This structure is used to keep track of the best separating axis.
struct b2EPAxis
{
enum Type
{
e_unknown,
e_edgeA,
e_edgeB
};
Type type;
int32 index;
float32 separation;
};
// This holds polygon B expressed in frame A.
struct b2TempPolygon
{
b2Vec2 vertices[b2_maxPolygonVertices];
b2Vec2 normals[b2_maxPolygonVertices];
int32 count;
};
// Reference face used for clipping
struct b2ReferenceFace
{
int32 i1, i2;
b2Vec2 v1, v2;
b2Vec2 normal;
b2Vec2 sideNormal1;
float32 sideOffset1;
b2Vec2 sideNormal2;
float32 sideOffset2;
};
// This class collides and edge and a polygon, taking into account edge adjacency.
struct b2EPCollider
{
void Collide(b2Manifold* manifold, const b2EdgeShape* edgeA, const b2Transform& xfA,
const b2PolygonShape* polygonB, const b2Transform& xfB);
b2EPAxis ComputeEdgeSeparation();
b2EPAxis ComputePolygonSeparation();
enum VertexType
{
e_isolated,
e_concave,
e_convex
};
b2TempPolygon m_polygonB;
b2Transform m_xf;
b2Vec2 m_centroidB;
b2Vec2 m_v0, m_v1, m_v2, m_v3;
b2Vec2 m_normal0, m_normal1, m_normal2;
b2Vec2 m_normal;
VertexType m_type1, m_type2;
b2Vec2 m_lowerLimit, m_upperLimit;
float32 m_radius;
bool m_front;
};
// Algorithm:
// 1. Classify v1 and v2
// 2. Classify polygon centroid as front or back
// 3. Flip normal if necessary
// 4. Initialize normal range to [-pi, pi] about face normal
// 5. Adjust normal range according to adjacent edges
// 6. Visit each separating axes, only accept axes within the range
// 7. Return if _any_ axis indicates separation
// 8. Clip
void b2EPCollider::Collide(b2Manifold* manifold, const b2EdgeShape* edgeA, const b2Transform& xfA,
const b2PolygonShape* polygonB, const b2Transform& xfB)
{
m_xf = b2MulT(xfA, xfB);
m_centroidB = b2Mul(m_xf, polygonB->m_centroid);
m_v0 = edgeA->m_vertex0;
m_v1 = edgeA->m_vertex1;
m_v2 = edgeA->m_vertex2;
m_v3 = edgeA->m_vertex3;
bool hasVertex0 = edgeA->m_hasVertex0;
bool hasVertex3 = edgeA->m_hasVertex3;
b2Vec2 edge1 = m_v2 - m_v1;
edge1.Normalize();
m_normal1.Set(edge1.y, -edge1.x);
float32 offset1 = b2Dot(m_normal1, m_centroidB - m_v1);
float32 offset0 = 0.0f, offset2 = 0.0f;
bool convex1 = false, convex2 = false;
// Is there a preceding edge?
if (hasVertex0)
{
b2Vec2 edge0 = m_v1 - m_v0;
edge0.Normalize();
m_normal0.Set(edge0.y, -edge0.x);
convex1 = b2Cross(edge0, edge1) >= 0.0f;
offset0 = b2Dot(m_normal0, m_centroidB - m_v0);
}
// Is there a following edge?
if (hasVertex3)
{
b2Vec2 edge2 = m_v3 - m_v2;
edge2.Normalize();
m_normal2.Set(edge2.y, -edge2.x);
convex2 = b2Cross(edge1, edge2) > 0.0f;
offset2 = b2Dot(m_normal2, m_centroidB - m_v2);
}
// Determine front or back collision. Determine collision normal limits.
if (hasVertex0 && hasVertex3)
{
if (convex1 && convex2)
{
m_front = offset0 >= 0.0f || offset1 >= 0.0f || offset2 >= 0.0f;
if (m_front)
{
m_normal = m_normal1;
m_lowerLimit = m_normal0;
m_upperLimit = m_normal2;
}
else
{
m_normal = -m_normal1;
m_lowerLimit = -m_normal1;
m_upperLimit = -m_normal1;
}
}
else if (convex1)
{
m_front = offset0 >= 0.0f || (offset1 >= 0.0f && offset2 >= 0.0f);
if (m_front)
{
m_normal = m_normal1;
m_lowerLimit = m_normal0;
m_upperLimit = m_normal1;
}
else
{
m_normal = -m_normal1;
m_lowerLimit = -m_normal2;
m_upperLimit = -m_normal1;
}
}
else if (convex2)
{
m_front = offset2 >= 0.0f || (offset0 >= 0.0f && offset1 >= 0.0f);
if (m_front)
{
m_normal = m_normal1;
m_lowerLimit = m_normal1;
m_upperLimit = m_normal2;
}
else
{
m_normal = -m_normal1;
m_lowerLimit = -m_normal1;
m_upperLimit = -m_normal0;
}
}
else
{
m_front = offset0 >= 0.0f && offset1 >= 0.0f && offset2 >= 0.0f;
if (m_front)
{
m_normal = m_normal1;
m_lowerLimit = m_normal1;
m_upperLimit = m_normal1;
}
else
{
m_normal = -m_normal1;
m_lowerLimit = -m_normal2;
m_upperLimit = -m_normal0;
}
}
}
else if (hasVertex0)
{
if (convex1)
{
m_front = offset0 >= 0.0f || offset1 >= 0.0f;
if (m_front)
{
m_normal = m_normal1;
m_lowerLimit = m_normal0;
m_upperLimit = -m_normal1;
}
else
{
m_normal = -m_normal1;
m_lowerLimit = m_normal1;
m_upperLimit = -m_normal1;
}
}
else
{
m_front = offset0 >= 0.0f && offset1 >= 0.0f;
if (m_front)
{
m_normal = m_normal1;
m_lowerLimit = m_normal1;
m_upperLimit = -m_normal1;
}
else
{
m_normal = -m_normal1;
m_lowerLimit = m_normal1;
m_upperLimit = -m_normal0;
}
}
}
else if (hasVertex3)
{
if (convex2)
{
m_front = offset1 >= 0.0f || offset2 >= 0.0f;
if (m_front)
{
m_normal = m_normal1;
m_lowerLimit = -m_normal1;
m_upperLimit = m_normal2;
}
else
{
m_normal = -m_normal1;
m_lowerLimit = -m_normal1;
m_upperLimit = m_normal1;
}
}
else
{
m_front = offset1 >= 0.0f && offset2 >= 0.0f;
if (m_front)
{
m_normal = m_normal1;
m_lowerLimit = -m_normal1;
m_upperLimit = m_normal1;
}
else
{
m_normal = -m_normal1;
m_lowerLimit = -m_normal2;
m_upperLimit = m_normal1;
}
}
}
else
{
m_front = offset1 >= 0.0f;
if (m_front)
{
m_normal = m_normal1;
m_lowerLimit = -m_normal1;
m_upperLimit = -m_normal1;
}
else
{
m_normal = -m_normal1;
m_lowerLimit = m_normal1;
m_upperLimit = m_normal1;
}
}
// Get polygonB in frameA
m_polygonB.count = polygonB->m_count;
for (int32 i = 0; i < polygonB->m_count; ++i)
{
m_polygonB.vertices[i] = b2Mul(m_xf, polygonB->m_vertices[i]);
m_polygonB.normals[i] = b2Mul(m_xf.q, polygonB->m_normals[i]);
}
m_radius = polygonB->m_radius + edgeA->m_radius;
manifold->pointCount = 0;
b2EPAxis edgeAxis = ComputeEdgeSeparation();
// If no valid normal can be found than this edge should not collide.
if (edgeAxis.type == b2EPAxis::e_unknown)
{
return;
}
if (edgeAxis.separation > m_radius)
{
return;
}
b2EPAxis polygonAxis = ComputePolygonSeparation();
if (polygonAxis.type != b2EPAxis::e_unknown && polygonAxis.separation > m_radius)
{
return;
}
// Use hysteresis for jitter reduction.
const float32 k_relativeTol = 0.98f;
const float32 k_absoluteTol = 0.001f;
b2EPAxis primaryAxis;
if (polygonAxis.type == b2EPAxis::e_unknown)
{
primaryAxis = edgeAxis;
}
else if (polygonAxis.separation > k_relativeTol * edgeAxis.separation + k_absoluteTol)
{
primaryAxis = polygonAxis;
}
else
{
primaryAxis = edgeAxis;
}
b2ClipVertex ie[2];
b2ReferenceFace rf;
if (primaryAxis.type == b2EPAxis::e_edgeA)
{
manifold->type = b2Manifold::e_faceA;
// Search for the polygon normal that is most anti-parallel to the edge normal.
int32 bestIndex = 0;
float32 bestValue = b2Dot(m_normal, m_polygonB.normals[0]);
for (int32 i = 1; i < m_polygonB.count; ++i)
{
float32 value = b2Dot(m_normal, m_polygonB.normals[i]);
if (value < bestValue)
{
bestValue = value;
bestIndex = i;
}
}
int32 i1 = bestIndex;
int32 i2 = i1 + 1 < m_polygonB.count ? i1 + 1 : 0;
ie[0].v = m_polygonB.vertices[i1];
ie[0].id.cf.indexA = 0;
ie[0].id.cf.indexB = static_cast<uint8>(i1);
ie[0].id.cf.typeA = b2ContactFeature::e_face;
ie[0].id.cf.typeB = b2ContactFeature::e_vertex;
ie[1].v = m_polygonB.vertices[i2];
ie[1].id.cf.indexA = 0;
ie[1].id.cf.indexB = static_cast<uint8>(i2);
ie[1].id.cf.typeA = b2ContactFeature::e_face;
ie[1].id.cf.typeB = b2ContactFeature::e_vertex;
if (m_front)
{
rf.i1 = 0;
rf.i2 = 1;
rf.v1 = m_v1;
rf.v2 = m_v2;
rf.normal = m_normal1;
}
else
{
rf.i1 = 1;
rf.i2 = 0;
rf.v1 = m_v2;
rf.v2 = m_v1;
rf.normal = -m_normal1;
}
}
else
{
manifold->type = b2Manifold::e_faceB;
ie[0].v = m_v1;
ie[0].id.cf.indexA = 0;
ie[0].id.cf.indexB = static_cast<uint8>(primaryAxis.index);
ie[0].id.cf.typeA = b2ContactFeature::e_vertex;
ie[0].id.cf.typeB = b2ContactFeature::e_face;
ie[1].v = m_v2;
ie[1].id.cf.indexA = 0;
ie[1].id.cf.indexB = static_cast<uint8>(primaryAxis.index);
ie[1].id.cf.typeA = b2ContactFeature::e_vertex;
ie[1].id.cf.typeB = b2ContactFeature::e_face;
rf.i1 = primaryAxis.index;
rf.i2 = rf.i1 + 1 < m_polygonB.count ? rf.i1 + 1 : 0;
rf.v1 = m_polygonB.vertices[rf.i1];
rf.v2 = m_polygonB.vertices[rf.i2];
rf.normal = m_polygonB.normals[rf.i1];
}
rf.sideNormal1.Set(rf.normal.y, -rf.normal.x);
rf.sideNormal2 = -rf.sideNormal1;
rf.sideOffset1 = b2Dot(rf.sideNormal1, rf.v1);
rf.sideOffset2 = b2Dot(rf.sideNormal2, rf.v2);
// Clip incident edge against extruded edge1 side edges.
b2ClipVertex clipPoints1[2];
b2ClipVertex clipPoints2[2];
int32 np;
// Clip to box side 1
np = b2ClipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);
if (np < b2_maxManifoldPoints)
{
return;
}
// Clip to negative box side 1
np = b2ClipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);
if (np < b2_maxManifoldPoints)
{
return;
}
// Now clipPoints2 contains the clipped points.
if (primaryAxis.type == b2EPAxis::e_edgeA)
{
manifold->localNormal = rf.normal;
manifold->localPoint = rf.v1;
}
else
{
manifold->localNormal = polygonB->m_normals[rf.i1];
manifold->localPoint = polygonB->m_vertices[rf.i1];
}
int32 pointCount = 0;
for (int32 i = 0; i < b2_maxManifoldPoints; ++i)
{
float32 separation;
separation = b2Dot(rf.normal, clipPoints2[i].v - rf.v1);
if (separation <= m_radius)
{
b2ManifoldPoint* cp = manifold->points + pointCount;
if (primaryAxis.type == b2EPAxis::e_edgeA)
{
cp->localPoint = b2MulT(m_xf, clipPoints2[i].v);
cp->id = clipPoints2[i].id;
}
else
{
cp->localPoint = clipPoints2[i].v;
cp->id.cf.typeA = clipPoints2[i].id.cf.typeB;
cp->id.cf.typeB = clipPoints2[i].id.cf.typeA;
cp->id.cf.indexA = clipPoints2[i].id.cf.indexB;
cp->id.cf.indexB = clipPoints2[i].id.cf.indexA;
}
++pointCount;
}
}
manifold->pointCount = pointCount;
}
b2EPAxis b2EPCollider::ComputeEdgeSeparation()
{
b2EPAxis axis;
axis.type = b2EPAxis::e_edgeA;
axis.index = m_front ? 0 : 1;
axis.separation = FLT_MAX;
for (int32 i = 0; i < m_polygonB.count; ++i)
{
float32 s = b2Dot(m_normal, m_polygonB.vertices[i] - m_v1);
if (s < axis.separation)
{
axis.separation = s;
}
}
return axis;
}
b2EPAxis b2EPCollider::ComputePolygonSeparation()
{
b2EPAxis axis;
axis.type = b2EPAxis::e_unknown;
axis.index = -1;
axis.separation = -FLT_MAX;
b2Vec2 perp(-m_normal.y, m_normal.x);
for (int32 i = 0; i < m_polygonB.count; ++i)
{
b2Vec2 n = -m_polygonB.normals[i];
float32 s1 = b2Dot(n, m_polygonB.vertices[i] - m_v1);
float32 s2 = b2Dot(n, m_polygonB.vertices[i] - m_v2);
float32 s = b2Min(s1, s2);
if (s > m_radius)
{
// No collision
axis.type = b2EPAxis::e_edgeB;
axis.index = i;
axis.separation = s;
return axis;
}
// Adjacency
if (b2Dot(n, perp) >= 0.0f)
{
if (b2Dot(n - m_upperLimit, m_normal) < -b2_angularSlop)
{
continue;
}
}
else
{
if (b2Dot(n - m_lowerLimit, m_normal) < -b2_angularSlop)
{
continue;
}
}
if (s > axis.separation)
{
axis.type = b2EPAxis::e_edgeB;
axis.index = i;
axis.separation = s;
}
}
return axis;
}
void b2CollideEdgeAndPolygon( b2Manifold* manifold,
const b2EdgeShape* edgeA, const b2Transform& xfA,
const b2PolygonShape* polygonB, const b2Transform& xfB)
{
b2EPCollider collider;
collider.Collide(manifold, edgeA, xfA, polygonB, xfB);
}
@@ -1,239 +0,0 @@
/*
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#include "Box2D/Collision/b2Collision.h"
#include "Box2D/Collision/Shapes/b2PolygonShape.h"
// Find the max separation between poly1 and poly2 using edge normals from poly1.
static float32 b2FindMaxSeparation(int32* edgeIndex,
const b2PolygonShape* poly1, const b2Transform& xf1,
const b2PolygonShape* poly2, const b2Transform& xf2)
{
int32 count1 = poly1->m_count;
int32 count2 = poly2->m_count;
const b2Vec2* n1s = poly1->m_normals;
const b2Vec2* v1s = poly1->m_vertices;
const b2Vec2* v2s = poly2->m_vertices;
b2Transform xf = b2MulT(xf2, xf1);
int32 bestIndex = 0;
float32 maxSeparation = -b2_maxFloat;
for (int32 i = 0; i < count1; ++i)
{
// Get poly1 normal in frame2.
b2Vec2 n = b2Mul(xf.q, n1s[i]);
b2Vec2 v1 = b2Mul(xf, v1s[i]);
// Find deepest point for normal i.
float32 si = b2_maxFloat;
for (int32 j = 0; j < count2; ++j)
{
float32 sij = b2Dot(n, v2s[j] - v1);
if (sij < si)
{
si = sij;
}
}
if (si > maxSeparation)
{
maxSeparation = si;
bestIndex = i;
}
}
*edgeIndex = bestIndex;
return maxSeparation;
}
static void b2FindIncidentEdge(b2ClipVertex c[2],
const b2PolygonShape* poly1, const b2Transform& xf1, int32 edge1,
const b2PolygonShape* poly2, const b2Transform& xf2)
{
const b2Vec2* normals1 = poly1->m_normals;
int32 count2 = poly2->m_count;
const b2Vec2* vertices2 = poly2->m_vertices;
const b2Vec2* normals2 = poly2->m_normals;
b2Assert(0 <= edge1 && edge1 < poly1->m_count);
// Get the normal of the reference edge in poly2's frame.
b2Vec2 normal1 = b2MulT(xf2.q, b2Mul(xf1.q, normals1[edge1]));
// Find the incident edge on poly2.
int32 index = 0;
float32 minDot = b2_maxFloat;
for (int32 i = 0; i < count2; ++i)
{
float32 dot = b2Dot(normal1, normals2[i]);
if (dot < minDot)
{
minDot = dot;
index = i;
}
}
// Build the clip vertices for the incident edge.
int32 i1 = index;
int32 i2 = i1 + 1 < count2 ? i1 + 1 : 0;
c[0].v = b2Mul(xf2, vertices2[i1]);
c[0].id.cf.indexA = (uint8)edge1;
c[0].id.cf.indexB = (uint8)i1;
c[0].id.cf.typeA = b2ContactFeature::e_face;
c[0].id.cf.typeB = b2ContactFeature::e_vertex;
c[1].v = b2Mul(xf2, vertices2[i2]);
c[1].id.cf.indexA = (uint8)edge1;
c[1].id.cf.indexB = (uint8)i2;
c[1].id.cf.typeA = b2ContactFeature::e_face;
c[1].id.cf.typeB = b2ContactFeature::e_vertex;
}
// Find edge normal of max separation on A - return if separating axis is found
// Find edge normal of max separation on B - return if separation axis is found
// Choose reference edge as min(minA, minB)
// Find incident edge
// Clip
// The normal points from 1 to 2
void b2CollidePolygons(b2Manifold* manifold,
const b2PolygonShape* polyA, const b2Transform& xfA,
const b2PolygonShape* polyB, const b2Transform& xfB)
{
manifold->pointCount = 0;
float32 totalRadius = polyA->m_radius + polyB->m_radius;
int32 edgeA = 0;
float32 separationA = b2FindMaxSeparation(&edgeA, polyA, xfA, polyB, xfB);
if (separationA > totalRadius)
return;
int32 edgeB = 0;
float32 separationB = b2FindMaxSeparation(&edgeB, polyB, xfB, polyA, xfA);
if (separationB > totalRadius)
return;
const b2PolygonShape* poly1; // reference polygon
const b2PolygonShape* poly2; // incident polygon
b2Transform xf1, xf2;
int32 edge1; // reference edge
uint8 flip;
const float32 k_tol = 0.1f * b2_linearSlop;
if (separationB > separationA + k_tol)
{
poly1 = polyB;
poly2 = polyA;
xf1 = xfB;
xf2 = xfA;
edge1 = edgeB;
manifold->type = b2Manifold::e_faceB;
flip = 1;
}
else
{
poly1 = polyA;
poly2 = polyB;
xf1 = xfA;
xf2 = xfB;
edge1 = edgeA;
manifold->type = b2Manifold::e_faceA;
flip = 0;
}
b2ClipVertex incidentEdge[2];
b2FindIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);
int32 count1 = poly1->m_count;
const b2Vec2* vertices1 = poly1->m_vertices;
int32 iv1 = edge1;
int32 iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0;
b2Vec2 v11 = vertices1[iv1];
b2Vec2 v12 = vertices1[iv2];
b2Vec2 localTangent = v12 - v11;
localTangent.Normalize();
b2Vec2 localNormal = b2Cross(localTangent, 1.0f);
b2Vec2 planePoint = 0.5f * (v11 + v12);
b2Vec2 tangent = b2Mul(xf1.q, localTangent);
b2Vec2 normal = b2Cross(tangent, 1.0f);
v11 = b2Mul(xf1, v11);
v12 = b2Mul(xf1, v12);
// Face offset.
float32 frontOffset = b2Dot(normal, v11);
// Side offsets, extended by polytope skin thickness.
float32 sideOffset1 = -b2Dot(tangent, v11) + totalRadius;
float32 sideOffset2 = b2Dot(tangent, v12) + totalRadius;
// Clip incident edge against extruded edge1 side edges.
b2ClipVertex clipPoints1[2];
b2ClipVertex clipPoints2[2];
int np;
// Clip to box side 1
np = b2ClipSegmentToLine(clipPoints1, incidentEdge, -tangent, sideOffset1, iv1);
if (np < 2)
return;
// Clip to negative box side 1
np = b2ClipSegmentToLine(clipPoints2, clipPoints1, tangent, sideOffset2, iv2);
if (np < 2)
{
return;
}
// Now clipPoints2 contains the clipped points.
manifold->localNormal = localNormal;
manifold->localPoint = planePoint;
int32 pointCount = 0;
for (int32 i = 0; i < b2_maxManifoldPoints; ++i)
{
float32 separation = b2Dot(normal, clipPoints2[i].v) - frontOffset;
if (separation <= totalRadius)
{
b2ManifoldPoint* cp = manifold->points + pointCount;
cp->localPoint = b2MulT(xf2, clipPoints2[i].v);
cp->id = clipPoints2[i].id;
if (flip)
{
// Swap features
b2ContactFeature cf = cp->id.cf;
cp->id.cf.indexA = cf.indexB;
cp->id.cf.indexB = cf.indexA;
cp->id.cf.typeA = cf.typeB;
cp->id.cf.typeB = cf.typeA;
}
++pointCount;
}
}
manifold->pointCount = pointCount;
}
@@ -1,252 +0,0 @@
/*
* Copyright (c) 2007-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#include "Box2D/Collision/b2Collision.h"
#include "Box2D/Collision/b2Distance.h"
void b2WorldManifold::Initialize(const b2Manifold* manifold,
const b2Transform& xfA, float32 radiusA,
const b2Transform& xfB, float32 radiusB)
{
if (manifold->pointCount == 0)
{
return;
}
switch (manifold->type)
{
case b2Manifold::e_circles:
{
normal.Set(1.0f, 0.0f);
b2Vec2 pointA = b2Mul(xfA, manifold->localPoint);
b2Vec2 pointB = b2Mul(xfB, manifold->points[0].localPoint);
if (b2DistanceSquared(pointA, pointB) > b2_epsilon * b2_epsilon)
{
normal = pointB - pointA;
normal.Normalize();
}
b2Vec2 cA = pointA + radiusA * normal;
b2Vec2 cB = pointB - radiusB * normal;
points[0] = 0.5f * (cA + cB);
separations[0] = b2Dot(cB - cA, normal);
}
break;
case b2Manifold::e_faceA:
{
normal = b2Mul(xfA.q, manifold->localNormal);
b2Vec2 planePoint = b2Mul(xfA, manifold->localPoint);
for (int32 i = 0; i < manifold->pointCount; ++i)
{
b2Vec2 clipPoint = b2Mul(xfB, manifold->points[i].localPoint);
b2Vec2 cA = clipPoint + (radiusA - b2Dot(clipPoint - planePoint, normal)) * normal;
b2Vec2 cB = clipPoint - radiusB * normal;
points[i] = 0.5f * (cA + cB);
separations[i] = b2Dot(cB - cA, normal);
}
}
break;
case b2Manifold::e_faceB:
{
normal = b2Mul(xfB.q, manifold->localNormal);
b2Vec2 planePoint = b2Mul(xfB, manifold->localPoint);
for (int32 i = 0; i < manifold->pointCount; ++i)
{
b2Vec2 clipPoint = b2Mul(xfA, manifold->points[i].localPoint);
b2Vec2 cB = clipPoint + (radiusB - b2Dot(clipPoint - planePoint, normal)) * normal;
b2Vec2 cA = clipPoint - radiusA * normal;
points[i] = 0.5f * (cA + cB);
separations[i] = b2Dot(cA - cB, normal);
}
// Ensure normal points from A to B.
normal = -normal;
}
break;
}
}
void b2GetPointStates(b2PointState state1[b2_maxManifoldPoints], b2PointState state2[b2_maxManifoldPoints],
const b2Manifold* manifold1, const b2Manifold* manifold2)
{
for (int32 i = 0; i < b2_maxManifoldPoints; ++i)
{
state1[i] = b2_nullState;
state2[i] = b2_nullState;
}
// Detect persists and removes.
for (int32 i = 0; i < manifold1->pointCount; ++i)
{
b2ContactID id = manifold1->points[i].id;
state1[i] = b2_removeState;
for (int32 j = 0; j < manifold2->pointCount; ++j)
{
if (manifold2->points[j].id.key == id.key)
{
state1[i] = b2_persistState;
break;
}
}
}
// Detect persists and adds.
for (int32 i = 0; i < manifold2->pointCount; ++i)
{
b2ContactID id = manifold2->points[i].id;
state2[i] = b2_addState;
for (int32 j = 0; j < manifold1->pointCount; ++j)
{
if (manifold1->points[j].id.key == id.key)
{
state2[i] = b2_persistState;
break;
}
}
}
}
// From Real-time Collision Detection, p179.
bool b2AABB::RayCast(b2RayCastOutput* output, const b2RayCastInput& input) const
{
float32 tmin = -b2_maxFloat;
float32 tmax = b2_maxFloat;
b2Vec2 p = input.p1;
b2Vec2 d = input.p2 - input.p1;
b2Vec2 absD = b2Abs(d);
b2Vec2 normal;
for (int32 i = 0; i < 2; ++i)
{
if (absD(i) < b2_epsilon)
{
// Parallel.
if (p(i) < lowerBound(i) || upperBound(i) < p(i))
{
return false;
}
}
else
{
float32 inv_d = 1.0f / d(i);
float32 t1 = (lowerBound(i) - p(i)) * inv_d;
float32 t2 = (upperBound(i) - p(i)) * inv_d;
// Sign of the normal vector.
float32 s = -1.0f;
if (t1 > t2)
{
b2Swap(t1, t2);
s = 1.0f;
}
// Push the min up
if (t1 > tmin)
{
normal.SetZero();
normal(i) = s;
tmin = t1;
}
// Pull the max down
tmax = b2Min(tmax, t2);
if (tmin > tmax)
{
return false;
}
}
}
// Does the ray start inside the box?
// Does the ray intersect beyond the max fraction?
if (tmin < 0.0f || input.maxFraction < tmin)
{
return false;
}
// Intersection.
output->fraction = tmin;
output->normal = normal;
return true;
}
// Sutherland-Hodgman clipping.
int32 b2ClipSegmentToLine(b2ClipVertex vOut[2], const b2ClipVertex vIn[2],
const b2Vec2& normal, float32 offset, int32 vertexIndexA)
{
// Start with no output points
int32 numOut = 0;
// Calculate the distance of end points to the line
float32 distance0 = b2Dot(normal, vIn[0].v) - offset;
float32 distance1 = b2Dot(normal, vIn[1].v) - offset;
// If the points are behind the plane
if (distance0 <= 0.0f) vOut[numOut++] = vIn[0];
if (distance1 <= 0.0f) vOut[numOut++] = vIn[1];
// If the points are on different sides of the plane
if (distance0 * distance1 < 0.0f)
{
// Find intersection point of edge and plane
float32 interp = distance0 / (distance0 - distance1);
vOut[numOut].v = vIn[0].v + interp * (vIn[1].v - vIn[0].v);
// VertexA is hitting edgeB.
vOut[numOut].id.cf.indexA = static_cast<uint8>(vertexIndexA);
vOut[numOut].id.cf.indexB = vIn[0].id.cf.indexB;
vOut[numOut].id.cf.typeA = b2ContactFeature::e_vertex;
vOut[numOut].id.cf.typeB = b2ContactFeature::e_face;
++numOut;
}
return numOut;
}
bool b2TestOverlap( const b2Shape* shapeA, int32 indexA,
const b2Shape* shapeB, int32 indexB,
const b2Transform& xfA, const b2Transform& xfB)
{
b2DistanceInput input;
input.proxyA.Set(shapeA, indexA);
input.proxyB.Set(shapeB, indexB);
input.transformA = xfA;
input.transformB = xfB;
input.useRadii = true;
b2SimplexCache cache;
cache.count = 0;
b2DistanceOutput output;
b2Distance(&output, &cache, &input);
return output.distance < 10.0f * b2_epsilon;
}
@@ -1,277 +0,0 @@
/*
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#ifndef B2_COLLISION_H
#define B2_COLLISION_H
#include "Box2D/Common/b2Math.h"
#include <limits.h>
/// @file
/// Structures and functions used for computing contact points, distance
/// queries, and TOI queries.
class b2Shape;
class b2CircleShape;
class b2EdgeShape;
class b2PolygonShape;
const uint8 b2_nullFeature = UCHAR_MAX;
/// The features that intersect to form the contact point
/// This must be 4 bytes or less.
struct b2ContactFeature
{
enum Type
{
e_vertex = 0,
e_face = 1
};
uint8 indexA; ///< Feature index on shapeA
uint8 indexB; ///< Feature index on shapeB
uint8 typeA; ///< The feature type on shapeA
uint8 typeB; ///< The feature type on shapeB
};
/// Contact ids to facilitate warm starting.
union b2ContactID
{
b2ContactFeature cf;
uint32 key; ///< Used to quickly compare contact ids.
};
/// A manifold point is a contact point belonging to a contact
/// manifold. It holds details related to the geometry and dynamics
/// of the contact points.
/// The local point usage depends on the manifold type:
/// -e_circles: the local center of circleB
/// -e_faceA: the local center of cirlceB or the clip point of polygonB
/// -e_faceB: the clip point of polygonA
/// This structure is stored across time steps, so we keep it small.
/// Note: the impulses are used for internal caching and may not
/// provide reliable contact forces, especially for high speed collisions.
struct b2ManifoldPoint
{
b2Vec2 localPoint; ///< usage depends on manifold type
float32 normalImpulse; ///< the non-penetration impulse
float32 tangentImpulse; ///< the friction impulse
b2ContactID id; ///< uniquely identifies a contact point between two shapes
};
/// A manifold for two touching convex shapes.
/// Box2D supports multiple types of contact:
/// - clip point versus plane with radius
/// - point versus point with radius (circles)
/// The local point usage depends on the manifold type:
/// -e_circles: the local center of circleA
/// -e_faceA: the center of faceA
/// -e_faceB: the center of faceB
/// Similarly the local normal usage:
/// -e_circles: not used
/// -e_faceA: the normal on polygonA
/// -e_faceB: the normal on polygonB
/// We store contacts in this way so that position correction can
/// account for movement, which is critical for continuous physics.
/// All contact scenarios must be expressed in one of these types.
/// This structure is stored across time steps, so we keep it small.
struct b2Manifold
{
enum Type
{
e_circles,
e_faceA,
e_faceB
};
b2ManifoldPoint points[b2_maxManifoldPoints]; ///< the points of contact
b2Vec2 localNormal; ///< not use for Type::e_points
b2Vec2 localPoint; ///< usage depends on manifold type
Type type;
int32 pointCount; ///< the number of manifold points
};
/// This is used to compute the current state of a contact manifold.
struct b2WorldManifold
{
/// Evaluate the manifold with supplied transforms. This assumes
/// modest motion from the original state. This does not change the
/// point count, impulses, etc. The radii must come from the shapes
/// that generated the manifold.
void Initialize(const b2Manifold* manifold,
const b2Transform& xfA, float32 radiusA,
const b2Transform& xfB, float32 radiusB);
b2Vec2 normal; ///< world vector pointing from A to B
b2Vec2 points[b2_maxManifoldPoints]; ///< world contact point (point of intersection)
float32 separations[b2_maxManifoldPoints]; ///< a negative value indicates overlap, in meters
};
/// This is used for determining the state of contact points.
enum b2PointState
{
b2_nullState, ///< point does not exist
b2_addState, ///< point was added in the update
b2_persistState, ///< point persisted across the update
b2_removeState ///< point was removed in the update
};
/// Compute the point states given two manifolds. The states pertain to the transition from manifold1
/// to manifold2. So state1 is either persist or remove while state2 is either add or persist.
void b2GetPointStates(b2PointState state1[b2_maxManifoldPoints], b2PointState state2[b2_maxManifoldPoints],
const b2Manifold* manifold1, const b2Manifold* manifold2);
/// Used for computing contact manifolds.
struct b2ClipVertex
{
b2Vec2 v;
b2ContactID id;
};
/// Ray-cast input data. The ray extends from p1 to p1 + maxFraction * (p2 - p1).
struct b2RayCastInput
{
b2Vec2 p1, p2;
float32 maxFraction;
};
/// Ray-cast output data. The ray hits at p1 + fraction * (p2 - p1), where p1 and p2
/// come from b2RayCastInput.
struct b2RayCastOutput
{
b2Vec2 normal;
float32 fraction;
};
/// An axis aligned bounding box.
struct b2AABB
{
/// Verify that the bounds are sorted.
bool IsValid() const;
/// Get the center of the AABB.
b2Vec2 GetCenter() const
{
return 0.5f * (lowerBound + upperBound);
}
/// Get the extents of the AABB (half-widths).
b2Vec2 GetExtents() const
{
return 0.5f * (upperBound - lowerBound);
}
/// Get the perimeter length
float32 GetPerimeter() const
{
float32 wx = upperBound.x - lowerBound.x;
float32 wy = upperBound.y - lowerBound.y;
return 2.0f * (wx + wy);
}
/// Combine an AABB into this one.
void Combine(const b2AABB& aabb)
{
lowerBound = b2Min(lowerBound, aabb.lowerBound);
upperBound = b2Max(upperBound, aabb.upperBound);
}
/// Combine two AABBs into this one.
void Combine(const b2AABB& aabb1, const b2AABB& aabb2)
{
lowerBound = b2Min(aabb1.lowerBound, aabb2.lowerBound);
upperBound = b2Max(aabb1.upperBound, aabb2.upperBound);
}
/// Does this aabb contain the provided AABB.
bool Contains(const b2AABB& aabb) const
{
bool result = true;
result = result && lowerBound.x <= aabb.lowerBound.x;
result = result && lowerBound.y <= aabb.lowerBound.y;
result = result && aabb.upperBound.x <= upperBound.x;
result = result && aabb.upperBound.y <= upperBound.y;
return result;
}
bool RayCast(b2RayCastOutput* output, const b2RayCastInput& input) const;
b2Vec2 lowerBound; ///< the lower vertex
b2Vec2 upperBound; ///< the upper vertex
};
/// Compute the collision manifold between two circles.
void b2CollideCircles(b2Manifold* manifold,
const b2CircleShape* circleA, const b2Transform& xfA,
const b2CircleShape* circleB, const b2Transform& xfB);
/// Compute the collision manifold between a polygon and a circle.
void b2CollidePolygonAndCircle(b2Manifold* manifold,
const b2PolygonShape* polygonA, const b2Transform& xfA,
const b2CircleShape* circleB, const b2Transform& xfB);
/// Compute the collision manifold between two polygons.
void b2CollidePolygons(b2Manifold* manifold,
const b2PolygonShape* polygonA, const b2Transform& xfA,
const b2PolygonShape* polygonB, const b2Transform& xfB);
/// Compute the collision manifold between an edge and a circle.
void b2CollideEdgeAndCircle(b2Manifold* manifold,
const b2EdgeShape* polygonA, const b2Transform& xfA,
const b2CircleShape* circleB, const b2Transform& xfB);
/// Compute the collision manifold between an edge and a circle.
void b2CollideEdgeAndPolygon(b2Manifold* manifold,
const b2EdgeShape* edgeA, const b2Transform& xfA,
const b2PolygonShape* circleB, const b2Transform& xfB);
/// Clipping for contact manifolds.
int32 b2ClipSegmentToLine(b2ClipVertex vOut[2], const b2ClipVertex vIn[2],
const b2Vec2& normal, float32 offset, int32 vertexIndexA);
/// Determine if two generic shapes overlap.
bool b2TestOverlap( const b2Shape* shapeA, int32 indexA,
const b2Shape* shapeB, int32 indexB,
const b2Transform& xfA, const b2Transform& xfB);
// ---------------- Inline Functions ------------------------------------------
inline bool b2AABB::IsValid() const
{
b2Vec2 d = upperBound - lowerBound;
bool valid = d.x >= 0.0f && d.y >= 0.0f;
valid = valid && lowerBound.IsValid() && upperBound.IsValid();
return valid;
}
inline bool b2TestOverlap(const b2AABB& a, const b2AABB& b)
{
b2Vec2 d1, d2;
d1 = b.lowerBound - a.upperBound;
d2 = a.lowerBound - b.upperBound;
if (d1.x > 0.0f || d1.y > 0.0f)
return false;
if (d2.x > 0.0f || d2.y > 0.0f)
return false;
return true;
}
#endif
@@ -1,589 +0,0 @@
/*
* Copyright (c) 2007-2009 Erin Catto http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#include "Box2D/Collision/b2Distance.h"
#include "Box2D/Collision/Shapes/b2CircleShape.h"
#include "Box2D/Collision/Shapes/b2EdgeShape.h"
#include "Box2D/Collision/Shapes/b2ChainShape.h"
#include "Box2D/Collision/Shapes/b2PolygonShape.h"
// GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates.
int32 b2_gjkCalls, b2_gjkIters, b2_gjkMaxIters;
void b2DistanceProxy::Set(const b2Shape* shape, int32 index)
{
switch (shape->GetType())
{
case b2Shape::e_circle:
{
const b2CircleShape* circle = static_cast<const b2CircleShape*>(shape);
m_vertices = &circle->m_p;
m_count = 1;
m_radius = circle->m_radius;
}
break;
case b2Shape::e_polygon:
{
const b2PolygonShape* polygon = static_cast<const b2PolygonShape*>(shape);
m_vertices = polygon->m_vertices;
m_count = polygon->m_count;
m_radius = polygon->m_radius;
}
break;
case b2Shape::e_chain:
{
const b2ChainShape* chain = static_cast<const b2ChainShape*>(shape);
b2Assert(0 <= index && index < chain->m_count);
m_buffer[0] = chain->m_vertices[index];
if (index + 1 < chain->m_count)
{
m_buffer[1] = chain->m_vertices[index + 1];
}
else
{
m_buffer[1] = chain->m_vertices[0];
}
m_vertices = m_buffer;
m_count = 2;
m_radius = chain->m_radius;
}
break;
case b2Shape::e_edge:
{
const b2EdgeShape* edge = static_cast<const b2EdgeShape*>(shape);
m_vertices = &edge->m_vertex1;
m_count = 2;
m_radius = edge->m_radius;
}
break;
default:
b2Assert(false);
}
}
struct b2SimplexVertex
{
b2Vec2 wA; // support point in proxyA
b2Vec2 wB; // support point in proxyB
b2Vec2 w; // wB - wA
float32 a; // barycentric coordinate for closest point
int32 indexA; // wA index
int32 indexB; // wB index
};
struct b2Simplex
{
void ReadCache( const b2SimplexCache* cache,
const b2DistanceProxy* proxyA, const b2Transform& transformA,
const b2DistanceProxy* proxyB, const b2Transform& transformB)
{
b2Assert(cache->count <= 3);
// Copy data from cache.
m_count = cache->count;
b2SimplexVertex* vertices = &m_v1;
for (int32 i = 0; i < m_count; ++i)
{
b2SimplexVertex* v = vertices + i;
v->indexA = cache->indexA[i];
v->indexB = cache->indexB[i];
b2Vec2 wALocal = proxyA->GetVertex(v->indexA);
b2Vec2 wBLocal = proxyB->GetVertex(v->indexB);
v->wA = b2Mul(transformA, wALocal);
v->wB = b2Mul(transformB, wBLocal);
v->w = v->wB - v->wA;
v->a = 0.0f;
}
// Compute the new simplex metric, if it is substantially different than
// old metric then flush the simplex.
if (m_count > 1)
{
float32 metric1 = cache->metric;
float32 metric2 = GetMetric();
if (metric2 < 0.5f * metric1 || 2.0f * metric1 < metric2 || metric2 < b2_epsilon)
{
// Reset the simplex.
m_count = 0;
}
}
// If the cache is empty or invalid ...
if (m_count == 0)
{
b2SimplexVertex* v = vertices + 0;
v->indexA = 0;
v->indexB = 0;
b2Vec2 wALocal = proxyA->GetVertex(0);
b2Vec2 wBLocal = proxyB->GetVertex(0);
v->wA = b2Mul(transformA, wALocal);
v->wB = b2Mul(transformB, wBLocal);
v->w = v->wB - v->wA;
v->a = 1.0f;
m_count = 1;
}
}
void WriteCache(b2SimplexCache* cache) const
{
cache->metric = GetMetric();
cache->count = uint16(m_count);
const b2SimplexVertex* vertices = &m_v1;
for (int32 i = 0; i < m_count; ++i)
{
cache->indexA[i] = uint8(vertices[i].indexA);
cache->indexB[i] = uint8(vertices[i].indexB);
}
}
b2Vec2 GetSearchDirection() const
{
switch (m_count)
{
case 1:
return -m_v1.w;
case 2:
{
b2Vec2 e12 = m_v2.w - m_v1.w;
float32 sgn = b2Cross(e12, -m_v1.w);
if (sgn > 0.0f)
{
// Origin is left of e12.
return b2Cross(1.0f, e12);
}
else
{
// Origin is right of e12.
return b2Cross(e12, 1.0f);
}
}
default:
b2Assert(false);
return b2Vec2_zero;
}
}
b2Vec2 GetClosestPoint() const
{
switch (m_count)
{
case 0:
b2Assert(false);
return b2Vec2_zero;
case 1:
return m_v1.w;
case 2:
return m_v1.a * m_v1.w + m_v2.a * m_v2.w;
case 3:
return b2Vec2_zero;
default:
b2Assert(false);
return b2Vec2_zero;
}
}
void GetWitnessPoints(b2Vec2* pA, b2Vec2* pB) const
{
switch (m_count)
{
case 0:
b2Assert(false);
break;
case 1:
*pA = m_v1.wA;
*pB = m_v1.wB;
break;
case 2:
*pA = m_v1.a * m_v1.wA + m_v2.a * m_v2.wA;
*pB = m_v1.a * m_v1.wB + m_v2.a * m_v2.wB;
break;
case 3:
*pA = m_v1.a * m_v1.wA + m_v2.a * m_v2.wA + m_v3.a * m_v3.wA;
*pB = *pA;
break;
default:
b2Assert(false);
break;
}
}
float32 GetMetric() const
{
switch (m_count)
{
case 0:
b2Assert(false);
return 0.0f;
case 1:
return 0.0f;
case 2:
return b2Distance(m_v1.w, m_v2.w);
case 3:
return b2Cross(m_v2.w - m_v1.w, m_v3.w - m_v1.w);
default:
b2Assert(false);
return 0.0f;
}
}
void Solve2();
void Solve3();
b2SimplexVertex m_v1, m_v2, m_v3;
int32 m_count;
};
// Solve a line segment using barycentric coordinates.
//
// p = a1 * w1 + a2 * w2
// a1 + a2 = 1
//
// The vector from the origin to the closest point on the line is
// perpendicular to the line.
// e12 = w2 - w1
// dot(p, e) = 0
// a1 * dot(w1, e) + a2 * dot(w2, e) = 0
//
// 2-by-2 linear system
// [1 1 ][a1] = [1]
// [w1.e12 w2.e12][a2] = [0]
//
// Define
// d12_1 = dot(w2, e12)
// d12_2 = -dot(w1, e12)
// d12 = d12_1 + d12_2
//
// Solution
// a1 = d12_1 / d12
// a2 = d12_2 / d12
void b2Simplex::Solve2()
{
b2Vec2 w1 = m_v1.w;
b2Vec2 w2 = m_v2.w;
b2Vec2 e12 = w2 - w1;
// w1 region
float32 d12_2 = -b2Dot(w1, e12);
if (d12_2 <= 0.0f)
{
// a2 <= 0, so we clamp it to 0
m_v1.a = 1.0f;
m_count = 1;
return;
}
// w2 region
float32 d12_1 = b2Dot(w2, e12);
if (d12_1 <= 0.0f)
{
// a1 <= 0, so we clamp it to 0
m_v2.a = 1.0f;
m_count = 1;
m_v1 = m_v2;
return;
}
// Must be in e12 region.
float32 inv_d12 = 1.0f / (d12_1 + d12_2);
m_v1.a = d12_1 * inv_d12;
m_v2.a = d12_2 * inv_d12;
m_count = 2;
}
// Possible regions:
// - points[2]
// - edge points[0]-points[2]
// - edge points[1]-points[2]
// - inside the triangle
void b2Simplex::Solve3()
{
b2Vec2 w1 = m_v1.w;
b2Vec2 w2 = m_v2.w;
b2Vec2 w3 = m_v3.w;
// Edge12
// [1 1 ][a1] = [1]
// [w1.e12 w2.e12][a2] = [0]
// a3 = 0
b2Vec2 e12 = w2 - w1;
float32 w1e12 = b2Dot(w1, e12);
float32 w2e12 = b2Dot(w2, e12);
float32 d12_1 = w2e12;
float32 d12_2 = -w1e12;
// Edge13
// [1 1 ][a1] = [1]
// [w1.e13 w3.e13][a3] = [0]
// a2 = 0
b2Vec2 e13 = w3 - w1;
float32 w1e13 = b2Dot(w1, e13);
float32 w3e13 = b2Dot(w3, e13);
float32 d13_1 = w3e13;
float32 d13_2 = -w1e13;
// Edge23
// [1 1 ][a2] = [1]
// [w2.e23 w3.e23][a3] = [0]
// a1 = 0
b2Vec2 e23 = w3 - w2;
float32 w2e23 = b2Dot(w2, e23);
float32 w3e23 = b2Dot(w3, e23);
float32 d23_1 = w3e23;
float32 d23_2 = -w2e23;
// Triangle123
float32 n123 = b2Cross(e12, e13);
float32 d123_1 = n123 * b2Cross(w2, w3);
float32 d123_2 = n123 * b2Cross(w3, w1);
float32 d123_3 = n123 * b2Cross(w1, w2);
// w1 region
if (d12_2 <= 0.0f && d13_2 <= 0.0f)
{
m_v1.a = 1.0f;
m_count = 1;
return;
}
// e12
if (d12_1 > 0.0f && d12_2 > 0.0f && d123_3 <= 0.0f)
{
float32 inv_d12 = 1.0f / (d12_1 + d12_2);
m_v1.a = d12_1 * inv_d12;
m_v2.a = d12_2 * inv_d12;
m_count = 2;
return;
}
// e13
if (d13_1 > 0.0f && d13_2 > 0.0f && d123_2 <= 0.0f)
{
float32 inv_d13 = 1.0f / (d13_1 + d13_2);
m_v1.a = d13_1 * inv_d13;
m_v3.a = d13_2 * inv_d13;
m_count = 2;
m_v2 = m_v3;
return;
}
// w2 region
if (d12_1 <= 0.0f && d23_2 <= 0.0f)
{
m_v2.a = 1.0f;
m_count = 1;
m_v1 = m_v2;
return;
}
// w3 region
if (d13_1 <= 0.0f && d23_1 <= 0.0f)
{
m_v3.a = 1.0f;
m_count = 1;
m_v1 = m_v3;
return;
}
// e23
if (d23_1 > 0.0f && d23_2 > 0.0f && d123_1 <= 0.0f)
{
float32 inv_d23 = 1.0f / (d23_1 + d23_2);
m_v2.a = d23_1 * inv_d23;
m_v3.a = d23_2 * inv_d23;
m_count = 2;
m_v1 = m_v3;
return;
}
// Must be in triangle123
float32 inv_d123 = 1.0f / (d123_1 + d123_2 + d123_3);
m_v1.a = d123_1 * inv_d123;
m_v2.a = d123_2 * inv_d123;
m_v3.a = d123_3 * inv_d123;
m_count = 3;
}
void b2Distance(b2DistanceOutput* output,
b2SimplexCache* cache,
const b2DistanceInput* input)
{
++b2_gjkCalls;
const b2DistanceProxy* proxyA = &input->proxyA;
const b2DistanceProxy* proxyB = &input->proxyB;
b2Transform transformA = input->transformA;
b2Transform transformB = input->transformB;
// Initialize the simplex.
b2Simplex simplex;
simplex.ReadCache(cache, proxyA, transformA, proxyB, transformB);
// Get simplex vertices as an array.
b2SimplexVertex* vertices = &simplex.m_v1;
const int32 k_maxIters = 20;
// These store the vertices of the last simplex so that we
// can check for duplicates and prevent cycling.
int32 saveA[3], saveB[3];
int32 saveCount = 0;
// Main iteration loop.
int32 iter = 0;
while (iter < k_maxIters)
{
// Copy simplex so we can identify duplicates.
saveCount = simplex.m_count;
for (int32 i = 0; i < saveCount; ++i)
{
saveA[i] = vertices[i].indexA;
saveB[i] = vertices[i].indexB;
}
switch (simplex.m_count)
{
case 1:
break;
case 2:
simplex.Solve2();
break;
case 3:
simplex.Solve3();
break;
default:
b2Assert(false);
}
// If we have 3 points, then the origin is in the corresponding triangle.
if (simplex.m_count == 3)
{
break;
}
// Get search direction.
b2Vec2 d = simplex.GetSearchDirection();
// Ensure the search direction is numerically fit.
if (d.LengthSquared() < b2_epsilon * b2_epsilon)
{
// The origin is probably contained by a line segment
// or triangle. Thus the shapes are overlapped.
// We can't return zero here even though there may be overlap.
// In case the simplex is a point, segment, or triangle it is difficult
// to determine if the origin is contained in the CSO or very close to it.
break;
}
// Compute a tentative new simplex vertex using support points.
b2SimplexVertex* vertex = vertices + simplex.m_count;
vertex->indexA = proxyA->GetSupport(b2MulT(transformA.q, -d));
vertex->wA = b2Mul(transformA, proxyA->GetVertex(vertex->indexA));
b2Vec2 wBLocal;
vertex->indexB = proxyB->GetSupport(b2MulT(transformB.q, d));
vertex->wB = b2Mul(transformB, proxyB->GetVertex(vertex->indexB));
vertex->w = vertex->wB - vertex->wA;
// Iteration count is equated to the number of support point calls.
++iter;
++b2_gjkIters;
// Check for duplicate support points. This is the main termination criteria.
bool duplicate = false;
for (int32 i = 0; i < saveCount; ++i)
{
if (vertex->indexA == saveA[i] && vertex->indexB == saveB[i])
{
duplicate = true;
break;
}
}
// If we found a duplicate support point we must exit to avoid cycling.
if (duplicate)
{
break;
}
// New vertex is ok and needed.
++simplex.m_count;
}
b2_gjkMaxIters = b2Max(b2_gjkMaxIters, iter);
// Prepare output.
simplex.GetWitnessPoints(&output->pointA, &output->pointB);
output->distance = b2Distance(output->pointA, output->pointB);
output->iterations = iter;
// Cache the simplex.
simplex.WriteCache(cache);
// Apply radii if requested.
if (input->useRadii)
{
float32 rA = proxyA->m_radius;
float32 rB = proxyB->m_radius;
if (output->distance > rA + rB && output->distance > b2_epsilon)
{
// Shapes are still no overlapped.
// Move the witness points to the outer surface.
output->distance -= rA + rB;
b2Vec2 normal = output->pointB - output->pointA;
normal.Normalize();
output->pointA += rA * normal;
output->pointB -= rB * normal;
}
else
{
// Shapes are overlapped when radii are considered.
// Move the witness points to the middle.
b2Vec2 p = 0.5f * (output->pointA + output->pointB);
output->pointA = p;
output->pointB = p;
output->distance = 0.0f;
}
}
}

Some files were not shown because too many files have changed in this diff Show More