Full Code of knarfS/smuview for AI

master a5ffb66287b7 cached
850 files
6.5 MB
1.7M tokens
8486 symbols
1 requests
Download .txt
Showing preview only (6,931K chars total). Download the full file or copy to clipboard to get everything.
Repository: knarfS/smuview
Branch: master
Commit: a5ffb66287b7
Files: 850
Total size: 6.5 MB

Directory structure:
gitextract_dlxxxgec/

├── .clang-tidy
├── .editorconfig
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   └── bug_report.md
│   └── workflows/
│       ├── build.yml
│       └── documentation.yml
├── .gitignore
├── CMake/
│   ├── CheckSigrokFeatures.cmake
│   ├── FindQwt.cmake
│   ├── GetGitRevisionDescription.cmake
│   ├── GetGitRevisionDescription.cmake.in
│   └── memaccess.cmake
├── CMakeLists.txt
├── COPYING
├── Doxyfile
├── INSTALL
├── NEWS
├── README
├── TODO
├── appimagecraft.yml
├── config.h.in
├── contrib/
│   ├── config_version.sh.in
│   ├── org.sigrok.SmuView.appdata.xml
│   ├── org.sigrok.SmuView.desktop
│   ├── smuview.spec
│   └── smuview_cross.nsi.in
├── cppcheck-suppressions.xml
├── doc/
│   ├── smuview.1
│   ├── smuview_python_bindings.html
│   └── smuview_python_bindings.txt
├── extdef.h
├── external/
│   ├── .clang-tidy
│   ├── QCodeEditor/
│   │   ├── .clang-format
│   │   ├── .editorconfig
│   │   ├── .gitignore
│   │   ├── CMakeLists.txt
│   │   ├── LICENSE.MIT
│   │   ├── README.md
│   │   ├── include/
│   │   │   ├── QCXXHighlighter
│   │   │   ├── QCodeEditor
│   │   │   ├── QGLSLCompleter
│   │   │   ├── QGLSLHighlighter
│   │   │   ├── QHighlightBlockRule
│   │   │   ├── QHighlightRule
│   │   │   ├── QJSHighlighter
│   │   │   ├── QJSONHighlighter
│   │   │   ├── QJavaHighlighter
│   │   │   ├── QLanguage
│   │   │   ├── QLineNumberArea
│   │   │   ├── QLuaCompleter
│   │   │   ├── QLuaHighlighter
│   │   │   ├── QPythonCompleter
│   │   │   ├── QPythonHighlighter
│   │   │   ├── QStyleSyntaxHighlighter
│   │   │   ├── QSyntaxStyle
│   │   │   ├── QXMLHighlighter
│   │   │   └── internal/
│   │   │       ├── QCXXHighlighter.hpp
│   │   │       ├── QCodeEditor.hpp
│   │   │       ├── QGLSLCompleter.hpp
│   │   │       ├── QGLSLHighlighter.hpp
│   │   │       ├── QHighlightBlockRule.hpp
│   │   │       ├── QHighlightRule.hpp
│   │   │       ├── QJSHighlighter.hpp
│   │   │       ├── QJSONHighlighter.hpp
│   │   │       ├── QJavaHighlighter.hpp
│   │   │       ├── QLanguage.hpp
│   │   │       ├── QLineNumberArea.hpp
│   │   │       ├── QLuaCompleter.hpp
│   │   │       ├── QLuaHighlighter.hpp
│   │   │       ├── QPythonCompleter.hpp
│   │   │       ├── QPythonHighlighter.hpp
│   │   │       ├── QStyleSyntaxHighlighter.hpp
│   │   │       ├── QSyntaxStyle.hpp
│   │   │       └── QXMLHighlighter.hpp
│   │   ├── resources/
│   │   │   ├── default_style.xml
│   │   │   ├── languages/
│   │   │   │   ├── cpp.xml
│   │   │   │   ├── glsl.xml
│   │   │   │   ├── java.xml
│   │   │   │   ├── js.xml
│   │   │   │   ├── lua.xml
│   │   │   │   └── python.xml
│   │   │   └── qcodeeditor_resources.qrc
│   │   └── src/
│   │       └── internal/
│   │           ├── QCXXHighlighter.cpp
│   │           ├── QCodeEditor.cpp
│   │           ├── QGLSLCompleter.cpp
│   │           ├── QGLSLHighlighter.cpp
│   │           ├── QJSHighlighter.cpp
│   │           ├── QJSONHighlighter.cpp
│   │           ├── QJavaHighlighter.cpp
│   │           ├── QLanguage.cpp
│   │           ├── QLineNumberArea.cpp
│   │           ├── QLuaCompleter.cpp
│   │           ├── QLuaHighlighter.cpp
│   │           ├── QPythonCompleter.cpp
│   │           ├── QPythonHighlighter.cpp
│   │           ├── QStyleSyntaxHighlighter.cpp
│   │           ├── QSyntaxStyle.cpp
│   │           └── QXMLHighlighter.cpp
│   ├── QtFindReplaceDialog/
│   │   ├── .editorconfig
│   │   ├── .gitignore
│   │   ├── COPYING
│   │   ├── README.txt
│   │   ├── TODO
│   │   ├── dialogs/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── dialogs.pro
│   │   │   ├── finddialog.cpp
│   │   │   ├── finddialog.h
│   │   │   ├── findform.cpp
│   │   │   ├── findform.h
│   │   │   ├── findreplace_global.h
│   │   │   ├── findreplacedialog.cpp
│   │   │   ├── findreplacedialog.h
│   │   │   ├── findreplacedialog.ui
│   │   │   ├── findreplaceform.cpp
│   │   │   ├── findreplaceform.h
│   │   │   └── findreplaceform.ui
│   │   ├── doc/
│   │   │   ├── .gitignore
│   │   │   ├── Doxyfile
│   │   │   ├── README.txt
│   │   │   ├── doc.pro
│   │   │   └── qtfindreplacedialog.dox
│   │   ├── make-dist.sh
│   │   ├── qtfindreplacedialog.pri
│   │   └── qtfindreplacedialog.pro
│   ├── pybind11_2.11_dev1/
│   │   ├── .appveyor.yml
│   │   ├── .clang-format
│   │   ├── .clang-tidy
│   │   ├── .cmake-format.yaml
│   │   ├── .codespell-ignore-lines
│   │   ├── .gitignore
│   │   ├── .readthedocs.yml
│   │   ├── CMakeLists.txt
│   │   ├── LICENSE
│   │   ├── MANIFEST.in
│   │   ├── README.rst
│   │   ├── include/
│   │   │   └── pybind11/
│   │   │       ├── attr.h
│   │   │       ├── buffer_info.h
│   │   │       ├── cast.h
│   │   │       ├── chrono.h
│   │   │       ├── common.h
│   │   │       ├── complex.h
│   │   │       ├── detail/
│   │   │       │   ├── class.h
│   │   │       │   ├── common.h
│   │   │       │   ├── descr.h
│   │   │       │   ├── init.h
│   │   │       │   ├── internals.h
│   │   │       │   ├── type_caster_base.h
│   │   │       │   └── typeid.h
│   │   │       ├── eigen/
│   │   │       │   ├── matrix.h
│   │   │       │   └── tensor.h
│   │   │       ├── eigen.h
│   │   │       ├── embed.h
│   │   │       ├── eval.h
│   │   │       ├── functional.h
│   │   │       ├── gil.h
│   │   │       ├── iostream.h
│   │   │       ├── numpy.h
│   │   │       ├── operators.h
│   │   │       ├── options.h
│   │   │       ├── pybind11.h
│   │   │       ├── pytypes.h
│   │   │       ├── stl/
│   │   │       │   └── filesystem.h
│   │   │       ├── stl.h
│   │   │       └── stl_bind.h
│   │   ├── noxfile.py
│   │   ├── pybind11/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── _version.py
│   │   │   ├── commands.py
│   │   │   ├── py.typed
│   │   │   └── setup_helpers.py
│   │   ├── pyproject.toml
│   │   ├── setup.cfg
│   │   ├── setup.py
│   │   ├── tests/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── catch/
│   │   │   │   └── catch.hpp
│   │   │   ├── conftest.py
│   │   │   ├── constructor_stats.h
│   │   │   ├── cross_module_gil_utils.cpp
│   │   │   ├── cross_module_interleaved_error_already_set.cpp
│   │   │   ├── env.py
│   │   │   ├── extra_python_package/
│   │   │   │   ├── pytest.ini
│   │   │   │   └── test_files.py
│   │   │   ├── extra_setuptools/
│   │   │   │   ├── pytest.ini
│   │   │   │   └── test_setuphelper.py
│   │   │   ├── local_bindings.h
│   │   │   ├── object.h
│   │   │   ├── pybind11_cross_module_tests.cpp
│   │   │   ├── pybind11_tests.cpp
│   │   │   ├── pybind11_tests.h
│   │   │   ├── pytest.ini
│   │   │   ├── requirements.txt
│   │   │   ├── test_async.cpp
│   │   │   ├── test_async.py
│   │   │   ├── test_buffers.cpp
│   │   │   ├── test_buffers.py
│   │   │   ├── test_builtin_casters.cpp
│   │   │   ├── test_builtin_casters.py
│   │   │   ├── test_call_policies.cpp
│   │   │   ├── test_call_policies.py
│   │   │   ├── test_callbacks.cpp
│   │   │   ├── test_callbacks.py
│   │   │   ├── test_chrono.cpp
│   │   │   ├── test_chrono.py
│   │   │   ├── test_class.cpp
│   │   │   ├── test_class.py
│   │   │   ├── test_cmake_build/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── embed.cpp
│   │   │   │   ├── installed_embed/
│   │   │   │   │   └── CMakeLists.txt
│   │   │   │   ├── installed_function/
│   │   │   │   │   └── CMakeLists.txt
│   │   │   │   ├── installed_target/
│   │   │   │   │   └── CMakeLists.txt
│   │   │   │   ├── main.cpp
│   │   │   │   ├── subdirectory_embed/
│   │   │   │   │   └── CMakeLists.txt
│   │   │   │   ├── subdirectory_function/
│   │   │   │   │   └── CMakeLists.txt
│   │   │   │   ├── subdirectory_target/
│   │   │   │   │   └── CMakeLists.txt
│   │   │   │   └── test.py
│   │   │   ├── test_const_name.cpp
│   │   │   ├── test_const_name.py
│   │   │   ├── test_constants_and_functions.cpp
│   │   │   ├── test_constants_and_functions.py
│   │   │   ├── test_copy_move.cpp
│   │   │   ├── test_copy_move.py
│   │   │   ├── test_custom_type_casters.cpp
│   │   │   ├── test_custom_type_casters.py
│   │   │   ├── test_custom_type_setup.cpp
│   │   │   ├── test_custom_type_setup.py
│   │   │   ├── test_docstring_options.cpp
│   │   │   ├── test_docstring_options.py
│   │   │   ├── test_eigen_matrix.cpp
│   │   │   ├── test_eigen_matrix.py
│   │   │   ├── test_eigen_tensor.cpp
│   │   │   ├── test_eigen_tensor.inl
│   │   │   ├── test_eigen_tensor.py
│   │   │   ├── test_eigen_tensor_avoid_stl_array.cpp
│   │   │   ├── test_embed/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── catch.cpp
│   │   │   │   ├── external_module.cpp
│   │   │   │   ├── test_interpreter.cpp
│   │   │   │   ├── test_interpreter.py
│   │   │   │   └── test_trampoline.py
│   │   │   ├── test_enum.cpp
│   │   │   ├── test_enum.py
│   │   │   ├── test_eval.cpp
│   │   │   ├── test_eval.py
│   │   │   ├── test_eval_call.py
│   │   │   ├── test_exceptions.cpp
│   │   │   ├── test_exceptions.h
│   │   │   ├── test_exceptions.py
│   │   │   ├── test_factory_constructors.cpp
│   │   │   ├── test_factory_constructors.py
│   │   │   ├── test_gil_scoped.cpp
│   │   │   ├── test_gil_scoped.py
│   │   │   ├── test_iostream.cpp
│   │   │   ├── test_iostream.py
│   │   │   ├── test_kwargs_and_defaults.cpp
│   │   │   ├── test_kwargs_and_defaults.py
│   │   │   ├── test_local_bindings.cpp
│   │   │   ├── test_local_bindings.py
│   │   │   ├── test_methods_and_attributes.cpp
│   │   │   ├── test_methods_and_attributes.py
│   │   │   ├── test_modules.cpp
│   │   │   ├── test_modules.py
│   │   │   ├── test_multiple_inheritance.cpp
│   │   │   ├── test_multiple_inheritance.py
│   │   │   ├── test_numpy_array.cpp
│   │   │   ├── test_numpy_array.py
│   │   │   ├── test_numpy_dtypes.cpp
│   │   │   ├── test_numpy_dtypes.py
│   │   │   ├── test_numpy_vectorize.cpp
│   │   │   ├── test_numpy_vectorize.py
│   │   │   ├── test_opaque_types.cpp
│   │   │   ├── test_opaque_types.py
│   │   │   ├── test_operator_overloading.cpp
│   │   │   ├── test_operator_overloading.py
│   │   │   ├── test_pickling.cpp
│   │   │   ├── test_pickling.py
│   │   │   ├── test_pytypes.cpp
│   │   │   ├── test_pytypes.py
│   │   │   ├── test_sequences_and_iterators.cpp
│   │   │   ├── test_sequences_and_iterators.py
│   │   │   ├── test_smart_ptr.cpp
│   │   │   ├── test_smart_ptr.py
│   │   │   ├── test_stl.cpp
│   │   │   ├── test_stl.py
│   │   │   ├── test_stl_binders.cpp
│   │   │   ├── test_stl_binders.py
│   │   │   ├── test_tagbased_polymorphic.cpp
│   │   │   ├── test_tagbased_polymorphic.py
│   │   │   ├── test_thread.cpp
│   │   │   ├── test_thread.py
│   │   │   ├── test_union.cpp
│   │   │   ├── test_union.py
│   │   │   ├── test_virtual_functions.cpp
│   │   │   ├── test_virtual_functions.py
│   │   │   ├── valgrind-numpy-scipy.supp
│   │   │   └── valgrind-python.supp
│   │   └── tools/
│   │       ├── FindCatch.cmake
│   │       ├── FindEigen3.cmake
│   │       ├── FindPythonLibsNew.cmake
│   │       ├── JoinPaths.cmake
│   │       ├── check-style.sh
│   │       ├── cmake_uninstall.cmake.in
│   │       ├── codespell_ignore_lines_from_errors.py
│   │       ├── libsize.py
│   │       ├── make_changelog.py
│   │       ├── pybind11.pc.in
│   │       ├── pybind11Common.cmake
│   │       ├── pybind11Config.cmake.in
│   │       ├── pybind11NewTools.cmake
│   │       ├── pybind11Tools.cmake
│   │       ├── pyproject.toml
│   │       ├── setup_global.py.in
│   │       └── setup_main.py.in
│   └── pybind11_2.9.2/
│       ├── .appveyor.yml
│       ├── .clang-format
│       ├── .clang-tidy
│       ├── .cmake-format.yaml
│       ├── .gitignore
│       ├── .readthedocs.yml
│       ├── CMakeLists.txt
│       ├── LICENSE
│       ├── MANIFEST.in
│       ├── README.rst
│       ├── include/
│       │   └── pybind11/
│       │       ├── attr.h
│       │       ├── buffer_info.h
│       │       ├── cast.h
│       │       ├── chrono.h
│       │       ├── common.h
│       │       ├── complex.h
│       │       ├── detail/
│       │       │   ├── class.h
│       │       │   ├── common.h
│       │       │   ├── descr.h
│       │       │   ├── init.h
│       │       │   ├── internals.h
│       │       │   ├── type_caster_base.h
│       │       │   └── typeid.h
│       │       ├── eigen.h
│       │       ├── embed.h
│       │       ├── eval.h
│       │       ├── functional.h
│       │       ├── gil.h
│       │       ├── iostream.h
│       │       ├── numpy.h
│       │       ├── operators.h
│       │       ├── options.h
│       │       ├── pybind11.h
│       │       ├── pytypes.h
│       │       ├── stl/
│       │       │   └── filesystem.h
│       │       ├── stl.h
│       │       └── stl_bind.h
│       ├── noxfile.py
│       ├── pybind11/
│       │   ├── __init__.py
│       │   ├── __main__.py
│       │   ├── _version.py
│       │   ├── _version.pyi
│       │   ├── commands.py
│       │   ├── py.typed
│       │   ├── setup_helpers.py
│       │   └── setup_helpers.pyi
│       ├── pyproject.toml
│       ├── setup.cfg
│       ├── setup.py
│       ├── tests/
│       │   ├── CMakeLists.txt
│       │   ├── catch/
│       │   │   └── catch.hpp
│       │   ├── conftest.py
│       │   ├── constructor_stats.h
│       │   ├── cross_module_gil_utils.cpp
│       │   ├── env.py
│       │   ├── extra_python_package/
│       │   │   ├── pytest.ini
│       │   │   └── test_files.py
│       │   ├── extra_setuptools/
│       │   │   ├── pytest.ini
│       │   │   └── test_setuphelper.py
│       │   ├── local_bindings.h
│       │   ├── object.h
│       │   ├── pybind11_cross_module_tests.cpp
│       │   ├── pybind11_tests.cpp
│       │   ├── pybind11_tests.h
│       │   ├── pytest.ini
│       │   ├── requirements.txt
│       │   ├── test_async.cpp
│       │   ├── test_async.py
│       │   ├── test_buffers.cpp
│       │   ├── test_buffers.py
│       │   ├── test_builtin_casters.cpp
│       │   ├── test_builtin_casters.py
│       │   ├── test_call_policies.cpp
│       │   ├── test_call_policies.py
│       │   ├── test_callbacks.cpp
│       │   ├── test_callbacks.py
│       │   ├── test_chrono.cpp
│       │   ├── test_chrono.py
│       │   ├── test_class.cpp
│       │   ├── test_class.py
│       │   ├── test_cmake_build/
│       │   │   ├── CMakeLists.txt
│       │   │   ├── embed.cpp
│       │   │   ├── installed_embed/
│       │   │   │   └── CMakeLists.txt
│       │   │   ├── installed_function/
│       │   │   │   └── CMakeLists.txt
│       │   │   ├── installed_target/
│       │   │   │   └── CMakeLists.txt
│       │   │   ├── main.cpp
│       │   │   ├── subdirectory_embed/
│       │   │   │   └── CMakeLists.txt
│       │   │   ├── subdirectory_function/
│       │   │   │   └── CMakeLists.txt
│       │   │   ├── subdirectory_target/
│       │   │   │   └── CMakeLists.txt
│       │   │   └── test.py
│       │   ├── test_const_name.cpp
│       │   ├── test_const_name.py
│       │   ├── test_constants_and_functions.cpp
│       │   ├── test_constants_and_functions.py
│       │   ├── test_copy_move.cpp
│       │   ├── test_copy_move.py
│       │   ├── test_custom_type_casters.cpp
│       │   ├── test_custom_type_casters.py
│       │   ├── test_custom_type_setup.cpp
│       │   ├── test_custom_type_setup.py
│       │   ├── test_docstring_options.cpp
│       │   ├── test_docstring_options.py
│       │   ├── test_eigen.cpp
│       │   ├── test_eigen.py
│       │   ├── test_embed/
│       │   │   ├── CMakeLists.txt
│       │   │   ├── catch.cpp
│       │   │   ├── external_module.cpp
│       │   │   ├── test_interpreter.cpp
│       │   │   ├── test_interpreter.py
│       │   │   └── test_trampoline.py
│       │   ├── test_enum.cpp
│       │   ├── test_enum.py
│       │   ├── test_eval.cpp
│       │   ├── test_eval.py
│       │   ├── test_eval_call.py
│       │   ├── test_exceptions.cpp
│       │   ├── test_exceptions.h
│       │   ├── test_exceptions.py
│       │   ├── test_factory_constructors.cpp
│       │   ├── test_factory_constructors.py
│       │   ├── test_gil_scoped.cpp
│       │   ├── test_gil_scoped.py
│       │   ├── test_iostream.cpp
│       │   ├── test_iostream.py
│       │   ├── test_kwargs_and_defaults.cpp
│       │   ├── test_kwargs_and_defaults.py
│       │   ├── test_local_bindings.cpp
│       │   ├── test_local_bindings.py
│       │   ├── test_methods_and_attributes.cpp
│       │   ├── test_methods_and_attributes.py
│       │   ├── test_modules.cpp
│       │   ├── test_modules.py
│       │   ├── test_multiple_inheritance.cpp
│       │   ├── test_multiple_inheritance.py
│       │   ├── test_numpy_array.cpp
│       │   ├── test_numpy_array.py
│       │   ├── test_numpy_dtypes.cpp
│       │   ├── test_numpy_dtypes.py
│       │   ├── test_numpy_vectorize.cpp
│       │   ├── test_numpy_vectorize.py
│       │   ├── test_opaque_types.cpp
│       │   ├── test_opaque_types.py
│       │   ├── test_operator_overloading.cpp
│       │   ├── test_operator_overloading.py
│       │   ├── test_pickling.cpp
│       │   ├── test_pickling.py
│       │   ├── test_pytypes.cpp
│       │   ├── test_pytypes.py
│       │   ├── test_sequences_and_iterators.cpp
│       │   ├── test_sequences_and_iterators.py
│       │   ├── test_smart_ptr.cpp
│       │   ├── test_smart_ptr.py
│       │   ├── test_stl.cpp
│       │   ├── test_stl.py
│       │   ├── test_stl_binders.cpp
│       │   ├── test_stl_binders.py
│       │   ├── test_tagbased_polymorphic.cpp
│       │   ├── test_tagbased_polymorphic.py
│       │   ├── test_thread.cpp
│       │   ├── test_thread.py
│       │   ├── test_union.cpp
│       │   ├── test_union.py
│       │   ├── test_virtual_functions.cpp
│       │   ├── test_virtual_functions.py
│       │   ├── valgrind-numpy-scipy.supp
│       │   └── valgrind-python.supp
│       └── tools/
│           ├── FindCatch.cmake
│           ├── FindEigen3.cmake
│           ├── FindPythonLibsNew.cmake
│           ├── check-style.sh
│           ├── cmake_uninstall.cmake.in
│           ├── libsize.py
│           ├── make_changelog.py
│           ├── pybind11Common.cmake
│           ├── pybind11Config.cmake.in
│           ├── pybind11NewTools.cmake
│           ├── pybind11Tools.cmake
│           ├── pyproject.toml
│           ├── setup_global.py.in
│           └── setup_main.py.in
├── fonts/
│   └── LICENSE
├── main.cpp
├── manual/
│   ├── CMakeLists.txt
│   ├── asciidoctor-stylesheet-factory/
│   │   ├── LICENSE
│   │   └── stylesheets/
│   │       └── readthedocs.css
│   ├── cli.adoc
│   ├── data_processing.adoc
│   ├── data_tables/
│   │   ├── combine.csv
│   │   ├── combine_30ms.csv
│   │   ├── combine_absolute.csv
│   │   └── simple.csv
│   ├── data_visualisation.adoc
│   ├── device_control.adoc
│   ├── devices.adoc
│   ├── images/
│   │   ├── AddMathChannelDialog.xcf
│   │   ├── ConnectDeviceDialog.xcf
│   │   ├── DataTableView.xcf
│   │   ├── PowerPanelView.xcf
│   │   ├── SaveSignalsDialog.xcf
│   │   ├── SequenceOutputView.xcf
│   │   ├── SmuScript.xcf
│   │   ├── SourceControlView.xcf
│   │   ├── TimePlotView_2.xcf
│   │   ├── UserDevice.xcf
│   │   ├── ValuePanelView.xcf
│   │   ├── Welcome.xcf
│   │   └── numbers/
│   │       ├── 1.xcf
│   │       ├── 10.xcf
│   │       ├── 11.xcf
│   │       ├── 12.xcf
│   │       ├── 13.xcf
│   │       ├── 14.xcf
│   │       ├── 15.xcf
│   │       ├── 16.xcf
│   │       ├── 17.xcf
│   │       ├── 18.xcf
│   │       ├── 19.xcf
│   │       ├── 2.xcf
│   │       ├── 20.xcf
│   │       ├── 3.xcf
│   │       ├── 4.xcf
│   │       ├── 5.xcf
│   │       ├── 6.xcf
│   │       ├── 7.xcf
│   │       ├── 8.xcf
│   │       └── 9.xcf
│   ├── installation.adoc
│   ├── license.adoc
│   ├── manual.adoc
│   ├── overview.adoc
│   └── smuscript.adoc
├── signalhandler.cpp
├── signalhandler.hpp
├── smuscript/
│   ├── example_characterize_battery.py
│   ├── example_characterize_psu.py
│   ├── example_characterize_psu_2.py
│   ├── example_device_properties.py
│   ├── example_multiplexer.py
│   ├── example_ui.py
│   ├── example_user_channel.py
│   ├── generate_documentation.py
│   ├── python_version.py
│   ├── test_combine_signals.py
│   ├── test_fixed_channel.py
│   └── test_rnd_crashes.py
├── smuview.kdev4
├── smuview.qrc
├── smuviewico.rc
├── src/
│   ├── application.cpp
│   ├── application.hpp
│   ├── channels/
│   │   ├── addscchannel.cpp
│   │   ├── addscchannel.hpp
│   │   ├── basechannel.cpp
│   │   ├── basechannel.hpp
│   │   ├── dividechannel.cpp
│   │   ├── dividechannel.hpp
│   │   ├── hardwarechannel.cpp
│   │   ├── hardwarechannel.hpp
│   │   ├── integratechannel.cpp
│   │   ├── integratechannel.hpp
│   │   ├── mathchannel.cpp
│   │   ├── mathchannel.hpp
│   │   ├── movingavgchannel.cpp
│   │   ├── movingavgchannel.hpp
│   │   ├── multiplysfchannel.cpp
│   │   ├── multiplysfchannel.hpp
│   │   ├── multiplysschannel.cpp
│   │   ├── multiplysschannel.hpp
│   │   ├── userchannel.cpp
│   │   └── userchannel.hpp
│   ├── data/
│   │   ├── analogbasesignal.cpp
│   │   ├── analogbasesignal.hpp
│   │   ├── analogsamplesignal.cpp
│   │   ├── analogsamplesignal.hpp
│   │   ├── analogtimesignal.cpp
│   │   ├── analogtimesignal.hpp
│   │   ├── basesignal.cpp
│   │   ├── basesignal.hpp
│   │   ├── datautil.cpp
│   │   ├── datautil.hpp
│   │   └── properties/
│   │       ├── baseproperty.cpp
│   │       ├── baseproperty.hpp
│   │       ├── boolproperty.cpp
│   │       ├── boolproperty.hpp
│   │       ├── doubleproperty.cpp
│   │       ├── doubleproperty.hpp
│   │       ├── doublerangeproperty.cpp
│   │       ├── doublerangeproperty.hpp
│   │       ├── int32property.cpp
│   │       ├── int32property.hpp
│   │       ├── measuredquantityproperty.cpp
│   │       ├── measuredquantityproperty.hpp
│   │       ├── rationalproperty.cpp
│   │       ├── rationalproperty.hpp
│   │       ├── stringproperty.cpp
│   │       ├── stringproperty.hpp
│   │       ├── uint64property.cpp
│   │       ├── uint64property.hpp
│   │       ├── uint64rangeproperty.cpp
│   │       └── uint64rangeproperty.hpp
│   ├── devicemanager.cpp
│   ├── devicemanager.hpp
│   ├── devices/
│   │   ├── basedevice.cpp
│   │   ├── basedevice.hpp
│   │   ├── configurable.cpp
│   │   ├── configurable.hpp
│   │   ├── deviceutil.cpp
│   │   ├── deviceutil.hpp
│   │   ├── hardwaredevice.cpp
│   │   ├── hardwaredevice.hpp
│   │   ├── measurementdevice.cpp
│   │   ├── measurementdevice.hpp
│   │   ├── oscilloscopedevice.cpp
│   │   ├── oscilloscopedevice.hpp
│   │   ├── sourcesinkdevice.cpp
│   │   ├── sourcesinkdevice.hpp
│   │   ├── userdevice.cpp
│   │   └── userdevice.hpp
│   ├── mainwindow.cpp
│   ├── mainwindow.hpp
│   ├── python/
│   │   ├── bindings.cpp
│   │   ├── bindings.hpp
│   │   ├── pystreambuf.cpp
│   │   ├── pystreambuf.hpp
│   │   ├── pystreamredirect.hpp
│   │   ├── smuscriptrunner.cpp
│   │   ├── smuscriptrunner.hpp
│   │   ├── uihelper.cpp
│   │   ├── uihelper.hpp
│   │   ├── uiproxy.cpp
│   │   └── uiproxy.hpp
│   ├── session.cpp
│   ├── session.hpp
│   ├── settingsmanager.cpp
│   ├── settingsmanager.hpp
│   ├── ui/
│   │   ├── data/
│   │   │   ├── quantitycombobox.cpp
│   │   │   ├── quantitycombobox.hpp
│   │   │   ├── quantityflagslist.cpp
│   │   │   ├── quantityflagslist.hpp
│   │   │   ├── unitcombobox.cpp
│   │   │   └── unitcombobox.hpp
│   │   ├── datatypes/
│   │   │   ├── basewidget.cpp
│   │   │   ├── basewidget.hpp
│   │   │   ├── boolbutton.cpp
│   │   │   ├── boolbutton.hpp
│   │   │   ├── boolcheckbox.cpp
│   │   │   ├── boolcheckbox.hpp
│   │   │   ├── boolled.cpp
│   │   │   ├── boolled.hpp
│   │   │   ├── datatypehelper.cpp
│   │   │   ├── datatypehelper.hpp
│   │   │   ├── doublecontrol.cpp
│   │   │   ├── doublecontrol.hpp
│   │   │   ├── doubledisplay.cpp
│   │   │   ├── doubledisplay.hpp
│   │   │   ├── doubleknob.cpp
│   │   │   ├── doubleknob.hpp
│   │   │   ├── doublerangecombobox.cpp
│   │   │   ├── doublerangecombobox.hpp
│   │   │   ├── doubleslider.cpp
│   │   │   ├── doubleslider.hpp
│   │   │   ├── doublesmallcontrol.cpp
│   │   │   ├── doublesmallcontrol.hpp
│   │   │   ├── doublespinbox.cpp
│   │   │   ├── doublespinbox.hpp
│   │   │   ├── int32spinbox.cpp
│   │   │   ├── int32spinbox.hpp
│   │   │   ├── measuredquantitycombobox.cpp
│   │   │   ├── measuredquantitycombobox.hpp
│   │   │   ├── rationalcombobox.cpp
│   │   │   ├── rationalcombobox.hpp
│   │   │   ├── stringcombobox.cpp
│   │   │   ├── stringcombobox.hpp
│   │   │   ├── stringlabel.cpp
│   │   │   ├── stringlabel.hpp
│   │   │   ├── stringled.cpp
│   │   │   ├── stringled.hpp
│   │   │   ├── thresholdcontrol.cpp
│   │   │   ├── thresholdcontrol.hpp
│   │   │   ├── uint64combobox.cpp
│   │   │   ├── uint64combobox.hpp
│   │   │   ├── uint64label.cpp
│   │   │   ├── uint64label.hpp
│   │   │   ├── uint64rangecombobox.cpp
│   │   │   ├── uint64rangecombobox.hpp
│   │   │   ├── uint64spinbox.cpp
│   │   │   └── uint64spinbox.hpp
│   │   ├── devices/
│   │   │   ├── channelcombobox.cpp
│   │   │   ├── channelcombobox.hpp
│   │   │   ├── channelgroupcombobox.cpp
│   │   │   ├── channelgroupcombobox.hpp
│   │   │   ├── configkeycombobox.cpp
│   │   │   ├── configkeycombobox.hpp
│   │   │   ├── configurablecombobox.cpp
│   │   │   ├── configurablecombobox.hpp
│   │   │   ├── devicecombobox.cpp
│   │   │   ├── devicecombobox.hpp
│   │   │   ├── devicetree/
│   │   │   │   ├── devicetreemodel.cpp
│   │   │   │   ├── devicetreemodel.hpp
│   │   │   │   ├── devicetreeview.cpp
│   │   │   │   ├── devicetreeview.hpp
│   │   │   │   ├── treeitem.cpp
│   │   │   │   └── treeitem.hpp
│   │   │   ├── selectconfigurableform.cpp
│   │   │   ├── selectconfigurableform.hpp
│   │   │   ├── selectpropertyform.cpp
│   │   │   ├── selectpropertyform.hpp
│   │   │   ├── selectsignalwidget.cpp
│   │   │   ├── selectsignalwidget.hpp
│   │   │   ├── signalcombobox.cpp
│   │   │   └── signalcombobox.hpp
│   │   ├── dialogs/
│   │   │   ├── aboutdialog.cpp
│   │   │   ├── aboutdialog.hpp
│   │   │   ├── addmathchanneldialog.cpp
│   │   │   ├── addmathchanneldialog.hpp
│   │   │   ├── adduserchanneldialog.cpp
│   │   │   ├── adduserchanneldialog.hpp
│   │   │   ├── addviewdialog.cpp
│   │   │   ├── addviewdialog.hpp
│   │   │   ├── connectdialog.cpp
│   │   │   ├── connectdialog.hpp
│   │   │   ├── generatewaveformdialog.cpp
│   │   │   ├── generatewaveformdialog.hpp
│   │   │   ├── plotconfigdialog.cpp
│   │   │   ├── plotconfigdialog.hpp
│   │   │   ├── plotcurveconfigdialog.cpp
│   │   │   ├── plotcurveconfigdialog.hpp
│   │   │   ├── plotdiffmarkerdialog.cpp
│   │   │   ├── plotdiffmarkerdialog.hpp
│   │   │   ├── selectsignaldialog.cpp
│   │   │   ├── selectsignaldialog.hpp
│   │   │   ├── selectxysignalsdialog.cpp
│   │   │   ├── selectxysignalsdialog.hpp
│   │   │   ├── signalsavedialog.cpp
│   │   │   └── signalsavedialog.hpp
│   │   ├── tabs/
│   │   │   ├── basetab.cpp
│   │   │   ├── basetab.hpp
│   │   │   ├── devicetab.cpp
│   │   │   ├── devicetab.hpp
│   │   │   ├── measurementtab.cpp
│   │   │   ├── measurementtab.hpp
│   │   │   ├── oscilloscopetab.cpp
│   │   │   ├── oscilloscopetab.hpp
│   │   │   ├── smuscripttab.cpp
│   │   │   ├── smuscripttab.hpp
│   │   │   ├── sourcesinktab.cpp
│   │   │   ├── sourcesinktab.hpp
│   │   │   ├── tabdockwidget.cpp
│   │   │   ├── tabdockwidget.hpp
│   │   │   ├── tabhelper.cpp
│   │   │   ├── tabhelper.hpp
│   │   │   ├── usertab.cpp
│   │   │   ├── usertab.hpp
│   │   │   ├── welcometab.cpp
│   │   │   └── welcometab.hpp
│   │   ├── views/
│   │   │   ├── baseplotview.cpp
│   │   │   ├── baseplotview.hpp
│   │   │   ├── baseview.cpp
│   │   │   ├── baseview.hpp
│   │   │   ├── dataview.cpp
│   │   │   ├── dataview.hpp
│   │   │   ├── democontrolview.cpp
│   │   │   ├── democontrolview.hpp
│   │   │   ├── devicesview.cpp
│   │   │   ├── devicesview.hpp
│   │   │   ├── genericcontrolview.cpp
│   │   │   ├── genericcontrolview.hpp
│   │   │   ├── measurementcontrolview.cpp
│   │   │   ├── measurementcontrolview.hpp
│   │   │   ├── powerpanelview.cpp
│   │   │   ├── powerpanelview.hpp
│   │   │   ├── scopehorizontalcontrolview.cpp
│   │   │   ├── scopehorizontalcontrolview.hpp
│   │   │   ├── scopetriggercontrolview.cpp
│   │   │   ├── scopetriggercontrolview.hpp
│   │   │   ├── scopeverticalcontrolview.cpp
│   │   │   ├── scopeverticalcontrolview.hpp
│   │   │   ├── sequenceoutputview.cpp
│   │   │   ├── sequenceoutputview.hpp
│   │   │   ├── smuscriptoutputview.cpp
│   │   │   ├── smuscriptoutputview.hpp
│   │   │   ├── smuscripttreeview.cpp
│   │   │   ├── smuscripttreeview.hpp
│   │   │   ├── smuscriptview.cpp
│   │   │   ├── smuscriptview.hpp
│   │   │   ├── sourcesinkcontrolview.cpp
│   │   │   ├── sourcesinkcontrolview.hpp
│   │   │   ├── timeplotview.cpp
│   │   │   ├── timeplotview.hpp
│   │   │   ├── valuepanelview.cpp
│   │   │   ├── valuepanelview.hpp
│   │   │   ├── viewhelper.cpp
│   │   │   ├── viewhelper.hpp
│   │   │   ├── xyplotview.cpp
│   │   │   └── xyplotview.hpp
│   │   └── widgets/
│   │       ├── clickablelabel.cpp
│   │       ├── clickablelabel.hpp
│   │       ├── colorbutton.cpp
│   │       ├── colorbutton.hpp
│   │       ├── monofontdisplay.cpp
│   │       ├── monofontdisplay.hpp
│   │       ├── plot/
│   │       │   ├── axislocklabel.cpp
│   │       │   ├── axislocklabel.hpp
│   │       │   ├── axispopup.cpp
│   │       │   ├── axispopup.hpp
│   │       │   ├── basecurvedata.cpp
│   │       │   ├── basecurvedata.hpp
│   │       │   ├── curve.cpp
│   │       │   ├── curve.hpp
│   │       │   ├── plot.cpp
│   │       │   ├── plot.hpp
│   │       │   ├── plotmagnifier.cpp
│   │       │   ├── plotmagnifier.hpp
│   │       │   ├── plotscalepicker.cpp
│   │       │   ├── plotscalepicker.hpp
│   │       │   ├── timecurvedata.cpp
│   │       │   ├── timecurvedata.hpp
│   │       │   ├── xycurvedata.cpp
│   │       │   └── xycurvedata.hpp
│   │       ├── popup.cpp
│   │       └── popup.hpp
│   ├── util.cpp
│   └── util.hpp
├── stuff/
│   ├── gstreamer.txt
│   ├── linuxgpib_build.txt
│   ├── loads.txt
│   ├── mxe.txt
│   ├── parameter.txt
│   ├── pps.txt
│   ├── python.txt
│   ├── relays/
│   │   └── relays.txt
│   ├── release.txt
│   ├── scpi-use.txt
│   └── snippets.txt
└── test/
    ├── CMakeLists.txt
    ├── test.cpp
    ├── test.hpp
    └── util.cpp

================================================
FILE CONTENTS
================================================

================================================
FILE: .clang-tidy
================================================
# Disabled checks:
# - bugprone-easily-swappable-parameters
#     Not needed
# - bugprone-suspicious-include
#     Too many false positives in "build/smuview_autogen". Maybe activate again
#     when HeaderFilterRegex is working correctly.
# - misc-definitions-in-headers
#     TODO: Used in deviceutil.hpp and datautil.hpp. Maybe to const static?
# - misc-non-private-member-variables-in-classes
#     protected member variables are used all over the place...
# - misc-static-assert
#     TODO: Replace all `assert("ex")` with `throw Ex()` and activate check!
# - misc-no-recursion
#     We do use recursions
# - performance-unnecessary-value-param
#     TODO: !
# - readability-avoid-const-params-in-decls
#     TODO: Keep Decl and Def signatures the same! Recheck after
#     performance-unnecessary-value-param solved! Maybe `const type` makes
#     no sense:
#     https://stackoverflow.com/questions/52916410/why-is-const-allowed-in-function-declarations
# - readability-braces-around-statements
#     Even with `ShortStatementLines` = 3 there are too many false positives.
# - readability-convert-member-functions-to-static,
#     TODO: Could this be useful in some cases?
# - readability-inconsistent-declaration-parameter-name
#     This check shows to many false positives for Qt signal declarations. We can
#     use CppChecks "funcArgNamesDifferent" instead.
# - readability-magic-numbers
#     Magic numbers are ok. Maybe replace with macros(?) in the future?
# - readability-redundant-access-specifiers
#     Used to often in header files, also not complatible with Qt access specifiers.
#         public Q_SLOTS:
#         public:
# - readability-function-cognitive-complexity
#     TODO: Enable!
# - readability-use-anyofallof
#     Foreach loops are ok for now
#
# TODO:
# - google-*,
#   -google-readability-braces-around-statements,
#   -google-readability-todo,
# - modernize-*,
#   -modernize-raw-string-literal
#
Checks: >-
  bugprone-*,
  -bugprone-easily-swappable-parameters,
  -bugprone-suspicious-include,
  clang-diagnostic-*,
  clang-analyzer-*,
  google-explicit-constructor,
  misc-*,
  -misc-definitions-in-headers,
  -misc-non-private-member-variables-in-classes,
  -misc-static-assert,
  -misc-no-recursion,
  performance-*,
  -performance-unnecessary-value-param,
  readability-*,
  -readability-avoid-const-params-in-decls,
  -readability-braces-around-statements,
  -readability-convert-member-functions-to-static,
  -readability-inconsistent-declaration-parameter-name,
  -readability-magic-numbers,
  -readability-redundant-access-specifiers,
  -readability-function-cognitive-complexity,
  -readability-use-anyofallof,

WarningsAsErrors:      ''
HeaderFilterRegex:     '^src/.*$'
AnalyzeTemporaryDtors: false
FormatStyle:           none
User:                  frank
CheckOptions:
  - key:             cert-dcl16-c.NewSuffixes
    value:           'L;LL;LU;LLU'
  - key:             cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic
    value:           '1'
  - key:             google-readability-braces-around-statements.ShortStatementLines
    value:           '1'
  - key:             google-readability-function-size.StatementThreshold
    value:           '800'
  - key:             google-readability-namespace-comments.ShortNamespaceLines
    value:           '10'
  - key:             google-readability-namespace-comments.SpacesBeforeComments
    value:           '2'
  - key:             modernize-loop-convert.MaxCopySize
    value:           '16'
  - key:             modernize-loop-convert.MinConfidence
    value:           reasonable
  - key:             modernize-loop-convert.NamingStyle
    value:           CamelCase
  - key:             modernize-pass-by-value.IncludeStyle
    value:           llvm
  - key:             modernize-replace-auto-ptr.IncludeStyle
    value:           llvm
  - key:             modernize-use-nullptr.NullMacros
    value:           'NULL'
  - key:             readability-braces-around-statements.ShortStatementLines
    value:           '3'
  - key:             readability-implicit-bool-conversion.AllowPointerConditions
    value:           '1'
  - key:             readability-implicit-bool-conversion.AllowIntegerConditions
    value:           '1'
  - key:             readability-redundant-member-init.IgnoreBaseInCopyConstructors
    value:           '1'
  - key:             readability-identifier-length.MinimumVariableNameLength
    value:           '2'
  - key:             readability-identifier-length.MinimumParameterNameLength
    value:           '2'
  - key:             readability-identifier-length.MinimumLoopCounterNameLength
    value:           '1'
  - key:             readability-identifier-length.MinimumExceptionNameLength
    value:           '1'
  - key:             readability-qualified-auto.AddConstToQualified
    value:           '1'


================================================
FILE: .editorconfig
================================================
# EditorConfig file (https://editorconfig.org) for the SmuView project

root = true

[*]
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true


# SmuView C++ and C files
[**.{c,h,cpp,hpp}]
indent_style = tab
indent_size = 4

# SmuScript python files
[smuscript/**.py]
indent_style = space
indent_size = 4

# SmuScript XML files
[**.xml]
indent_style = tab
indent_size = 4
[**.qrc]
indent_style = tab
indent_size = 4

# SmuScript CMake files
[CMakeLists.txt]
indent_style = tab
indent_size = 2
[**.cmake]
indent_style = space
indent_size = 2

# SmuView yml files
[**.yml]
indent_style = space
indent_size = 2


# external: QCodeEditor C++ files
[external/QCodeEditor/**.{cpp,hpp}]
indent_style = space
indent_size = 4

# external: QCodeEditor XML files
[external/QCodeEditor/**.xml]
indent_style = space
indent_size = 4
[external/QCodeEditor/**.qrc]
indent_style = space
indent_size = 4

# external: QCodeEditor CMake files
[external/QCodeEditor/CMakeLists.txt]
indent_style = space
indent_size = 4


# external: pybind11 C++ header files
[external/pybind11*/**.h]
indent_style = space
indent_size = 4

# external: pybind11 CMake files
[external/pybind11*/CMakeLists.txt]
indent_style = space
indent_size = 2
[external/pybind11*/**.cmake]
indent_style = space
indent_size = 2


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots or log**
If applicable, add screenshots or logs to help explain your problem.

**Enviroment (please complete the following information):**
 - SmuView version / git commit
 - AppImage, Windows installer or self compiled [gcc version, ...]
 - OS: [e.g. Debian 9, openSUSE 15.1, Windows 10, ...]

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/workflows/build.yml
================================================
name: SmuView Build

on:
  push:
    paths-ignore:
      - "doxy/**"
      - "manual/**"
      - "stuff/**"
  pull_request:
    paths-ignore:
      - "doxy/**"
      - "manual/**"
      - "stuff/**"
  workflow_dispatch:

defaults:
  run:
    shell: bash

env:
  # The path where the compiled packages will be installed.
  INSTALL_DIR: "${{ github.workspace }}/sr"
  # Git URL for the libserialport dependency
  LIBSERIALPORT_REPO: "git://sigrok.org/libserialport"
  # Git URL for the libsigrok dependency
  LIBSIGROK_REPO: "git://sigrok.org/libsigrok"
  # Git branch for the libsigrok dependency
  LIBSIGROK_BRANCH: "master"
  # Build type for SmuView (Debug, Release, RelWithDebInfo, MinSizeRel)
  BUILD_TYPE: "Release"
  # Misc commands
  WGET: "wget -c --quiet"
  GIT_CLONE: "git clone --depth=1"
  # AppImage related properties are set as container ENVs if needed.

jobs:

  build_linux:
    name: SmuView Linux build (${{ matrix.target }}, ${{ matrix.compiler.compiler }},  Qt ${{ matrix.qt.version }})

    runs-on: ubuntu-latest

    strategy:
      matrix:
        # i686 build is disabled for now!
        target: ["x86_64"]
        compiler:
          - { compiler: GCC, cc: "gcc", cxx: "g++" }
          - { compiler: LLVM, cc: "clang", cxx: "clang++" }
        qt:
          - { version: 5.12.11, system_qwt: false }
          - { version: 5.13.2, system_qwt: false }
          - { version: 5.14.2, system_qwt: false }
          - { version: 5.15.2, system_qwt: true }

    env:
      BUILD_TYPE: "Release"
      CC: ${{ matrix.compiler.cc }}
      CXX: ${{ matrix.compiler.cxx }}

    steps:
      - name: Set up Qt environment
        uses: jurplel/install-qt-action@v3
        with:
          version: ${{ matrix.qt.version }}

      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y \
            git-core gcc make autoconf automake libtool \
            g++ autoconf-archive pkg-config libglib2.0-dev libglibmm-2.4-dev \
            libzip-dev libusb-1.0-0-dev libftdi1-dev libieee1284-3-dev \
            libvisa-dev nettle-dev libavahi-client-dev libhidapi-dev check \
            doxygen swig \
            cmake libboost-dev libboost-test-dev \
            python3-dev python-gi-dev python-setuptools

      - name: Checkout sigrok-utils
        uses: actions/checkout@v3
        with:
          repository: knarfS/sigrok-util
          path: sigrok-util
          ref: github

      - name: Install system Qwt
        if: ${{ matrix.qt.system_qwt }}
        run: |
          sudo apt-get install -y libqwt-qt5-dev

      - name: Build custom Qwt
        if: ${{ !matrix.qt.system_qwt }}
        run: |
          sudo apt-get install -y mesa-common-dev libgl1-mesa-dev
          cd sigrok-util/cross-compile/github-actions
          source sigrok-linux-init-toolchain.sh
          ./sigrok-linux-build-qwt.sh

      - name: Build dependencies
        run: |
          cd sigrok-util/cross-compile/github-actions
          source sigrok-linux-init-toolchain.sh
          ./sigrok-linux-build-dependencies.sh

      - name: Checkout smuview
        uses: actions/checkout@v3
        with:
          path: smuview

      - name: Build smuview
        run: |
          source sigrok-util/cross-compile/github-actions/sigrok-linux-init-toolchain.sh
          mkdir -p smuview/build
          cd smuview/build
          PKG_CONFIG_PATH=$P cmake \
            -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_DIR \
            -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
            -DDISABLE_WERROR=FALSE \
            -DENABLE_TESTS=TRUE \
            ..
          make $PARALLEL $V


  build_appimage:
    name: SmuView AppImage build (${{ matrix.target.target }})

    runs-on: ubuntu-latest
    container:
      image: ghcr.io/knarfs/sigrok-appimage-${{ matrix.target.container }}:latest

    strategy:
      matrix:
        target:
          - target: "i386"
            container: "x86_64-i386"
            cc: "gcc -m32"
            cxx: "g++ -m32"
            ld: "ld -melf_i386"
            ldflags: "-m32"
          - target: "x86_64"
            container: "x86_64"
            cc: "gcc"
            cxx: "g++"
            ld: "ld"
            ldflags: ""

    env:
      CC: ${{ matrix.target.cc }}
      CXX: ${{ matrix.target.cxx }}
      LD:  ${{ matrix.target.ld }}
      LDFLAGS: ${{ matrix.target.ldflags }}

    steps:
      - name: Update dependencies
        run: |
          sudo apt-get update
          sudo apt-get upgrade -y

      - name: Checkout smuview
        uses: actions/checkout@v3
        with:
          path: smuview

      - name: Build AppImage
        run: |
          wget https://github.com/knarfS/appimagecraft/releases/download/continuous/appimagecraft-${{ matrix.target.target }}.AppImage
          #wget https://github.com/TheAssassin/appimagecraft/releases/download/continuous/appimagecraft-${{ matrix.target.target }}.AppImage
          chmod ug+x appimagecraft-${{ matrix.target.target }}.AppImage

          export PKG_CONFIG_PATH="/usr/lib/i386-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"

          cd smuview
          ../appimagecraft-${{ matrix.target.target }}.AppImage build -d build/

      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: SmuView ${{ matrix.target.target }} AppImage
          path: smuview/SmuView*.AppImage*


  build_mxe:
    name: SmuView MXE build (${{ matrix.target.target }})

    runs-on: ubuntu-latest
    container:
      image: ghcr.io/knarfs/sigrok-mxe:latest

    strategy:
      matrix:
        target:
          - { target: "i686", nsis_param: "" }
          - { target: "x86_64", nsis_param: "-DPE64=1" }

    env:
      TARGET: ${{ matrix.target.target }}
      DEBUG: 0
      # Download python from sigrok.org and smth is wrong with the cert
      WGET: "wget -c --quiet --no-check-certificate"

    steps:
      - name: Checkout sigrok-utils
        uses: actions/checkout@v3
        with:
          repository: knarfS/sigrok-util
          path: sigrok-util
          ref: github

      - name: Build dependencies
        run: |
          cd sigrok-util/cross-compile/github-actions
          source sigrok-mxe-init-toolchain.sh
          ./sigrok-mxe-build-dependencies.sh

      - name: Checkout smuview
        uses: actions/checkout@v3
        with:
          path: smuview

      - name: Build smuview
        run: |
          source sigrok-util/cross-compile/github-actions/sigrok-mxe-init-toolchain.sh
          mkdir -p smuview/build
          cd smuview/build
          $CMAKE \
            -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_DIR \
            -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
            -DDISABLE_WERROR=FALSE \
            -DENABLE_TESTS=TRUE \
            ..
          make $PARALLEL $V
          make install/strip $V

      - name: Build NSIS installer
        run: |
          source sigrok-util/cross-compile/github-actions/sigrok-mxe-init-toolchain.sh

          # Zadig (we ship this with frontends for easy driver switching).
          $WGET https://github.com/pbatard/libwdi/releases/download/b721/zadig-2.4.exe -O $INSTALL_DIR/zadig.exe
          $WGET https://github.com/pbatard/libwdi/releases/download/v1.2.5/zadig_xp-2.2.exe -O $INSTALL_DIR/zadig_xp.exe

          cp sigrok-util/cross-compile/github-actions/contrib-mxe/FileAssociation.nsh smuview/build/contrib
          makensis ${{ matrix.target.nsis_param }} smuview/build/contrib/smuview_cross.nsi

      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: SmuView NSIS ${{ matrix.target.target }} installer
          path: smuview/build/contrib/SmuView*installer.exe


  build_macos:
    name: SmuView MacOS build (${{ matrix.compiler.compiler }})

    runs-on: macos-11

    strategy:
      matrix:
        compiler:
          - { compiler: GCC, cc: "gcc", cxx: "g++" }
          - { compiler: LLVM, cc: "llvm-gcc", cxx: "llvm-g++" }

    env:
      CC: ${{ matrix.compiler.cc }}
      CXX: ${{ matrix.compiler.cxx }}
      # We use Homebrew Qt 5.15.x (current)
      HB_QTVER: "qt@5"
      # We use Homebrew Python 3.x (current)
      HB_PYVER: "python@3"

    steps:
      - name: Install dependencies
        run: |
          brew install autoconf automake autoconf-archive pkg-config \
            libtool libzip libusb libftdi hidapi nettle check doxygen swig \
            glib glibmm@2.66 cmake "$HB_PYVER" boost "$HB_QTVER" qwt-qt5

      - name: Checkout sigrok-utils
        uses: actions/checkout@v3
        with:
          repository: knarfS/sigrok-util
          path: sigrok-util
          ref: github

      - name: Build dependencies
        run: |
          cd sigrok-util/cross-compile/github-actions
          source sigrok-macos-init-toolchain.sh
          ./sigrok-macos-build-dependencies.sh

      - name: Checkout smuview
        uses: actions/checkout@v3
        with:
          path: smuview

      - name: Build smuview
        run: |
          source sigrok-util/cross-compile/github-actions/sigrok-macos-init-toolchain.sh
          mkdir -p smuview/build
          cd smuview/build
          PKG_CONFIG_PATH=$P cmake \
            -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_DIR \
            -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
            -DDISABLE_WERROR=FALSE \
            -DENABLE_TESTS=TRUE \
            ..
          make $PARALLEL $V
          make install $V

      - name: Build DMG
        run: |
          # Source SmuView versions and names
          source smuview/build/contrib/config_version.sh
          cd sigrok-util/cross-compile/github-actions
          source sigrok-macos-init-toolchain.sh
          ./sigrok-macos-create-dmg.sh

      - name: Upload artifact
        # Only upload artifact from the LLVM build!
        if: startsWith(matrix.compiler.compiler, 'LLVM')
        uses: actions/upload-artifact@v3
        with:
          name: SmuView DMG
          path: sigrok-util/cross-compile/github-actions/SmuView*.dmg


  publish:
    name: SmuView publish

    runs-on: ubuntu-latest

    if: |
      (github.event_name == 'push' && github.ref == 'refs/heads/master') ||
      (github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/master')
    needs:
      - build_linux
      - build_appimage
      - build_mxe
      - build_macos

    steps:
      - name: Install dependencies
        run: |
          # AppImage needs libfuse2 to start
          sudo apt-get update
          sudo apt-get install -y libfuse2
      - name: Download artifacts
        uses: actions/download-artifact@v2
      - name: Inspect directory after downloading artifacts
        run: ls -alFR
      - name: Upload artifacts and create (continuous) release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
            wget -q https://github.com/TheAssassin/pyuploadtool/releases/download/continuous/pyuploadtool-x86_64.AppImage
            chmod +x pyuploadtool-x86_64.AppImage
            ./pyuploadtool-x86_64.AppImage **/SmuView-*.*


================================================
FILE: .github/workflows/documentation.yml
================================================
name: SmuView Documentation

on:
  push:
    branches:
      - master
    paths:
      - "manual/**"
      - "src/python/bindings.cpp"
  workflow_dispatch:

defaults:
  run:
    shell: bash

env:
  # The path where the compiled packages will be installed.
  INSTALL_DIR: "${{ github.workspace }}/sr"
  # Git URL for the sigrok dependencies
  SIGROK_REPO_BASE: "https://github.com/sigrokproject"
  # Build type for SmuView (Debug, Release, RelWithDebInfo, MinSizeRel)
  BUILD_TYPE: "Release"
  # Misc commands
  WGET: "wget -c --quiet"
  GIT_CLONE: "git clone --depth=1"


jobs:

  build_manual:
    name: SmuView Manual

    runs-on: ubuntu-latest

    env:
      BUILD_TYPE: "Release"

    steps:
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y \
            git-core gcc make autoconf automake libtool \
            g++ autoconf-archive pkg-config libglib2.0-dev libglibmm-2.4-dev \
            libzip-dev check doxygen swig \
            cmake libboost-dev libqt5svg5-dev qtbase5-dev libqwt-qt5-dev \
            python3-dev python-gi-dev python-setuptools \
            asciidoctor ruby-asciidoctor-pdf coderay

      - name: Checkout sigrok-utils
        uses: actions/checkout@v3
        with:
          repository: knarfS/sigrok-util
          path: sigrok-util
          ref: github

      - name: Build dependencies
        run: |
          cd sigrok-util/cross-compile/github-actions
          source sigrok-linux-init-toolchain.sh
          ./sigrok-linux-build-dependencies.sh

      - name: Checkout smuview
        uses: actions/checkout@v3
        with:
          path: smuview

      - name: Build manual
        run: |
          source sigrok-util/cross-compile/github-actions/sigrok-linux-init-toolchain.sh
          mkdir -p smuview/build
          cd smuview/build
          PKG_CONFIG_PATH=$P cmake \
            -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_DIR \
            -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
            -DDISABLE_WERROR=TRUE \
            -DENABLE_TESTS=FALSE \
            ..
          make manual $V
          make manual-publish $V

      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: SmuView_manual
          path: smuview/build/manual_publish/


  build_python_doc:
    name: SmuView Python API

    runs-on: ubuntu-latest

    env:
      BUILD_TYPE: "Release"

    steps:
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y \
            git-core gcc make autoconf automake libtool \
            g++ autoconf-archive pkg-config libglib2.0-dev libglibmm-2.4-dev \
            libzip-dev check doxygen swig \
            cmake libboost-dev libqt5svg5-dev qtbase5-dev libqwt-qt5-dev \
            python3-dev python-gi-dev python-setuptools coreutils

      - name: Checkout sigrok-utils
        uses: actions/checkout@v3
        with:
          repository: knarfS/sigrok-util
          path: sigrok-util
          ref: github

      - name: Build dependencies
        run: |
          cd sigrok-util/cross-compile/github-actions
          source sigrok-linux-init-toolchain.sh
          ./sigrok-linux-build-dependencies.sh

      - name: Checkout smuview
        uses: actions/checkout@v3
        with:
          path: smuview

      - name: Build smuview
        run: |
          source sigrok-util/cross-compile/github-actions/sigrok-linux-init-toolchain.sh
          mkdir -p smuview/build
          cd smuview/build
          PKG_CONFIG_PATH=$P cmake \
            -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_DIR \
            -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
            -DDISABLE_WERROR=y \
            -DENABLE_TESTS=FALSE \
            ..
          make $PARALLEL $V
          make install $V

      - name: Build API doc
        run: |
          pip3 install pdoc3
          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$INSTALL_DIR/lib"
          # Source versions  and create destination folders
          source smuview/build/contrib/config_version.sh
          mkdir -p api_doc/"$SV_MANUAL_VERSION"
          # Create script for generating the API doc
          cat > gen_api.py << EOF
          import smuview
          import pdoc
          html_str = pdoc.html("smuview", show_type_annotations=True)
          f = open('./api_doc/$SV_MANUAL_VERSION/python_bindings_api.html', 'w')
          print(html_str, file=f)
          f.close()
          EOF
          # Generating the API doc
          timeout --preserve-status 60 $INSTALL_DIR/bin/smuview -s gen_api.py -platform offscreen

      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: SmuView_Python_API
          path: api_doc/


  publish:
    name: SmuView documentation publish

    runs-on: ubuntu-latest

    needs:
      - build_manual
      - build_python_doc

    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v2

      - name: Inspect directory after downloading artifacts
        run: ls -alFR

      - name: Checkout knarfS.github.io
        uses: actions/checkout@v3
        with:
          repository: knarfS/knarfS.github.io
          path: knarfS.github.io
          persist-credentials: false

      - name: Copy documentation
        run: |
          cp -r SmuView_manual/* knarfS.github.io/doc/smuview
          cp -r SmuView_Python_API/* knarfS.github.io/doc/smuview

      - name: Publish documentation
        uses: cpina/github-action-push-to-another-repository@main
        env:
          SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
        with:
          source-directory: "knarfS.github.io"
          destination-github-username: "knarfS"
          destination-repository-name: "knarfS.github.io"
          user-email: "frank-stettner@gmx.net"
          target-branch: "master"
          commit-message: "Automated update for ORIGIN_COMMIT"


================================================
FILE: .gitignore
================================================
# Unwanted smuview files
TOASK
doc/linuxgpib_build.txt
doc/parameter.txt
doc/pps-wiki.txt
doc/relays/
testing/

# CMake
CMakeCache.txt
CMakeFiles
CMakeScripts
Testing
Makefile
cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake
build/

# clangd cache
.cache/

# C++ objects and libs
*.slo
*.lo
*.o
*.a
*.la
*.lai
*.so
*.dll
*.lib
*.dylib
*.exe
*.out
*.app

# Qt-es
object_script.*.Release
object_script.*.Debug
*_plugin_import.cpp
/.qmake.cache
/.qmake.stash
*.pro.user
*.pro.user.*
*.qbs.user
*.qbs.user.*
*.moc
moc_*.cpp
moc_*.h
qrc_*.cpp
ui_*.h
*.qmlc
*.jsc
Makefile*
*build-*
!build-*.yml

# Qt unit tests
target_wrapper.*

# doxygen
doxy/

# QtCreator
*.autosave

# QtCtreator Qml
*.qmlproject.user
*.qmlproject.user.*

# QtCtreator CMake
CMakeLists.txt.user*

# KDEvelop
.kdev4/

# JetBrains
.idea/

# Editor backups
*.save
*.swp

# Build artifacts
*.AppImage


================================================
FILE: CMake/CheckSigrokFeatures.cmake
================================================
##
## This file is part of the SmuView project.
##
## Copyright (C) 2021 Frank Stettner <frank-stettner@gmx.net>
##
## 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 2 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 <http://www.gnu.org/licenses/>.
##

# Check if the installed libsigrok has the required features.
function(check_libsigrok_features additional_header additional_lib)
  include(CheckCXXSourceCompiles)
  include(CMakePushCheckState)
  cmake_push_check_state()
  set(CMAKE_REQUIRED_FLAGS "-std=c++11")
  set(CMAKE_REQUIRED_INCLUDES "${additional_header}")
  set(CMAKE_REQUIRED_LIBRARIES "${additional_lib}")
  set(CMAKE_REQUIRED_QUIET 1)
  check_cxx_source_compiles("
#include <libsigrokcxx/libsigrokcxx.hpp>
const sigrok::ConfigKey *config_key;
int main() {
	config_key = sigrok::ConfigKey::MULTIPLEXER;
	return 0;
}
" HAS_FEATURES)
  cmake_pop_check_state()

  if (NOT HAS_FEATURES)
    message(FATAL_ERROR "libsigrok is too old, minimum required version is 0.6.0-git-522381a3")
  endif()
endfunction(check_libsigrok_features)


================================================
FILE: CMake/FindQwt.cmake
================================================
# Find Qwt
# ~~~~~~~~
# Copyright (c) 2010, Tim Sutton <tim at linfiniti.com>
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
# Once run this will define:
#
# QWT_FOUND       = system has QWT lib
# QWT_LIBRARY     = full path to the QWT library
# QWT_INCLUDE_DIR = where to find headers
#


set(QWT_LIBRARY_NAMES qwt-qt5 qwt6-qt5 qwt)
set(QWT_HOMEBREW_INSTALL_PATH /usr/local/opt/qwt-qt5)
file(GLOB QWT_CUSTOM_INSTALL_PATH /usr/local/qwt-6.1.[0-9])

find_library(QWT_LIBRARY
  NAMES ${QWT_LIBRARY_NAMES}
  PATHS
    /usr/lib
    /usr/local/lib
    "${QWT_HOMEBREW_INSTALL_PATH}/lib"
    "${QWT_CUSTOM_INSTALL_PATH}/lib"
    "$ENV{LIB_DIR}/lib"
    "$ENV{LIB}"
)

set(_qwt_fw)
if(QWT_LIBRARY MATCHES "/qwt.*\\.framework")
  string(REGEX REPLACE "^(.*/qwt.*\\.framework).*$" "\\1" _qwt_fw "${QWT_LIBRARY}")
endif()

FIND_PATH(QWT_INCLUDE_DIR NAMES qwt.h PATHS
  "${_qwt_fw}/Headers"
  /usr/include
  /usr/local/include
  "${QWT_HOMEBREW_INSTALL_PATH}/include"
  "${QWT_CUSTOM_INSTALL_PATH}/include"
  "$ENV{LIB_DIR}/include"
  "$ENV{INCLUDE}"
  PATH_SUFFIXES qwt-qt5 qt5/qwt qwt qwt6
)

IF (QWT_INCLUDE_DIR AND QWT_LIBRARY)
  SET(QWT_FOUND TRUE)
ENDIF (QWT_INCLUDE_DIR AND QWT_LIBRARY)

IF (QWT_FOUND)
  FILE(READ ${QWT_INCLUDE_DIR}/qwt_global.h qwt_header)
  STRING(REGEX REPLACE "^.*QWT_VERSION_STR +\"([^\"]+)\".*$" "\\1" QWT_VERSION_STR "${qwt_header}")
  IF (NOT QWT_FIND_QUIETLY)
    MESSAGE(STATUS "Found Qwt: ${QWT_LIBRARY} (${QWT_VERSION_STR})")
  ENDIF (NOT QWT_FIND_QUIETLY)
ELSE (QWT_FOUND)
  IF (QWT_FIND_REQUIRED)
    MESSAGE(FATAL_ERROR "Could not find Qwt")
  ENDIF (QWT_FIND_REQUIRED)
ENDIF (QWT_FOUND)


================================================
FILE: CMake/GetGitRevisionDescription.cmake
================================================
# - Returns a version string from Git
#
# These functions force a re-configure on each git commit so that you can
# trust the values of the variables in your build system.
#
#  get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
#
# Returns the refspec and sha hash of the current head revision
#
#  git_describe(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe on the source tree, and adjusting
# the output so that it tests false if an error occurs.
#
#  git_get_exact_tag(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe --exact-match on the source tree,
# and adjusting the output so that it tests false if there was no exact
# matching tag.
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)

if(__get_git_revision_description)
	return()
endif()
set(__get_git_revision_description YES)

# We must run the following at "include" time, not at function call time,
# to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)

function(get_git_head_revision _refspecvar _hashvar)
	set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
	set(GIT_DIR "${GIT_PARENT_DIR}/.git")
	while(NOT EXISTS "${GIT_DIR}")	# .git dir not found, search parent directories
		set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
		get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
		if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
			# We have reached the root directory, we are not in git
			set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
			set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
			return()
		endif()
		set(GIT_DIR "${GIT_PARENT_DIR}/.git")
	endwhile()
	# check if this is a submodule
	if(NOT IS_DIRECTORY ${GIT_DIR})
		file(READ ${GIT_DIR} submodule)
		string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
		get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
		get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
	endif()
	set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
	if(NOT EXISTS "${GIT_DATA}")
		file(MAKE_DIRECTORY "${GIT_DATA}")
	endif()

	if(NOT EXISTS "${GIT_DIR}/HEAD")
		return()
	endif()
	set(HEAD_FILE "${GIT_DATA}/HEAD")
	configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)

	configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
		"${GIT_DATA}/grabRef.cmake"
		@ONLY)
	include("${GIT_DATA}/grabRef.cmake")

	set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
	set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
endfunction()

function(git_describe _var)
	if(NOT GIT_FOUND)
		find_package(Git QUIET)
	endif()
	get_git_head_revision(refspec hash)
	if(NOT GIT_FOUND)
		set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
		return()
	endif()
	if(NOT hash)
		set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
		return()
	endif()

	# TODO sanitize
	#if((${ARGN}" MATCHES "&&") OR
	#	(ARGN MATCHES "||") OR
	#	(ARGN MATCHES "\\;"))
	#	message("Please report the following error to the project!")
	#	message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
	#endif()

	#message(STATUS "Arguments to execute_process: ${ARGN}")

	execute_process(COMMAND
		"${GIT_EXECUTABLE}"
		describe
		${hash}
		${ARGN}
		WORKING_DIRECTORY
		"${CMAKE_SOURCE_DIR}"
		RESULT_VARIABLE
		res
		OUTPUT_VARIABLE
		out
		ERROR_QUIET
		OUTPUT_STRIP_TRAILING_WHITESPACE)
	if(NOT res EQUAL 0)
		set(out "${out}-${res}-NOTFOUND")
	endif()

	set(${_var} "${out}" PARENT_SCOPE)
endfunction()

function(git_get_exact_tag _var)
	git_describe(out --exact-match ${ARGN})
	set(${_var} "${out}" PARENT_SCOPE)
endfunction()


================================================
FILE: CMake/GetGitRevisionDescription.cmake.in
================================================
#
# Internal file for GetGitRevisionDescription.cmake
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)

set(HEAD_HASH)

file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)

string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
if(HEAD_CONTENTS MATCHES "ref")
	# named branch
	string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
	if(EXISTS "@GIT_DIR@/${HEAD_REF}")
		configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
	else()
		configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
		file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
		if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
			set(HEAD_HASH "${CMAKE_MATCH_1}")
		endif()
	endif()
else()
	# detached HEAD
	configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
endif()

if(NOT HEAD_HASH)
	file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
	string(STRIP "${HEAD_HASH}" HEAD_HASH)
endif()


================================================
FILE: CMake/memaccess.cmake
================================================
##
## This file is part of the SmuView project.
##
## Copyright (C) 2014 Marcus Comstedt <marcus@mc.pp.se>
##
## 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 2 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 <http://www.gnu.org/licenses/>.
##

include(CheckCSourceRuns)

function(memaccess_check_unaligned_le _var)
if(NOT CMAKE_CROSSCOMPILING)
CHECK_C_SOURCE_RUNS("
#include <stdint.h>
int main() {
    int i;
    union { uint64_t u64; uint8_t u8[16]; } d;
    uint64_t v;
    for (i=0; i<16; i++)
        d.u8[i] = i;
    v = *(uint64_t *)(d.u8+1);
    if (v != 0x0807060504030201ULL)
       return 1;
    return 0;
}" ${_var})
endif()
if(CMAKE_CROSSCOMPILING)
  message(STATUS "Cross compiling - using portable code for memory access")
endif()
endfunction()


================================================
FILE: CMakeLists.txt
================================================
##
## This file is part of the SmuView project.
##
## Copyright (C) 2012 Joel Holdsworth <joel@airwebreathe.org.uk>
## Copyright (C) 2012-2013 Alexandru Gagniuc <mr.nuke.me@gmail.com>
## Copyright (C) 2017-2022 Frank Stettner <frank-stettner@gmx.net>
##
## 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 <http://www.gnu.org/licenses/>.
##

cmake_minimum_required(VERSION 3.6)

project(smuview C CXX)

include(GNUInstallDirs)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake")


#===============================================================================
#= User Options
#-------------------------------------------------------------------------------

option(DISABLE_WERROR "Build without -Werror" FALSE)
option(ENABLE_SIGNALS "Build with UNIX signals" TRUE)
option(ENABLE_TESTS "Enable unit tests" TRUE)
option(STATIC_PKGDEPS_LIBS "Statically link to (pkg-config) libraries" FALSE)

# Let AUTOMOC and AUTOUIC process GENERATED files.
if(POLICY CMP0071)
	cmake_policy(SET CMP0071 NEW)
endif()

# Only interpret if() arguments as variables or keywords when unquoted.
if(POLICY CMP0054)
	cmake_policy(SET CMP0054 NEW)
endif()

# SmuView, QCodeEditor and pybind11 only need C++11, but the upcoming Boost.Math
# (Boost 1.82 release) library requires C++14 as minimum language standard.
set(CMAKE_CXX_STANDARD 14)

if(WIN32)
	# On Windows/MinGW we need to statically link to libraries.
	# This option is user configurable, but enable it by default on win32.
	set(STATIC_PKGDEPS_LIBS TRUE)

	# Windows does not support UNIX signals.
	set(ENABLE_SIGNALS FALSE)

	# When cross compiling this is needed for pkg-config
	set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
endif()

if(NOT CMAKE_BUILD_TYPE)
	set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
	"Choose the type of build (None, Debug, Release, RelWithDebInfo, MinSizeRel)."
	FORCE)
endif()

# Generate compile_commands.json in build/ for analyzers like clang-tidy.
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

message(STATUS "DISABLE_WERROR: ${DISABLE_WERROR}")
message(STATUS "ENABLE_SIGNALS: ${ENABLE_SIGNALS}")
message(STATUS "ENABLE_TESTS: ${ENABLE_TESTS}")
message(STATUS "STATIC_PKGDEPS_LIBS: ${STATIC_PKGDEPS_LIBS}")

#===============================================================================
#= Dependencies
#-------------------------------------------------------------------------------

list(APPEND PKGDEPS glib-2.0>=2.28.0)
list(APPEND PKGDEPS glibmm-2.4>=2.28.0)

set(LIBSR_CXX_BINDING "libsigrokcxx>=0.5.2")
list(APPEND PKGDEPS "${LIBSR_CXX_BINDING}")

find_package(PkgConfig)
pkg_check_modules(LIBSRCXX ${LIBSR_CXX_BINDING} IMPORTED_TARGET)
if(NOT LIBSRCXX_FOUND OR NOT LIBSRCXX_VERSION)
	message(FATAL_ERROR "libsigrok C++ bindings missing, check libsigrok's 'configure' output (missing dependencies?)")
endif()
pkg_check_modules(PKGDEPS REQUIRED IMPORTED_TARGET ${PKGDEPS})

include(CheckSigrokFeatures)
if(STATIC_PKGDEPS_LIBS)
	check_libsigrok_features("${LIBSRCXX_STATIC_INCLUDE_DIRS}" PkgConfig::PKGDEPS)
else()
	check_libsigrok_features("${LIBSRCXX_INCLUDE_DIRS}" PkgConfig::PKGDEPS)
endif()

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

find_package(Qt5 5.7 COMPONENTS Core Gui Widgets Svg REQUIRED)

if(MINGW)
	# MXE workaround: Use pkg-config to find Qt5 libs.
	# https://github.com/mxe/mxe/issues/1642
	# Not required (and doesn't work) on MSYS2.
	if(NOT DEFINED ENV{MSYSTEM})
		pkg_check_modules(QT5ALL REQUIRED Qt5Widgets Qt5Gui Qt5Svg)
	endif()
endif()

set(QT_LIBRARIES Qt5::Gui Qt5::Widgets Qt5::Svg)

find_package(Qwt 6.1.2 REQUIRED)

# boost::multiprecision is required, but it's header only. So no need to specify
set(BOOSTCOMPS)
if(ENABLE_TESTS)
	list(APPEND BOOSTCOMPS unit_test_framework)
endif()
find_package(Boost 1.54 COMPONENTS ${BOOSTCOMPS} REQUIRED)

# Find the platform's thread library (needed for C++11 threads).
# This will set ${CMAKE_THREAD_LIBS_INIT} to the correct, OS-specific value.
find_package(Threads REQUIRED)

if(MINGW)
	# MXE workaround: Use PkgConfig to find the supplied Python 3.4 (see MXE build
	# script sigrok-cross-mingw-smuview in sigrok-util) and disable the find
	# python functionality in pybind11
	set(PYBIND11_NOPYTHON ON)

	# This is not needed atm, but might come in handy in the future:
	# Python 3.8 no longer links to libpython, but it provides a python3-embed.pc
	# now, so let's try using that first and only fall back on the normal case if
	# that fails.
	# See: https://docs.python.org/3.8/whatsnew/3.8.html#debug-build-uses-the-same-abi-as-release-build
	pkg_check_modules(PYTHON3 python3-embed)
	if(NOT PYTHON3_FOUND)
		pkg_check_modules(PYTHON3 python3)
	endif()
endif()

# SmuView has its own copy of pybind11
if(MINGW)
	# Use pybind11 2.9.2 with the emum_docstring patch for the MXE build. 2.9.2
	# is the last pybind11 version that supports Python 3.4.4 which is needed for
	# static linking in the MXE cross build
	set(PYBIND11_SUBDIRECTORY external/pybind11_2.9.2)
else()
	# Use pybind11 2.11 dev1 with the emum_docstring patch for all other builds
	set(PYBIND11_SUBDIRECTORY external/pybind11_2.11_dev1)
endif()
add_subdirectory(${PYBIND11_SUBDIRECTORY})
# SmuView has its own copy of QCodeEditor
add_subdirectory(external/QCodeEditor)
# SmuView has its own copy of QtFindReplaceDialog
add_subdirectory(external/QtFindReplaceDialog/dialogs)

#===============================================================================
#= System Introspection
#-------------------------------------------------------------------------------

include(memaccess)
memaccess_check_unaligned_le(HAVE_UNALIGNED_LITTLE_ENDIAN_ACCESS)


#===============================================================================
#= Config Header
#-------------------------------------------------------------------------------

set(SV_TITLE SmuView)
set(SV_VERSION_STRING "0.0.6")

# Append the revision hash unless we are exactly on a tagged release.
include(GetGitRevisionDescription)
git_describe(SV_TAG_VERSION_STRING --match "v${SV_VERSION_STRING}" --exact-match)
if(NOT SV_TAG_VERSION_STRING)
	get_git_head_revision(SV_REVSPEC SV_HASH)
	if(SV_HASH)
		string(SUBSTRING "${SV_HASH}" 0 7 SV_SHORTHASH)
		set(SV_VERSION_STRING "${SV_VERSION_STRING}-git-${SV_SHORTHASH}")
	endif()

	# Non-tagged releases use the continuous manual
	set(SV_MANUAL_VERSION "continuous")
else()
	# Tagged releases use a fixed manual version
	set(SV_MANUAL_VERSION ${SV_VERSION_STRING})
endif()

if(SV_VERSION_STRING MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-[-0-9a-z]*)?$")
	set(SV_VERSION_MAJOR ${CMAKE_MATCH_1})
	set(SV_VERSION_MINOR ${CMAKE_MATCH_2})
	set(SV_VERSION_MICRO ${CMAKE_MATCH_3})
	set(SV_VERSION_SUFFIX ${CMAKE_MATCH_4})
endif()

message(STATUS "${SV_TITLE} version: ${SV_VERSION_STRING}")

# Library versions
set(SV_GLIBMM_VERSION ${PKGDEPS_glibmm-2.4_VERSION})
get_directory_property(pybind11_VERSION DIRECTORY ${PYBIND11_SUBDIRECTORY} DEFINITION pybind11_VERSION)
get_directory_property(pybind11_VERSION_TYPE DIRECTORY ${PYBIND11_SUBDIRECTORY} DEFINITION pybind11_VERSION_TYPE)
set(SV_PYBIND11_VERSION "${pybind11_VERSION} ${pybind11_VERSION_TYPE}")
if(MINGW)
	# MXE workaround: Use PkgConfig to find Python
	set(SV_PYTHON_VERSION ${PYTHON3_VERSION})
else()
	set(SV_PYTHON_VERSION ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
endif()

configure_file (
	${PROJECT_SOURCE_DIR}/config.h.in
	${PROJECT_BINARY_DIR}/config.h
)
configure_file (
	${PROJECT_SOURCE_DIR}/contrib/config_version.sh.in
	${PROJECT_BINARY_DIR}/contrib/config_version.sh
)


#===============================================================================
#= Sources
#-------------------------------------------------------------------------------

set(smuview_SOURCES
	main.cpp
	src/application.cpp
	src/devicemanager.cpp
	src/mainwindow.cpp
	src/session.cpp
	src/settingsmanager.cpp
	src/util.cpp
	src/channels/addscchannel.cpp
	src/channels/basechannel.cpp
	src/channels/dividechannel.cpp
	src/channels/hardwarechannel.cpp
	src/channels/integratechannel.cpp
	src/channels/mathchannel.cpp
	src/channels/movingavgchannel.cpp
	src/channels/multiplysfchannel.cpp
	src/channels/multiplysschannel.cpp
	src/channels/userchannel.cpp
	src/data/analogbasesignal.cpp
	src/data/analogsamplesignal.cpp
	src/data/analogtimesignal.cpp
	src/data/basesignal.cpp
	src/data/datautil.cpp
	src/data/properties/baseproperty.cpp
	src/data/properties/boolproperty.cpp
	src/data/properties/doubleproperty.cpp
	src/data/properties/doublerangeproperty.cpp
	src/data/properties/int32property.cpp
	src/data/properties/measuredquantityproperty.cpp
	src/data/properties/rationalproperty.cpp
	src/data/properties/stringproperty.cpp
	src/data/properties/uint64property.cpp
	src/data/properties/uint64rangeproperty.cpp
	src/devices/basedevice.cpp
	src/devices/configurable.cpp
	src/devices/deviceutil.cpp
	src/devices/hardwaredevice.cpp
	src/devices/measurementdevice.cpp
	src/devices/oscilloscopedevice.cpp
	src/devices/sourcesinkdevice.cpp
	src/devices/userdevice.cpp

	src/python/bindings.cpp
	src/python/pystreambuf.cpp
	src/python/pystreamredirect.hpp
	src/python/smuscriptrunner.cpp
	src/python/uihelper.cpp
	src/python/uiproxy.cpp

	src/ui/data/quantitycombobox.cpp
	src/ui/data/quantityflagslist.cpp
	src/ui/data/unitcombobox.cpp
	src/ui/datatypes/basewidget.cpp
	src/ui/datatypes/boolbutton.cpp
	src/ui/datatypes/boolcheckbox.cpp
	src/ui/datatypes/boolled.cpp
	src/ui/datatypes/datatypehelper.cpp
	src/ui/datatypes/doublecontrol.cpp
	src/ui/datatypes/doubledisplay.cpp
	src/ui/datatypes/doubleknob.cpp
	src/ui/datatypes/doublerangecombobox.cpp
	src/ui/datatypes/doubleslider.cpp
	src/ui/datatypes/doublesmallcontrol.cpp
	src/ui/datatypes/doublespinbox.cpp
	src/ui/datatypes/int32spinbox.cpp
	src/ui/datatypes/measuredquantitycombobox.cpp
	src/ui/datatypes/rationalcombobox.cpp
	src/ui/datatypes/stringcombobox.cpp
	src/ui/datatypes/stringlabel.cpp
	src/ui/datatypes/stringled.cpp
	src/ui/datatypes/thresholdcontrol.cpp
	src/ui/datatypes/uint64combobox.cpp
	src/ui/datatypes/uint64label.cpp
	src/ui/datatypes/uint64rangecombobox.cpp
	src/ui/datatypes/uint64spinbox.cpp
	src/ui/devices/channelcombobox.cpp
	src/ui/devices/channelgroupcombobox.cpp
	src/ui/devices/configkeycombobox.cpp
	src/ui/devices/configurablecombobox.cpp
	src/ui/devices/devicecombobox.cpp
	src/ui/devices/selectconfigurableform.cpp
	src/ui/devices/selectpropertyform.cpp
	src/ui/devices/selectsignalwidget.cpp
	src/ui/devices/signalcombobox.cpp
	src/ui/devices/devicetree/devicetreemodel.cpp
	src/ui/devices/devicetree/devicetreeview.cpp
	src/ui/devices/devicetree/treeitem.cpp
	src/ui/dialogs/aboutdialog.cpp
	src/ui/dialogs/addmathchanneldialog.cpp
	src/ui/dialogs/adduserchanneldialog.cpp
	src/ui/dialogs/addviewdialog.cpp
	src/ui/dialogs/addviewdialog.cpp
	src/ui/dialogs/connectdialog.cpp
	src/ui/dialogs/generatewaveformdialog.cpp
	src/ui/dialogs/plotconfigdialog.cpp
	src/ui/dialogs/plotcurveconfigdialog.cpp
	src/ui/dialogs/plotdiffmarkerdialog.cpp
	src/ui/dialogs/selectsignaldialog.cpp
	src/ui/dialogs/selectxysignalsdialog.cpp
	src/ui/dialogs/signalsavedialog.cpp
	src/ui/tabs/basetab.cpp
	src/ui/tabs/devicetab.cpp
	src/ui/tabs/measurementtab.cpp
	src/ui/tabs/oscilloscopetab.cpp
	src/ui/tabs/smuscripttab.cpp
	src/ui/tabs/sourcesinktab.cpp
	src/ui/tabs/tabdockwidget.cpp
	src/ui/tabs/tabhelper.cpp
	src/ui/tabs/usertab.cpp
	src/ui/tabs/welcometab.cpp
	src/ui/views/baseplotview.cpp
	src/ui/views/baseview.cpp
	src/ui/views/dataview.cpp
	src/ui/views/devicesview.cpp
	src/ui/views/democontrolview.cpp
	src/ui/views/genericcontrolview.cpp
	src/ui/views/measurementcontrolview.cpp
	src/ui/views/powerpanelview.cpp
	src/ui/views/scopehorizontalcontrolview.cpp
	src/ui/views/scopetriggercontrolview.cpp
	src/ui/views/scopeverticalcontrolview.cpp
	src/ui/views/sequenceoutputview.cpp
	src/ui/views/smuscriptoutputview.cpp
	src/ui/views/smuscripttreeview.cpp
	src/ui/views/smuscriptview.cpp
	src/ui/views/sourcesinkcontrolview.cpp
	src/ui/views/timeplotview.cpp
	src/ui/views/valuepanelview.cpp
	src/ui/views/viewhelper.cpp
	src/ui/views/xyplotview.cpp
	src/ui/widgets/clickablelabel.cpp
	src/ui/widgets/colorbutton.cpp
	src/ui/widgets/monofontdisplay.cpp
	src/ui/widgets/popup.cpp
	src/ui/widgets/plot/axislocklabel.cpp
	src/ui/widgets/plot/axispopup.cpp
	src/ui/widgets/plot/basecurvedata.cpp
	src/ui/widgets/plot/curve.cpp
	src/ui/widgets/plot/plot.cpp
	src/ui/widgets/plot/plotmagnifier.cpp
	src/ui/widgets/plot/plotscalepicker.cpp
	src/ui/widgets/plot/timecurvedata.cpp
	src/ui/widgets/plot/xycurvedata.cpp
)

if(ENABLE_SIGNALS)
	list(APPEND smuview_SOURCES signalhandler.cpp)
endif()

set(smuview_RESOURCES
	smuview.qrc
)

if(WIN32)
	# Use the sigrok icon for the smuview.exe executable.
	set(CMAKE_RC_COMPILE_OBJECT "${CMAKE_RC_COMPILER} -O coff -I${CMAKE_CURRENT_SOURCE_DIR} <SOURCE> <OBJECT>")
	enable_language(RC)
	list(APPEND smuview_SOURCES smuviewico.rc)
endif()

qt5_add_resources(smuview_RESOURCES_RCC ${smuview_RESOURCES})


#===============================================================================
#= Global Definitions
#-------------------------------------------------------------------------------

add_definitions(-DQT_NO_KEYWORDS)
add_definitions(-D__STDC_LIMIT_MACROS)
add_definitions(-Wall -Wextra -Woverloaded-virtual -Wdeprecated-declarations) # -Weffc++ -Wconversion -Wsign-conversion)
add_definitions(-std=c++14)
add_definitions(-DBOOST_MATH_DISABLE_FLOAT128=1)

if(NOT DISABLE_WERROR)
	#add_definitions(-Werror -pedantic-errors)
	add_definitions(-Werror=pedantic -pedantic-errors)
endif()

if(ENABLE_SIGNALS)
	add_definitions(-DENABLE_SIGNALS)
endif()

if(MINGW)
	# MXE workaround: Prevents compile error:
	# mxe-git-x86_64/usr/lib/gcc/x86_64-w64-mingw32.static.posix/5.5.0/include/c++/cmath:1147:11: error: '::hypot' has not been declared
	#    using ::hypot;
	# Alternativ solution:
	# Add "#include <cmath>" before the pybind11 includes in bindings.cpp and smuscriptrunner.cpp
	add_compile_options(-D_hypot=hypot)
endif()

if(MINGW AND ${CMAKE_BUILD_TYPE} STREQUAL "Debug")
	# Fix error "too many sections (37653)" and "file too big" for mingw/MXE when building for Debug
	add_definitions(-Wa,-mbig-obj)
endif()

#===============================================================================
#= Global Include Directories
#-------------------------------------------------------------------------------

include_directories(
	${CMAKE_CURRENT_BINARY_DIR}
	${CMAKE_CURRENT_SOURCE_DIR}
	${QWT_INCLUDE_DIR}
	${Boost_INCLUDE_DIRS}
)

if(MINGW)
	# MXE workaround: Use PkgConfig to find Python
	include_directories(${PYTHON3_INCLUDE_DIRS})
endif()

if(STATIC_PKGDEPS_LIBS)
	include_directories(${PKGDEPS_STATIC_INCLUDE_DIRS})
else()
	include_directories(${PKGDEPS_INCLUDE_DIRS})
endif()


#===============================================================================
#= Linker Configuration
#-------------------------------------------------------------------------------

link_directories(${Boost_LIBRARY_DIRS})

set(SMUVIEW_LINK_LIBS
	${Boost_LIBRARIES}
	${QT_LIBRARIES}
	${QWT_LIBRARY}
	${CMAKE_THREAD_LIBS_INIT}
	#${LIBATOMIC_LIBRARY}
	PkgConfig::PKGDEPS
	pybind11::embed
	QCodeEditor
	QtFindReplaceDialog
)

if(MINGW)
	# MXE workaround: Use PkgConfig to find Python
	if(PYTHON3_LINK_LIBRARIES)
		# Try to use the fully qualified name for cross compiling
		list(APPEND SMUVIEW_LINK_LIBS ${PYTHON3_LINK_LIBRARIES})
	else()
		list(APPEND SMUVIEW_LINK_LIBS ${PYTHON3_LIBRARIES})
	endif()
endif()

if(WIN32)
	# On Windows we need to statically link the libqsvg imageformat
	# plugin (and the QtSvg component) for SVG graphics/icons to work.
	# We also need QWindowsIntegrationPlugin, Qt5PlatformSupport, and all
	# Qt libs and their dependencies.
	add_definitions(-DQT_STATICPLUGIN)
	list(APPEND SMUVIEW_LINK_LIBS Qt5::QSvgPlugin)
	list(APPEND SMUVIEW_LINK_LIBS Qt5::QWindowsIntegrationPlugin)

	# Form Qt 5.8 on, Qt5PlatformSupport is split into several plugins:
	# QtAccessibilitySupport QtCliboardSupport QtEventDispatcherSupport
	# QtFontDatabaseSupport QtGraphicsSupport QtThemeSupport
	# TODO: Some of the plugins are wrong?
	if(Qt5Core_VERSION VERSION_LESS "5.8.0")
		list(APPEND SMUVIEW_LINK_LIBS -lQt5PlatformSupport ${QT5ALL_LDFLAGS})
	else()
		list(APPEND SMUVIEW_LINK_LIBS -lQt5AccessibilitySupport)
		list(APPEND SMUVIEW_LINK_LIBS -lQt5EventDispatcherSupport)
		list(APPEND SMUVIEW_LINK_LIBS -lQt5FontDatabaseSupport)
		list(APPEND SMUVIEW_LINK_LIBS -lQt5ThemeSupport)
		#list(APPEND SMUVIEW_LINK_LIBS -lQt5ClipboardSupport)
		#list(APPEND SMUVIEW_LINK_LIBS -lQt5GraphicsSupport)
		list(APPEND SMUVIEW_LINK_LIBS ${QT5ALL_LDFLAGS})
	endif()
endif()

add_executable(${PROJECT_NAME} ${smuview_SOURCES} ${smuview_RESOURCES_RCC})

target_link_libraries(${PROJECT_NAME} ${SMUVIEW_LINK_LIBS})

if(WIN32 AND NOT ${CMAKE_BUILD_TYPE} STREQUAL "Debug")
	# Pass -mwindows so that no "DOS box" opens when SmuView is started.
	set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-mwindows")
endif()


#===============================================================================
#= Installation
#-------------------------------------------------------------------------------

# Install the executable.
install(TARGETS ${PROJECT_NAME} DESTINATION bin/)

# Install the manpage.
install(FILES doc/smuview.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 COMPONENT doc)

# Install the desktop file.
install(FILES contrib/org.sigrok.SmuView.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)

# Install the AppData/AppStream file.
install(FILES contrib/org.sigrok.SmuView.appdata.xml DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo)

# Install the SmuView icons.
install(FILES icons/smuview.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/48x48/apps)
install(FILES icons/smuview.svg DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps)

# Install the SmuScript examples.
install(DIRECTORY smuscript/ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/smuscript)

# Generate Windows installer script.
configure_file(contrib/smuview_cross.nsi.in ${CMAKE_CURRENT_BINARY_DIR}/contrib/smuview_cross.nsi @ONLY)


#===============================================================================
#= Documentation
#-------------------------------------------------------------------------------

add_subdirectory(manual)


#===============================================================================
#= Packaging (handled by CPack)
#-------------------------------------------------------------------------------


#===============================================================================
#= Tests
#-------------------------------------------------------------------------------

if(ENABLE_TESTS)
	add_subdirectory(test)
	enable_testing()
	add_test(test ${CMAKE_CURRENT_BINARY_DIR}/test/smuview-test)
endif()


================================================
FILE: COPYING
================================================

                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://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 <http://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
<http://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
<http://www.gnu.org/philosophy/why-not-lgpl.html>.


================================================
FILE: Doxyfile
================================================
# Doxyfile 1.8.6

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------

DOXYFILE_ENCODING      = UTF-8
PROJECT_NAME           = "SmuView"
PROJECT_NUMBER         = "unreleased development snapshot"
PROJECT_BRIEF          = "A Qt-based sigrok GUI"
PROJECT_LOGO           = icons/smuview.png
OUTPUT_DIRECTORY       = doxy
CREATE_SUBDIRS         = NO
OUTPUT_LANGUAGE        = English
BRIEF_MEMBER_DESC      = YES
REPEAT_BRIEF           = YES
ABBREVIATE_BRIEF       =
ALWAYS_DETAILED_SEC    = NO
INLINE_INHERITED_MEMB  = NO
FULL_PATH_NAMES        = YES
STRIP_FROM_PATH        =
STRIP_FROM_INC_PATH    =
SHORT_NAMES            = NO
JAVADOC_AUTOBRIEF      = NO
QT_AUTOBRIEF           = NO
MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS           = YES
SEPARATE_MEMBER_PAGES  = NO
TAB_SIZE               = 4
ALIASES                =
MARKDOWN_SUPPORT       = YES
AUTOLINK_SUPPORT       = YES
BUILTIN_STL_SUPPORT    = YES
SUBGROUPING            = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS  = YES
TYPEDEF_HIDES_STRUCT   = NO
LOOKUP_CACHE_SIZE      = 0

#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------

EXTRACT_ALL            = YES
EXTRACT_PRIVATE        = YES
EXTRACT_PACKAGE        = NO
EXTRACT_STATIC         = YES
EXTRACT_LOCAL_CLASSES  = YES
HIDE_UNDOC_MEMBERS     = NO
HIDE_UNDOC_CLASSES     = NO
HIDE_FRIEND_COMPOUNDS  = NO
HIDE_IN_BODY_DOCS      = NO
INTERNAL_DOCS          = YES
CASE_SENSE_NAMES       = YES
HIDE_SCOPE_NAMES       = NO
SHOW_INCLUDE_FILES     = YES
SHOW_GROUPED_MEMB_INC  = NO
FORCE_LOCAL_INCLUDES   = NO
INLINE_INFO            = YES
SORT_MEMBER_DOCS       = YES
SORT_BRIEF_DOCS        = NO
SORT_MEMBERS_CTORS_1ST = YES
SORT_GROUP_NAMES       = NO
SORT_BY_SCOPE_NAME     = NO
STRICT_PROTO_MATCHING  = NO
GENERATE_TODOLIST      = NO
GENERATE_TESTLIST      = YES
GENERATE_BUGLIST       = NO
GENERATE_DEPRECATEDLIST= NO
ENABLED_SECTIONS       =
MAX_INITIALIZER_LINES  = 30
SHOW_USED_FILES        = YES
SHOW_FILES             = YES
SHOW_NAMESPACES        = YES
FILE_VERSION_FILTER    =
LAYOUT_FILE            =

#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------

QUIET                  = YES
WARNINGS               = YES
WARN_IF_UNDOCUMENTED   = YES
WARN_IF_DOC_ERROR      = YES
WARN_NO_PARAMDOC       = NO
WARN_FORMAT            = "$file:$line: $text"
WARN_LOGFILE           =

#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------

INPUT                  = .
INPUT_ENCODING         = UTF-8
FILE_PATTERNS          =
RECURSIVE              = YES
EXCLUDE                =
EXCLUDE_SYMLINKS       = NO
EXCLUDE_PATTERNS       = moc_*.c* */external/*
EXCLUDE_SYMBOLS        =
EXAMPLE_PATH           =
EXAMPLE_PATTERNS       =
EXAMPLE_RECURSIVE      = NO
IMAGE_PATH             =
INPUT_FILTER           =
FILTER_PATTERNS        =
FILTER_SOURCE_FILES    = NO
FILTER_SOURCE_PATTERNS =
USE_MDFILE_AS_MAINPAGE =

#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------

SOURCE_BROWSER         = YES
INLINE_SOURCES         = NO
STRIP_CODE_COMMENTS    = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION    = NO
REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS        = YES
USE_HTAGS              = NO
VERBATIM_HEADERS       = YES

#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------

ALPHABETICAL_INDEX     = YES
COLS_IN_ALPHA_INDEX    = 5
IGNORE_PREFIX          =

#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------

GENERATE_HTML          = YES
HTML_OUTPUT            = html-api
HTML_FILE_EXTENSION    = .html
HTML_HEADER            =
HTML_FOOTER            =
HTML_STYLESHEET        =
HTML_EXTRA_STYLESHEET  =
HTML_EXTRA_FILES       =
HTML_COLORSTYLE_HUE    = 220
HTML_COLORSTYLE_SAT    = 100
HTML_COLORSTYLE_GAMMA  = 80
HTML_TIMESTAMP         = YES
HTML_DYNAMIC_SECTIONS  = NO
HTML_INDEX_NUM_ENTRIES = 100
DISABLE_INDEX          = NO
GENERATE_TREEVIEW      = YES
ENUM_VALUES_PER_LINE   = 4
TREEVIEW_WIDTH         = 250
EXT_LINKS_IN_WINDOW    = NO
FORMULA_FONTSIZE       = 10
FORMULA_TRANSPARENT    = YES
SEARCHENGINE           = YES
SERVER_BASED_SEARCH    = NO
EXTERNAL_SEARCH        = NO
SEARCHENGINE_URL       =
SEARCHDATA_FILE        = searchdata.xml
EXTERNAL_SEARCH_ID     =
EXTRA_SEARCH_MAPPINGS  =

#---------------------------------------------------------------------------
# Configuration options related to the Latex output
#---------------------------------------------------------------------------

GENERATE_LATEX         = NO

#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------

ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = NO
EXPAND_ONLY_PREDEF     = NO
SEARCH_INCLUDES        = YES
INCLUDE_PATH           =
INCLUDE_FILE_PATTERNS  =
PREDEFINED             =
EXPAND_AS_DEFINED      =
SKIP_FUNCTION_MACROS   = YES

#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------

TAGFILES               =
GENERATE_TAGFILE       =
ALLEXTERNALS           = NO
EXTERNAL_GROUPS        = YES
EXTERNAL_PAGES         = YES
PERL_PATH              = /usr/bin/perl

#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------

CLASS_DIAGRAMS         = YES
MSCGEN_PATH            =
DIA_PATH               =
HIDE_UNDOC_RELATIONS   = NO
HAVE_DOT               = YES
DOT_NUM_THREADS        = 0
DOT_FONTNAME           = Helvetica
DOT_FONTSIZE           = 10
DOT_FONTPATH           =
CLASS_GRAPH            = YES
COLLABORATION_GRAPH    = YES
GROUP_GRAPHS           = YES
UML_LOOK               = YES
UML_LIMIT_NUM_FIELDS   = 10
TEMPLATE_RELATIONS     = NO
INCLUDE_GRAPH          = YES
INCLUDED_BY_GRAPH      = YES
CALL_GRAPH             = YES
CALLER_GRAPH           = YES
GRAPHICAL_HIERARCHY    = YES
DIRECTORY_GRAPH        = YES
DOT_IMAGE_FORMAT       = svg
INTERACTIVE_SVG        = YES
DOT_PATH               =
DOTFILE_DIRS           =
MSCFILE_DIRS           =
DIAFILE_DIRS           =
DOT_GRAPH_MAX_NODES    = 50
MAX_DOT_GRAPH_DEPTH    = 0
DOT_TRANSPARENT        = YES
DOT_MULTI_TARGETS      = YES
GENERATE_LEGEND        = YES
DOT_CLEANUP            = YES


================================================
FILE: INSTALL
================================================
-------------------------------------------------------------------------------
INSTALL
-------------------------------------------------------------------------------

Requirements
------------

 - git (only needed when building from git)
 - A C++ compiler with C++11 support (-std=c++11 option), e.g.
   - g++ (>= 4.8.1)
   - clang++ (>= 3.3)
 - make
 - libtool (only needed when building from git)
 - pkg-config (>= 0.22)
 - cmake (>= 2.8.12)
 - libglib (>= 2.28.0)
 - glibmm-2.4 (>= 2.28.0)
 - Qt5 >= 5.7 (including the following components):
    - Qt5Core, Qt5Gui, Qt5Widgets, Qt5Svg
 - Boost (>= 1.55)
 - Qwt (>= 6.1.2)
 - Python (>= 3)
 - libsigrokcxx (>= 0.5.2) (libsigrok C++ bindings)
 - Asciidoctor (optional, only needed to build the manual)

Building and installing
-----------------------

In order to get the SmuView source code and build it, run:

 $ git clone https://github.com/knarfS/smuview.git
 $ cd smuview
 $ mkdir build
 $ cd build
 $ cmake ../
 $ make

For installing SmuView:

 $ sudo make install


Creating a source distribution package
--------------------------------------

In order to build a source package begin with an unconfigured source tree.

 $ cd smuview
 $ mkdir dist
 $ cd dist
 $ cmake ../
 $ make package_source



================================================
FILE: NEWS
================================================
0.0.5 (2021-01-09)
------------------

For a detailed list of changes, please see the git commit history.

 * Save and restore settings:
   - Save/restore the size and position of the main window.
   - Save/restore the shown views and their size/position for a specific device.
   - Add a tab for curve color settings in the plot config dialog.
   - Add -c cmd line parameter for don't restoring the settings.
   - Save/restore the settings of the find and replace dialog.
   - Save/restore last directory of the SmuScript tree.
   - Save/restore the settings of the save signals dialog.
 * Enhance the Python API:
   - Message Boxes and input dialoges for various data types.
   - Return the view id when adding a new view.
   - Improve bindings for time and x/y plots.
   - Add function to set/change a curve color.
   - Add function to set a custom signal name.
   - Add function to set a custom plot curve name.
   - Add functions for getting the available config keys.
 * More verbose device info in the about dialog.
 * Plot view:
   - Make curve name editable and curve removable.
   - Fix the axis lock labels.
 * Many improvements for the python editor.
 * Add a find and replace dialog for the python editor.
 * Add a time window option to combine analog values when saving signals (Thanks to Cymaphore).
 * Support for the new "force_detect" connection parameter of libsigrok.
 * Update libsigrok for new devices and bugfixes.
 * Update manual for SmuView.
 * Many more bug fixes and improvements.

0.0.4 (2020-02-18)
------------------

For a detailed list of changes, please see the git commit history.

 * Embed a Python interpreter to automate measurements and device control.
 * Add an editor to create and modify Python scripts.
 * Add a command line parameter to load and execute Python scripts.
 * Countless layout and GUI improvements, for example:
   - Improve device control views.
   - Replace the knob in the control views with a slider widget.
   - Don't freeze the connection dialog when loading bluetooth LE devices.
   - Ability to add a single signal to a XY-plot.
   - Improve changing plot modes.
   - Make the plot markers box position configurable.
   - Nicer looking plot markers and better initial plot marker position.
   - Support multiple signals per data table view.
   - Add plot curve colors for various quantities and use random color for unknown quantities.
   - Use embedded mono space font for the value displays.
   - Stack views to save space.
   - Settings for line and symbol style in the plot config dialog.
   - Don't mess up the plot axis, when the signal value overflows.
   - Add function to save plots as image.
 * Add class AnalogSampleSignal to store sample via Python.
 * Add a view to apply sequences to (device) controls like the output voltage.
 * Create a manual for SmuView.
 * Many bug fixes.

0.0.3 (2019-04-04)
------------------

For a detailed list of changes, please see the git commit history.

 * Various layout improvements
 * Revert "feature" that only one signal can be added to fixed channels
 * Plot view:
   - Improve axis locking
   - Improve axis scale updates
   - Add the same signal only once
 * Commit spin box values only when enter is pressed or widget is leaved
 * Use a monospace font instead of the LCD font for various views
 * Add ConfigKey OFFSET

0.0.2 (2019-03-21)
------------------

For a detailed list of changes, please see the git commit history.

 * Add manpage
 * Add Fedora support (Thanks to gvegidy)
 * Plot view:
   - Curve colors
   - Better legend titles
   - Add AC/DC to curve unit names (axis labels)
   - Use one axis for data with the same quantity / quantity flags
   - Fix non working mouse wheel over axis
 * Use linear interpolation to combine signals with different time intervals:
   - Used in math channles
   - Used in x/y-plot view
 * Use session start timestamp as start timestamp for channels and signals
 * Fix bug when listing ConfigKey SAMPLERATE
 * Fix bugs in ui datatype widgets
 * Add GenericControlView
 * Add support for the demo device
 * Initially populate serial connections in the connection dialog
 * Add "addition with constant" math channel
 * Add "moving average" math channel
 * New device tree
 * Move "add device" and "add user device" to new device tree
 * Add start/stop aquisition to device tab
 * Add disconnect device in device tree
 * Add clear signal to device tree
 * Add configurabel and config keys to device tree
 * Add support for interleaved samples (demo device and oscilloscopes)
 * Auto resize (device) combo boxes

0.0.1 (2019-01-21)
------------------

 * Initial release.


================================================
FILE: README
================================================
-------------------------------------------------------------------------------
README
-------------------------------------------------------------------------------

The sigrok project aims at creating a portable, cross-platform,
Free/Libre/Open-Source signal analysis software suite that supports various
device types (such as logic analyzers, oscilloscopes, multimeters, and more).

SmuView is a Qt-based source measurement unit GUI for sigrok.


Status
------

SmuView is in a development state.


Copyright and license
---------------------

SmuView is licensed under the terms of the GNU General Public License
(GPL), version 3 or later.

While some individual source code files are licensed under the GPLv2+, and
some files are licensed under the GPLv3+, this doesn't change the fact that
the program as a whole is licensed under the terms of the GPLv3+ (e.g. also
due to the fact that it links against GPLv3+ libraries).

Please see the individual source files for the full list of copyright holders.


Copyright notices
-----------------

A copyright notice indicating a range of years, must be interpreted as having
had copyrightable material added in each of those years.

Example:

 Copyright (C) 2010-2013 Contributor Name

is to be interpreted as

 Copyright (C) 2010,2011,2012,2013 Contributor Name


Icons authors and licenses
--------------------------

icons/information.svg: Bobarino
  https://en.wikipedia.org/wiki/File:Information.svg

All other icons:
  Oxygen Icon Theme, GNU LGPLv3


Fonts licenses
--------------

DejaVue Sana Mono:
  Bitstream Vera Fonts Copyright and Arev Fonts Copyright


Mailing list
------------

 https://lists.sourceforge.net/lists/listinfo/sigrok-devel


IRC
---

You can find the sigrok developers in the #sigrok IRC channel on Libera.Chat.


Website
-------

 https://github.com/knarfS/smuview



================================================
FILE: TODO
================================================
SmuView
=======

ToDo clang-tidy
---------------

- Unify readability-implicit-bool-conversion (AllowPointerConditions) -> " == nullptr" and " != nullptr"
- readability-redundant-member-init.IgnoreBaseInCopyConstructors = 1 not always working!
- src/ui/datatypes/doubledisplay.hpp 	void setup_ui(); // TODO: widgets::MonoFontDisplay also has setup_ui()
- src/ui/datatypes/basewidget.hpp Q_SLOTS redesign?
- src/ui/datatypes/doubledisplay.hpp: setup_ui() override, b/c of widgets::MonoFontDisplay.
- bugprone-narrowing-conversions: Maybe use boost convert_to<>() -> see util.cpp, format_time_minutes()

ToDo Release
------------

- Python binding for save CSV

ToDo clazy
----------

- Disabled due to false positives:
	- connect-non-signal
	- incorrect-emit


ToDo Scope
----------

- Fix ConfigKey sample_rate in UInt64Property::change_value(const QVariant qvar)

ToDo
----

- Use util::Timestamp?
- last_value_, min_value_, max_value_ -> std::atomic!
- Plot: Sampling
- Mutex for aquisition_state_?
- Save all data (gnuplot, octave, ...)
	- add a saveutil.cpp
- Configurable:
	- default check for getable/setable in get/set functions without assert(false)?
	- add button to sink/source/demodmm/measurement-ControlViews to control non default config keys.
	- Check getable/setable/listable also in the properties
	- Enhance ThresholdControl widget (e.g for re:load pro). Maybe a dedicated property?
		- Dedicated SvDoubleSpinBox and SvBoolButton?
- Breeze icons action/labplot-* for plots?
- Get fixed quantity signals from channel(/channel group) (q/qf/u is set in ch.meaning at the beginning). Implement in sigrok!
- Implement something like ch.meanings for config keys in sigrok, so smuview known the quantity/unit of config keys.
- Start timestamp on_update() -> device ctor -> timestamp = .0
- Start timestamp to session
- Use new connect/disconnet variant whenever possible.
- Use connect(obj, SIGNAL, SIGNAL) when possible (UIProxy/UIHelper)
- Lookup: std::atomic, std::condition_variable, std::mutex
- Remove "const Session &session" form ui::devices::* ctors and more??
- Maybe: In all ctors "Session &session" -> "const Session &session"
- Resize the DockWidgets/Views to their best sizes (value panels minimum, plot views max, ...). Maybe with QMainWindow->resizeDocks, SizePolicy in QDockWidget does not work....
- boost::stacktrace, see pv
- BaseDevice open()/close(): move aquisition stuff to HardwareDevice, move VirtualDevice stuff to BaseDevice
- util.cpp: use cmath instead of math.h, but Timestamp is boost and only works with non std::?
- Use AnalogBaseSignal in all(?) Channel classes, in View classes and in Plot classes
- Remove Configurable and ConfigKey from data::properties::*
- Session: shared_ptr or reference?
- Missing msvcr100.dll (Windows Server 2016) SmuView/PulseView
- DeviceTree: Button for expand/close all
- Plot: Add gradient (dY/dX) to diff marker in plot marker box
- Plot: Movable polt marker box. Maybe not possible b/c of missing stuff in qwt?
- Plot: Highlight polt marker and plot marker box when mouse over (near by for marker)
- Plot: Class for marker -> qwt curve tracker playground
- SequenceView: Handle headers (order of columns, time abs/rel) in CSV
- SequenceView: Handle units (ms, s, h, ...) in CSV
- PlotView: Make resolution and dpi configurable when saving as image
- Implement AnalogXYDataSignal (for python automatisation)? See scope support?
- MonoFontDisplay/PowerPanelView: To small for neg. values (esp. W/Ah/Wh with 6632B). B/c of the decimal point?
- Remove LCDDisplay?
- Reduce/Simplyfy BaseDevice name methods
- Bindings: Implement add_math_channel()
- Can we inherit MathChannel from UserChannel?
- Unify name of static (const) variables
- Remove devicetab.hpp time_unit_
- Cycle: replace BaseChannel::parent_device_ with device_id_, and so on....
- main.cpp: Remove while loop.
- AnalogTimeSignal: Move signal_start_timestamp_ to BaseSignal
- *Signal: Clean up Signal classes
- Add a way to change a channel/signal name in the GUI. Connect BaseSignal::name_changed() signal.
- Add a way to change the plot curves that have a default color to the new default color configured in the PlotConfigDialog. E.g. with a singleton to connect a dialog to multiple curves from different plots.
- Use singleton for SettingsManager instead of static methods?
- Use deleteLater() instead of delete
- Add AddPlotCurveDialog with channel and signals.
- Manage axes in plot.cpp: Per Quantity and not per curve! Test: Remove all curves and add a new one....
- UiHelper/UiProxy: Remove tab_id?
- SettingsManager: Method for getting the QSettings object and maybe load an user defined QSettings-file.
- example_multiplexer.py: Checkboxes in control views don't change.
- Keyboard shortcuts (Ctrl-Q -> Close App, Ctrl-W -> Close tab)

Done
----

- Check in connect.cpp if GPIB is part of build info (libsigrok -> backend.c)
- Everey device must have its own session:
	1. Performance: With one sessions the aquisition functions are processed in sequence.
		The HP 3478A f.e. takes for ever, and so the other devices to. There are NO parallel
		requests.
	2. Adding new device to a running session: Chicken/Egg problem! Dev->open() tries to
		start aquisition, but device is not added to session yet (cxx binding).
		session->add_device() tries to start aquisition, but device is not opened yet...
	3. Solves the sr_session_source_add_internal() dublicate key problem.
	4. Propably use the multidevice API functions from linux gpib in scpi_libgpib.c

- Better detection of common_time_data_ (when in frame). Who is this possible when in
	init_signal() and not afterwards when in feed_in()
- QIcon (On/Off/Dis) -> Led: State(On/Off), Mode(En/Dis)
- ValueControl implement is_value_setable_/is_value_getable_ and disable/enable controls
- Save signals as CSV
- Math channels (for Power, resistance, Wh, Ah)
- Correlation between time bases (common, same count+fixed diff, "random") in (Analog)Data
- Configurable:
	- list_config
	- default check for listable in list function without assert(false)
	- Remove unused specific functions
	- min/max/step in views when not listable
	- Add functions for datatypes -> determin what list_* function to use
	- make the sink/source/demodmm/measurement-ControlViews more generic
	- signals for controls (views) to work with processing
	- Cache stuff
	- Missing sigok::ConfigKey::OFFSET
	- get_mq / set_mq problem with template?
	- Move is_controllable() to tab/view? Make more generic... -> Generic is_controllable() function, and specialized function in viewhelper.cpp
- namespace src/data/datautil.hpp
- Refactor ui class members CamelCase -> _ _ _
- Replace all "    Q_OBJECT" with "	Q_OBJECT" (4 spaces -> 1 tab)
- Replace other "    " -> "	" (4 spaces -> 1 tab)
- Autoscale plot. Plot doesn't always auto-update scale (rlp without load)
- Remove "hp3478a" from gpib_libgpib_name_ and list all available names.
- DataView: Add toolbar with "StayAtBottom" switchable action.
- Remove all items in combo box when parent has changed and setup_ui() is recalled?	see ConfigKeyComboBox and ConfigurableComboBox
- Refactore:
	- src/data/datautil.cpp -> src/data/
	- src/devices/deviceutil.cpp -> src/data/
	- src/devices/properties/ -> src/data/
- DataView: add signal (into this table) action
- static unsigned int device_counter; is changing
- License headers are not the same
- Session: move init to main.cpp
- Bindings: Binding for setting the color of a plot curve
- Bindings: Set name for new signal? e.g. f(x, y, name=nullptr)
- Add "E" for detecting energy (Wh) channels
- ValueDisplay SLOTS: CallByRef &?
- Connection dialog thread
- BaseChannel::add_signal(), L. 156, Korad PSU TODO
- Save session
- Segfault when closing/disconnet devices via UI/DevicesView

Won't fix
---------

- QWT Multiaxis
- Refactore:
	- src/data -> src/signals
- src/data/properties/* on_value_changed(gvar) -> on_value_changed(const gvar)
- *.hpp: virtual f_name() = 0; -> virtual f_name() = nullptr;



libsigrok
=========

- Add GPIB address to libgpib:conn as paramenter
- Re:load Pro: when acquisition is running and we send a command (e.g. "set xxx"), there are 2 listeners (1st send_cmd() (<-serial_write_blocking) and 2nd handle_new_data() (<-serial_read_nonblocking))
	- Make devc->acquisition_running thread safe, bool is NOT thread safe!
- Re:load Pro: when 2 responses are send fast afer each other, serial_read_nonblocking reads them both and the \r\n gets in beetween
- Re:load Pro: sometimes only a ^M is send from the rlp
- Re:load Pro: Sometimes the responses are mixed up (2 listeners??, Re:load Pro not keeping up??)
- Re:load Pro: how to clear otp_active and uvc_active?
- hp3478a: device isn't closed after stopping acquisition
- scpi-pps: protocol.c -> scpi_pps_receive_data() uses double, but output (e.g. analog) and DF_ANALOG receivers use hardcoded float. Using sr_analog_encoding.unitsize and .is_float to define the datatype (and size) (.unitsize = sizeof(double) (or by lurchi_: .unitsize=8 + float is double)) in the receiver functions!
- dev_acquisition_start() has to do first measurement (3478a, scpi-pps, reload(?)), because 1. DF_HEADER, 2. trigger measurement
	- If not: 3378a use scpi_cmd_resp() for use of mutex (wrt+read);
- Can't add 2x scpi_libgpib devices: scpi_libgpib.c -> scpi_gpib_source_add() calls session.c -> sr_session_source_add() with fd = -1. This calls session.c -> sr_session_fd_source_add() with key = GINT_TO_POINTER(fd) and finally throws an error in session.c -> sr_session_source_add_internal() because "Event source with key %p already exists."
- scpi-pps: when in acquisition send one write ":MEAS:VOLT?;:MEAS:CURR?" instead of 2 writes when possible
- Add channel.meaning.mq, channel.meaning.mqflags, channel.meaning.unit (+channel.fixed) to PPU and load channels, to make it easy to init signals in smuview
- Add missing units: sigrok::Unit::DECIBEL
- scpi-pps/hp66xxx: Return always TRUE for OVP_ENABLED
- hp3478a: spec_digits and enc_digits are used in the wrong way!
- Fix UserDevice::open() and ::close() -> virtual in BaseDevice and empty in UserDevice

WIP
---

- Change key naming (see load + psu wiki pages)

Done
----

- Re:load Pro: send "monitor 0" when device is scaned to stop eventually running monitoring and version can be read properly
- Re:load Pro: send "monitor 0" when device is closed
- Wrong string to float/double conversion (because of locale settings):
	- dmm/m2110.c: 2x sscanf((const char *)buf, "%f", &val) == 1 -> sr_atof_ascii((const char *)buf, &val) == SR_OK
	- motech-lps-30x/protocol.c: sr_atod(devc->buf, &dbl)
	- dmm/metex14.c: sscanf((const char *)&valstr, "%f", result) -> sr_atof_ascii((const char *)&valstr, result)
	- scpi/scpi.c: sr_atod(response, scpi_response) -> sr_atod_ascii(response, scpi_response)
- hp3478a: acquisition doesn't stop (sigrok-cli/smuview must be killed)
- Tests for convertion (st_ascii_tod) for locale "bugs"
- use mutex around ibwrt() and ibrd() (scpi_libgpib.c) per device, so they are thread safe
- use mutex around scpi_cmd_resp() and scpi_cmd() (helpers.c), so when a request has a response, they are thread safe.
- Mutex of scpi/helpers.c:
	- find all ocurrence of (sr_scpi_send_variadic(), sr_scpi_send(), scpi_cmd(), scpi_cmd_resp(), rigol_ds_config_set(), ....) and check if thread safe
	- Any functions missing, that need the mutex
	- Valid for SCPI over something something?
- Mutex of scpi_libgpib: Add to other transport variants (serial, tcp, ...), if so is the mutex in scpi/helpers.c enough?
- scpi-pps: add otp/ovp/ocp to pps_profiles[] (or to channel(group)) for HP 663xx
- HP3478A: Implement SPoll,
- Add missing confg key sigok::ConfigKey::OFFSET
- Provied SR_DF_META packets for the Re:load Pro and the HP3478A for changed values/states (e.g. output switched on/off, ovp, otp, ...)
- Add mqflags (AC/DC) to channel_group_spec for scpi-pps
- scpi-pps/hp66xxB: Don't send SCPI_CMD_REMOTE and SCPI_CMD_LOCAL when GPIB is used. Will result in error 602.
- scpi-pps/hp66xxx: Check if SPoll is faster than sending *STB? / FAULT?, if so implement and use SPoll (or SRQ) when using GPIB.
- scpi-pps's have channel groups but options/keys/_lists_ (voltage_target, ...) apply to device
- Add missing units: sigrok::Unit::JOULE, sigrok::Unit::AMPEREHOUR, sigrok::Unit::COULOMB
- HP-3478A: R4W -> R2W not working

Won't fix
---------

- Re:load Pro: Don't use "monitor 200", Instead "read" values every aquisition cycle with serial "read line blocking" and use a mutex around every read, write and write+read
- Add missing units: sigrok::Unit::(HECTO)PASCAL



Doku
====

- Link API to the psu and load wiki pages



Re:load Pro Firmware
====================

- Add "output" command (returns "on" / "off") to determin in wich state the output is (git commit 448cf71, 558bc0e (part))
- Send "on" / "off" when output state was changed at the device directly
- Send "uvlo xxx" when undervoltage threshold was changed at the device directly (git commit 224ab62)


================================================
FILE: appimagecraft.yml
================================================
version: 1

project:
  name: com.github.knarfs.smuview
  #version_command: git describe --tags

build:
  cmake:
    extra_variables:
      # Taken from some other script
      - DISABLE_WERROR=y
      - ENABLE_TESTS=n
      - CMAKE_EXPORT_COMPILE_COMMANDS=y
      - PYBIND11_FINDPYTHON=ON
    raw_environment:
      # We have to pre-build some dependencies, and also want to ship our own custom Python environment
      # the CMake build system has been instructed to load the dependencies via pkg-config
      - PKG_CONFIG_PATH="$BUILD_DIR"/deps/lib/pkgconfig:"$BUILD_DIR"/AppDir/usr/conda/lib/pkgconfig:"$PKG_CONFIG_PATH"
      # Also we want to use a newer CMake version
      - PATH="$BUILD_DIR"/deps/bin:"$PATH"
    script:
      - |2
        . AppDir/usr/conda/bin/activate
        echo "PKG_CONFIG_PATH (cmake): $PKG_CONFIG_PATH"

scripts:
  pre_build:
    - pushd "$BUILD_DIR"
    - |2
      # We need the Python environment before the build already, therefore we have to run the conda
      # plugin manually before the build
      #wget https://github.com/linuxdeploy/linuxdeploy-plugin-conda/raw/master/linuxdeploy-plugin-conda.sh
      wget https://github.com/knarfS/linuxdeploy-plugin-conda/raw/master/linuxdeploy-plugin-conda.sh
      # Skip the built-in cleanup as the build needs the development files (headers, libs, ...)
      export CONDA_SKIP_CLEANUP=1
      export CONDA_SKIP_ADJUST_PATHS=1
      chmod +x linuxdeploy-plugin-conda.sh
      ./linuxdeploy-plugin-conda.sh --appdir AppDir
      . AppDir/usr/conda/bin/activate
    - popd
    - |2
      # Build libserialport and libsigrok
      for i in libserialport libsigrok; do
          git clone --depth=1 git://sigrok.org/"$i"
          pushd "$i"
          ./autogen.sh
          # Once libserialport is built, libsigrok can be linked against it
          export PKG_CONFIG_PATH="$BUILD_DIR"/deps/lib/pkgconfig:"$PKG_CONFIG_PATH"
          echo "PKG_CONFIG_PATH (pre_build): $PKG_CONFIG_PATH"
          ./configure --prefix="$BUILD_DIR"/deps
          make -j$(nprocs)
          make install
          popd
      done

  post_build:
    - |2
      # Cleanup conda
      export CONDA_SKIP_INSTALL=1
      export CONDA_SKIP_ADJUST_PATHS=0
      ./linuxdeploy-plugin-conda.sh --appdir AppDir
    - |2
      # Generate AppRun.sh scrip
      cat > "$BUILD_DIR"/AppRun.sh <<\EOF
      #! /bin/bash

      # Load miniconda environment
      . "$APPDIR"/usr/conda/etc/profile.d/conda.sh
      conda activate

      # Run SmuView
      exec "$APPDIR"/usr/bin/smuview "$@"
      EOF
    - chmod +x "$BUILD_DIR"/AppRun.sh
    - |2
      # Set VERSION from CMake generated shell script
      source cmake-build/contrib/config_version.sh
      export VERSION=${SV_VERSION_STRING}

appimage:
  linuxdeploy:
    plugins:
      - qt
    extra_args: --custom-apprun "$BUILD_DIR"/AppRun.sh
    raw_environment:
      - LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$BUILD_DIR"/deps/lib:"$BUILD_DIR"/AppDir/usr/conda/lib


================================================
FILE: config.h.in
================================================
/*
 * This file is part of the SmuView project.
 *
 * Copyright (C) 2012 Alexandru Gagniuc <mr.nuke.me@gmail.com>
 * Copyright (C) 2017-2021 Frank Stettner <frank-stettner@gmx.net>
 *
 * 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 <http://www.gnu.org/licenses/>.
 */

#ifndef CONFIG_H
#define CONFIG_H

/* Application details */
#define SV_TITLE "@SV_TITLE@"
#define SV_BIN_NAME "@PROJECT_NAME@"

/* SmuView version information */
#define SV_VERSION_MAJOR @SV_VERSION_MAJOR@
#define SV_VERSION_MINOR @SV_VERSION_MINOR@
#define SV_VERSION_MICRO @SV_VERSION_MICRO@
#define SV_VERSION_SUFFIX "@SV_VERSION_SUFFIX@"
#define SV_VERSION_STRING "@SV_VERSION_STRING@"
#define SV_MANUAL_VERSION "@SV_MANUAL_VERSION@"

/* Platform properties */
#cmakedefine HAVE_UNALIGNED_LITTLE_ENDIAN_ACCESS

#define SV_GLIBMM_VERSION "@SV_GLIBMM_VERSION@"
#define SV_PYBIND11_VERSION "@SV_PYBIND11_VERSION@"
#define SV_PYTHON_VERSION "@SV_PYTHON_VERSION@"

#endif // CONFIG_H


================================================
FILE: contrib/config_version.sh.in
================================================
#!/bin/sh
##
## This file is part of the SmuView project.
##
## Copyright (C) 2021 Frank Stettner <frank-stettner@gmx.net>
##
## 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 2 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 <http://www.gnu.org/licenses/>.
##

# Application details
export SV_TITLE="@SV_TITLE@"
export SV_BIN_NAME="@PROJECT_NAME@"

# SmuView version information
export SV_VERSION_MAJOR=@SV_VERSION_MAJOR@
export SV_VERSION_MINOR=@SV_VERSION_MINOR@
export SV_VERSION_MICRO=@SV_VERSION_MICRO@
export SV_VERSION_SUFFIX="@SV_VERSION_SUFFIX@"
export SV_VERSION_STRING="@SV_VERSION_STRING@"
export SV_MANUAL_VERSION="@SV_MANUAL_VERSION@"

# Platform properties
export SV_GLIBMM_VERSION="@SV_GLIBMM_VERSION@"
export SV_PYBIND11_VERSION="@SV_PYBIND11_VERSION@"
export SV_PYTHON_VERSION="@SV_PYTHON_VERSION@"


================================================
FILE: contrib/org.sigrok.SmuView.appdata.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!-- Creative Commons CC0 1.0 Universal (CC0-1.0, Public Domain Dedication). -->
<component type="desktop">
  <id>org.sigrok.SmuView.desktop</id>
  <metadata_license>CC0-1.0</metadata_license>
  <project_license>GPL-3.0+</project_license>
  <name>SmuView</name>
  <summary>Power supplies, electronic loads, multimeters and more</summary>
  <description>
    <p>SmuView is a Qt based source measure unit GUI for sigrok.</p>
    <p>Features:</p>
    <ul>
      <li>Remote control devices</li>
	  <li>Data acquisition</li>
      <li>Multiple devices at the same time</li>
      <li>Math channels</li>
      <li>Data export as CSV</li>
    </ul>
  </description>
  <url type="homepage">https://sigrok.org/wiki/SmuView</url>
  <url type="bugtracker">https://github.com/knarfS/smuview/issues</url>
  <url type="faq">https://sigrok.org/wiki/FAQ</url>
  <screenshots>
    <screenshot type="default">
      <image>https://sigrok.org/wimg/8/88/Sv_with_psu.png</image>
    </screenshot>
  </screenshots>
  <provides>
    <binary>smuview</binary>
  </provides>
  <launchable type="desktop-id">org.sigrok.SmuView.desktop</launchable>
  <content_rating type="oars-1.0" />
</component>


================================================
FILE: contrib/org.sigrok.SmuView.desktop
================================================
[Desktop Entry]
# Creative Commons CC0 1.0 Universal (CC0-1.0, Public Domain Dedication).
Name=SmuView
GenericName=A sigrok GUI for power supplies, loads and measurement devices
Categories=Development;Electronics;
Comment=SmuView is a Qt based source measure unit GUI for sigrok.
Exec=smuview
Icon=smuview
Type=Application


================================================
FILE: contrib/smuview.spec
================================================
# .SPEC-file to package RPMs for Fedora

# download and build like this
# (you need an rpmbuild dir, can be created with rpmdev-setuptree)
#
# cp smuview.spec $HOME/rpmbuild/SPECS
# cd $HOME/rpmbuild
# spectool -g -R SPECS/smuview.spec
# rpmbuild -ba SPECS/smuview.spec

Summary: SmuView is a Qt based source measure unit GUI for sigrok.
Name: smuview
Version: 0.0.1
Release: 1%{?dist}
License: GPLv3
URL: https://github.com/knarfS/smuview
Source: https://github.com/knarfS/%{name}/archive/%{name}-%{version}.tar.gz
BuildRequires: libsigrok-cxx-devel
BuildRequires: qwt-qt5-devel
BuildRequires: qt5-devel
BuildRequires: qt5-qtsvg-devel
BuildRequires: qt5-qtbase-devel
BuildRequires: glibmm24-devel
BuildRequires: boost-devel
BuildRequires: rubygem-asciidoctor

%description
The sigrok project aims at creating a portable, cross-platform,
Free/Libre/Open-Source signal analysis software suite that supports various
device types (such as logic analyzers, oscilloscopes, multimeters, and more).

SmuView is a Qt-based source measurement unit GUI for sigrok.

%prep
%autosetup -n %{name}-%{name}-%{version}

%build
%cmake .
%make_build
make manual-html

%install
%make_install

%files
%{!?_licensedir:%global license %%doc}
%license COPYING
%doc README INSTALL stuff
%{_docdir}/%{name}/images/sv_with_load.png
%{_docdir}/%{name}/manual.html
%{_bindir}/smuview
%{_mandir}/man1/%{name}.*
%{_datadir}/applications/org.sigrok.SmuView.desktop
%{_datadir}/metainfo/org.sigrok.SmuView.appdata.xml
%{_datadir}/icons/hicolor/48x48/apps/smuview.png
%{_datadir}/icons/hicolor/scalable/apps/smuview.svg


================================================
FILE: contrib/smuview_cross.nsi.in
================================================
##
## This file is part of the SmuView project.
##
## Copyright (C) 2013-2014 Uwe Hermann <uwe@hermann-uwe.de>
## Copyright (C) 2019-2021 Frank Stettner <frank-stettner@gmx.net>
##
## 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 <http://www.gnu.org/licenses/>.
##

#
# This file is used to create the Smuiew Windows installer via NSIS.
# It is meant for use in a cross-compile setup (not for native builds).
# See the 'sigrok-cross-mingw-smuview' script in the sigrok-util repo for details.
#
# NSIS documentation:
# http://nsis.sourceforge.net/Docs/
# http://nsis.sourceforge.net/Docs/Modern%20UI%202/Readme.html
#

# Include the "Modern UI" header, which gives us the usual Windows look-n-feel.
!include "MUI2.nsh"


# --- Global stuff ------------------------------------------------------------

# Installer/product name.
Name "SmuView"

# Filename of the installer executable.
!if "$%TARGET%" != ""
    !define TARGET "-$%TARGET%"
!else
    !define TARGET ""
!endif
OutFile "SmuView-@SV_VERSION_STRING@${TARGET}-installer.exe"

# Where to install the application.
!ifdef PE64
	InstallDir "$PROGRAMFILES64\sigrok\SmuView"
!else
	InstallDir "$PROGRAMFILES\sigrok\SmuView"
!endif

# Request admin privileges for Windows Vista and Windows 7.
# http://nsis.sourceforge.net/Docs/Chapter4.html
RequestExecutionLevel admin

# Local helper definitions.
!define REGSTR "Software\Microsoft\Windows\CurrentVersion\Uninstall\SmuView"


# --- MUI interface configuration ---------------------------------------------

# Use the following icon for the installer EXE file.
!define MUI_ICON "@PROJECT_SOURCE_DIR@/icons/smuview.ico"

# Show a nice image at the top of each installer page.
!define MUI_HEADERIMAGE

# Don't automatically go to the Finish page so the user can check the log.
!define MUI_FINISHPAGE_NOAUTOCLOSE

# Upon "cancel", ask the user if he really wants to abort the installer.
!define MUI_ABORTWARNING

# Don't force the user to accept the license, just show it.
# Details: http://trac.videolan.org/vlc/ticket/3124
!define MUI_LICENSEPAGE_BUTTON $(^NextBtn)
!define MUI_LICENSEPAGE_TEXT_BOTTOM "Click Next to continue."

# Path where the cross-compiled sigrok tools and libraries are located.
# Change this to where-ever you installed libsigrok.a and so on.
!define CROSS "@CMAKE_INSTALL_PREFIX@"

# Defines for WinAPI SHChangeNotify call.
!define SHCNE_ASSOCCHANGED 0x8000000
!define SHCNF_IDLIST 0


# --- Functions/Macros --------------------------------------------------------

# Inspired by http://nsis.sourceforge.net/Create_Internet_Shorcuts_during_installation
!Macro "CreateURL" "URLFile" "URLSite" "URLDesc"
	WriteINIStr "$INSTDIR\${URLFile}.URL" "InternetShortcut" "URL" "${URLSite}"
	CreateShortCut "$SMPROGRAMS\sigrok\SmuView\${URLFile}.lnk" "$INSTDIR\${URLFile}.url" "" \
		"$INSTDIR\smuview.exe" 0 "SW_SHOWNORMAL" "" "${URLDesc}"
!MacroEnd


# --- MUI pages ---------------------------------------------------------------

# Show a nice "Welcome to the ... Setup Wizard" page.
!insertmacro MUI_PAGE_WELCOME

# Show the license of the project.
!insertmacro MUI_PAGE_LICENSE "@PROJECT_SOURCE_DIR@/COPYING"

# Show a screen which allows the user to select which components to install.
!insertmacro MUI_PAGE_COMPONENTS

# Allow the user to select a different install directory.
!insertmacro MUI_PAGE_DIRECTORY

# Perform the actual installation, i.e. install the files.
!insertmacro MUI_PAGE_INSTFILES

# Show a final "We're done, click Finish to close this wizard" message.
!insertmacro MUI_PAGE_FINISH

# Pages used for the uninstaller.
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH


# --- MUI language files ------------------------------------------------------

# Select an installer language (required!).
!insertmacro MUI_LANGUAGE "English"


# --- Default section ---------------------------------------------------------

Section "SmuView (required)" Section1
	# This section is gray (can't be disabled) in the component list.
	SectionIn RO

	# Install the file(s) specified below into the specified directory.
	SetOutPath "$INSTDIR"

	# License file.
	File "@PROJECT_SOURCE_DIR@/COPYING"

	# SmuView (statically linked, includes all libs).
	File "${CROSS}/bin/smuview.exe"

	# Zadig (used for installing WinUSB drivers).
	File "${CROSS}/zadig.exe"
	File "${CROSS}/zadig_xp.exe"

	# Python
	File "${CROSS}/python34.dll"
	File "${CROSS}/python34.zip"

	SetOutPath "$INSTDIR\share"

	# Generate the uninstaller executable.
	WriteUninstaller "$INSTDIR\Uninstall.exe"

	# Create a sub-directory in the start menu.
	CreateDirectory "$SMPROGRAMS\sigrok"
	CreateDirectory "$SMPROGRAMS\sigrok\SmuView"

	# Create a shortcut for the SmuView application.
	SetOutPath "$INSTDIR"
	CreateShortCut "$SMPROGRAMS\sigrok\SmuView\SmuView.lnk" \
		"$INSTDIR\smuview.exe" "" "$INSTDIR\smuview.exe" \
		0 SW_SHOWNORMAL \
		"" "Open-source, portable sigrok GUI"

	# Create a shortcut for the SmuView application running in debug mode.
	CreateShortCut "$SMPROGRAMS\sigrok\SmuView\SmuView (Debug).lnk" \
		"$INSTDIR\smuview.exe" "-l 5" "$INSTDIR\smuview.exe" \
		0 SW_SHOWNORMAL \
		"" "Open-source, portable sigrok GUI (debug log level)"

	# Create a shortcut for the uninstaller.
	CreateShortCut "$SMPROGRAMS\sigrok\SmuView\Uninstall SmuView.lnk" \
		"$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0 \
		SW_SHOWNORMAL "" "Uninstall SmuView"

	# Create a shortcut for the Zadig executable.
	CreateShortCut "$SMPROGRAMS\sigrok\SmuView\Zadig (SmuView).lnk" \
		"$INSTDIR\zadig.exe" "" "$INSTDIR\zadig.exe" 0 \
		SW_SHOWNORMAL "" "Zadig (SmuView)"

	# Create a shortcut for the Zadig executable (for Win XP).
	CreateShortCut "$SMPROGRAMS\sigrok\SmuView\Zadig (SmuView, Win XP).lnk" \
		"$INSTDIR\zadig_xp.exe" "" "$INSTDIR\zadig_xp.exe" 0 \
		SW_SHOWNORMAL "" "Zadig (SmuView, Win XP)"

	# Create shortcuts to the HTML and PDF manuals, respectively.
	!InsertMacro "CreateURL" "SmuView HTML manual" "https://knarfs.github.io/doc/smuview/@SV_MANUAL_VERSION@/manual.html" "SmuView HTML manual"
	!InsertMacro "CreateURL" "SmuView PDF manual" "https://knarfs.github.io/doc/smuview/@SV_MANUAL_VERSION@/manual.pdf" "SmuView PDF manual"
	!InsertMacro "CreateURL" "SmuView Python Bindings API" "https://knarfs.github.io/doc/smuview/@SV_MANUAL_VERSION@/python_bindings_api.html" "SmuView Python Bindings API"

	# Create registry keys for "Add/remove programs" in the control panel.
	WriteRegStr HKLM "${REGSTR}" "DisplayName" "SmuView"
	WriteRegStr HKLM "${REGSTR}" "UninstallString" \
		"$\"$INSTDIR\Uninstall.exe$\""
	WriteRegStr HKLM "${REGSTR}" "InstallLocation" "$\"$INSTDIR$\""
	WriteRegStr HKLM "${REGSTR}" "DisplayIcon" \
		"$\"$INSTDIR\smuview.ico$\""
	WriteRegStr HKLM "${REGSTR}" "Publisher" "sigrok"
	WriteRegStr HKLM "${REGSTR}" "HelpLink" \
		"http://sigrok.org/wiki/SmuView"
	WriteRegStr HKLM "${REGSTR}" "URLUpdateInfo" \
		"https://github.com/knarfS/smuview/releases"
	WriteRegStr HKLM "${REGSTR}" "URLInfoAbout" "https://github.com/knarfS/smuview"
	WriteRegStr HKLM "${REGSTR}" "DisplayVersion" "@SV_VERSION_STRING@"
	WriteRegStr HKLM "${REGSTR}" "Contact" \
		"sigrok-devel@lists.sourceforge.org"
	WriteRegStr HKLM "${REGSTR}" "Comments" \
		"This is a Qt based sigrok GUI."

	# Display "Remove" instead of "Modify/Remove" in the control panel.
	WriteRegDWORD HKLM "${REGSTR}" "NoModify" 1
	WriteRegDWORD HKLM "${REGSTR}" "NoRepair" 1
SectionEnd

Section "Example scripts" Section2
	# Example smuscript *.py files.
	SetOutPath "$INSTDIR\examples"

	File "${CROSS}/share/smuscript/example_characterize_battery.py"
	File "${CROSS}/share/smuscript/example_characterize_psu.py"
	File "${CROSS}/share/smuscript/example_characterize_psu_2.py"
	File "${CROSS}/share/smuscript/example_device_properties.py"
	File "${CROSS}/share/smuscript/example_ui.py"
	File "${CROSS}/share/smuscript/example_user_channel.py"
	File "${CROSS}/share/smuscript/generate_documentation.py"
	File "${CROSS}/share/smuscript/python_version.py"

	# Create a shortcut for the example scripts folder.
	CreateShortCut "$SMPROGRAMS\sigrok\SmuView\Examples (SmuScript).lnk" \
		"$INSTDIR\examples" "" "$INSTDIR\examples" 0 \
		SW_SHOWNORMAL "" ""
SectionEnd


# --- Uninstaller section -----------------------------------------------------

Section "Uninstall"
	# Always delete the uninstaller first (yes, this really works).
	Delete "$INSTDIR\Uninstall.exe"

	# Delete the application, the application data, and related libs.
	Delete "$INSTDIR\COPYING"
	Delete "$INSTDIR\smuview.exe"
	Delete "$INSTDIR\zadig.exe"
	Delete "$INSTDIR\zadig_xp.exe"
	Delete "$INSTDIR\python34.dll"
	Delete "$INSTDIR\python34.zip"

	# Delete the URL files for the manual.
	#Delete "$INSTDIR\SmuView HTML manual.url"
	#Delete "$INSTDIR\SmuView PDF manual.url"

	# Delete the example *.py files.
	RMDir /r "$INSTDIR\examples\*"

	# Delete the install directory and its sub-directories.
	RMDir "$INSTDIR\share"
	RMDir "$INSTDIR\examples"
	RMDir "$INSTDIR"

	# Delete the links from the start menu.
	Delete "$SMPROGRAMS\sigrok\SmuView\SmuView.lnk"
	Delete "$SMPROGRAMS\sigrok\SmuView\SmuView (Debug).lnk"
	Delete "$SMPROGRAMS\sigrok\SmuView\Uninstall SmuView.lnk"
	Delete "$SMPROGRAMS\sigrok\SmuView\Zadig (SmuView).lnk"
	Delete "$SMPROGRAMS\sigrok\SmuView\Zadig (SmuView, Win XP).lnk"
	Delete "$SMPROGRAMS\sigrok\SmuView\Examples (SmuScript).lnk"

	# Delete the links to the manual.
	Delete "$SMPROGRAMS\sigrok\SmuView\SmuView HTML manual.lnk"
	Delete "$SMPROGRAMS\sigrok\SmuView\SmuView PDF manual.lnk"
	Delete "$SMPROGRAMS\sigrok\SmuView\SmuView Python Bindings API.lnk"

	# Delete the sub-directory in the start menu.
	RMDir "$SMPROGRAMS\sigrok\SmuView"
	RMDir "$SMPROGRAMS\sigrok"

	# Delete the registry key(s).
	DeleteRegKey HKLM "${REGSTR}"
SectionEnd


# --- Component selection section descriptions --------------------------------

LangString DESC_Section1 ${LANG_ENGLISH} "This installs the SmuView sigrok GUI and all required libraries."
LangString DESC_Section2 ${LANG_ENGLISH} "This installs some example script files (SmuScript) that you can use to try out the features SmuView has to offer."

!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
	!insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1)
	!insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
!insertmacro MUI_FUNCTION_DESCRIPTION_END


================================================
FILE: cppcheck-suppressions.xml
================================================
<?xml version="1.0"?>
<suppressions>

	<!-- Exclude Paths -->
	<suppress>
		<id>*</id>
		<fileName>*/build/*</fileName>
	</suppress>
	<suppress>
		<id>*</id>
		<fileName>*/external/pybind11_2.11_dev1/*</fileName>
	</suppress>
	<suppress>
		<id>*</id>
		<fileName>*/external/pybind11_2.9.2/*</fileName>
	</suppress>
	<suppress>
		<id>*</id>
		<fileName>*/external/QCodeEditor/*</fileName>
	</suppress>
	<suppress>
		<id>*</id>
		<fileName>*/external/QtFindReplaceDialog/*</fileName>
	</suppress>

	<!-- False positives, maybe because of forward declaration. -->
	<suppress>
		<id>unsafeClassCanLeak</id>
	</suppress>

	<!-- False positive? -->
	<suppress>
		<id>nullPointer</id>
		<fileName>*/devices/configurable.hpp</fileName>
		<symbolName>configurable</symbolName>
	</suppress>

	<!-- There are many functions in SmuView that are not used yet. -->
	<suppress>
		<id>unusedFunction</id>
	</suppress>

	<!-- Maybe add this checks later: -->
	<suppress>
		<id>useStlAlgorithm</id>
	</suppress>
	<suppress>
		<id>useInitializationList</id>
	</suppress>
	<suppress>
		<id>uninitMemberVar</id>
	</suppress>

</suppressions>


================================================
FILE: doc/smuview.1
================================================
.TH SMUVIEW 1 "Januray 6, 2021"
.SH "NAME"
SmuView \- Qt-based source measure unit GUI for sigrok
.SH "SYNOPSIS"
.B smuview \fR[\fBOPTIONS\fR]
.SH "DESCRIPTION"
.B SmuView
is a cross-platform Qt-based GUI for the
.B sigrok
software suite for test and measurement equipment such as power supplies,
electronic loads, multimeters and more.
.SH "OPTIONS"
.B SmuView
has very few command line options, as most configuration elements are
available from the GUI itself.
.TP
.BR "\-l, \-\-loglevel " <level>
Set the libsigrok loglevel. The higher the number, the more debug output will
be printed. The dafault loglevel is 2 (Warnings), valid loglevels are:
.sp
\fB0\fP   None
.br
\fB1\fP   Error
.br
\fB2\fP   Warnings
.br
\fB3\fP   Informational
.br
\fB4\fP   Debug
.br
\fB5\fP   Spew
.TP
.B "\-h, \-?, \-\-help"
Show a help text and exit.
.TP
.B "\-V, \-\-version"
Show version information and exit.
.TP
.BR "\-d, \-\-driver " <drivername>
Specify the capture device to connect to.
.TP
.BR "\-D, \-\-dont\-scan "
Usually SmuView automatically scans all drivers to find suitable
devices during program startup. This option disables the auto-scan.
.TP
.B "\-c, \-\-clean"
Don't restore previous settings (like views, position and size) on startup.
.TP
.B \-\-driver
Users can either specify the
option to pick a device at startup, or interactively scan for devices
after SmuView has finished starting up.
.TP
.BR "\-s, \-\-script " <path_to_smuscript>
Specify the SmuScript to load and execute.
.SH "EXIT STATUS"
.B SmuView
exits with 0 on success, 1 on most failures.
.SH "SEE ALSO"
\fBsigrok\-cli\fP(1)
.SH "BUGS"
Please report any bugs via Github
.RB "(" https://github.com/knarfS/smuview/issues ")"
or on the sigrok\-devel mailing list
.RB "(" sigrok\-devel@lists.souceforge.net ")."
.SH "LICENSE"
.B SmuView
is covered by the GNU General Public License (GPL), version 3 or later.
.SH "AUTHORS"
Please see the individual source code files.
.PP
This manual page was written by Frank Stettner <frank\-stettner@gmx.net>.
It is licensed under the terms of the GNU GPL (version 3 or later).


================================================
FILE: doc/smuview_python_bindings.html
================================================
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.9.3.dev7+g49b7773" />
<title>smuview API documentation</title>
<meta name="description" content="The SmuView 0.0.5-git-64e7b9d Python bindings …" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>smuview</code></h1>
</header>
<section id="section-intro">
<p>The SmuView 0.0.5-git-64e7b9d Python bindings.</p>
<p>The Python bindings are a scripting extension for SmuView to automate, setup and control complex or repetitive measurements, to process the incoming data and to create a standardized user interface for those measurements.</p>
<p>The smuview module offers two default object instances: <code><a title="smuview.Session" href="#smuview.Session">Session</a></code> and <code><a title="smuview.UiProxy" href="#smuview.UiProxy">UiProxy</a></code>.
The <code><a title="smuview.Session" href="#smuview.Session">Session</a></code> object gives access to already connected devices or connects new devices. The returned device object can then be used to read data from the device or control the device.
The <code><a title="smuview.UiProxy" href="#smuview.UiProxy">UiProxy</a></code> object instance is used to modify the user interface, for example adding tabs or views.</p>
<p>Here is a short example that connects the HP 3378A DMM via GPIB, reads a sample and creates the default tab for the device:</p>
<pre><code>import smuview
import time

# Connect device.
dmm_dev = Session.connect_device(&quot;hp-3478a:conn=libgpib/hp3478a&quot;)[0]
# Sleep 1s to give the devices the chance to create signals.
time.sleep(1)
# Get last sample from channel P1.
sample = dmm_dev.channels()[&quot;P1&quot;].actual_signal().get_last_sample(True)
print(sample)

# Add default tab for the DMM device.
UiProxy.add_device_tab(dmm_dev)
</code></pre>
<p>For more example scripts, please have a look into the <code>smuscript</code> folder.</p>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="smuview.AnalogSampleSignal"><code class="flex name class">
<span>class <span class="ident">AnalogSampleSignal</span></span>
<span>(</span><span>*args, **kwargs)</span>
</code></dt>
<dd>
<div class="desc"><p>A signal with key-value pairs.</p></div>
<h3>Ancestors</h3>
<ul class="hlist">
<li><a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a></li>
<li>pybind11_builtins.pybind11_object</li>
</ul>
<h3>Methods</h3>
<dl>
<dt id="smuview.AnalogSampleSignal.get_sample"><code class="name flex">
<span>def <span class="ident">get_sample</span></span>(<span>self: <a title="smuview.AnalogSampleSignal" href="#smuview.AnalogSampleSignal">AnalogSampleSignal</a>, pos: int) ‑> Tuple[int, float]</span>
</code></dt>
<dd>
<div class="desc"><p>Return the sample for the given position.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>pos</code></strong> :&ensp;<code>int</code></dt>
<dd>The position/number of the sample.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>Tuple[int, float]</code></dt>
<dd>The sample with 1. the key and 2. the sample value.</dd>
</dl></div>
</dd>
<dt id="smuview.AnalogSampleSignal.push_sample"><code class="name flex">
<span>def <span class="ident">push_sample</span></span>(<span>self: <a title="smuview.AnalogSampleSignal" href="#smuview.AnalogSampleSignal">AnalogSampleSignal</a>, sample: None, pos: int, unit_size: int, digits: int, decimal_places: int)</span>
</code></dt>
<dd>
<div class="desc"><p>Push a new sample to the signal.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>sample</code></strong> :&ensp;<code>float</code> or <code>double</code></dt>
<dd>The sample value.</dd>
<dt><strong><code>pos</code></strong> :&ensp;<code>int</code></dt>
<dd>The key (position) of the new sample.</dd>
<dt><strong><code>unit_size</code></strong> :&ensp;<code>int</code></dt>
<dd>The size of the floating point data type (float=4, double=8) for the <code>sample</code> argument.</dd>
<dt><strong><code>digits</code></strong> :&ensp;<code>int</code></dt>
<dd>The total number of digits.</dd>
<dt><strong><code>decimal_places</code></strong> :&ensp;<code>int</code></dt>
<dd>The number of decimal places.</dd>
</dl></div>
</dd>
</dl>
<h3>Inherited members</h3>
<ul class="hlist">
<li><code><b><a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a></b></code>:
<ul class="hlist">
<li><code><a title="smuview.BaseSignal.name" href="#smuview.BaseSignal.name">name</a></code></li>
<li><code><a title="smuview.BaseSignal.sample_count" href="#smuview.BaseSignal.sample_count">sample_count</a></code></li>
<li><code><a title="smuview.BaseSignal.set_name" href="#smuview.BaseSignal.set_name">set_name</a></code></li>
</ul>
</li>
</ul>
</dd>
<dt id="smuview.AnalogTimeSignal"><code class="flex name class">
<span>class <span class="ident">AnalogTimeSignal</span></span>
<span>(</span><span>*args, **kwargs)</span>
</code></dt>
<dd>
<div class="desc"><p>A signal with time-value pairs.</p></div>
<h3>Ancestors</h3>
<ul class="hlist">
<li><a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a></li>
<li>pybind11_builtins.pybind11_object</li>
</ul>
<h3>Methods</h3>
<dl>
<dt id="smuview.AnalogTimeSignal.get_last_sample"><code class="name flex">
<span>def <span class="ident">get_last_sample</span></span>(<span>self: <a title="smuview.AnalogTimeSignal" href="#smuview.AnalogTimeSignal">AnalogTimeSignal</a>, relative_time: bool) ‑> Tuple[float, float]</span>
</code></dt>
<dd>
<div class="desc"><p>Return the last sample of the signal.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>relative_time</code></strong> :&ensp;<code>bool</code></dt>
<dd>When <code>True</code>, the returned timestamp is relative to the start of the SmuView session.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>Tuple[float, float]</code></dt>
<dd>The sample with 1. timestamp in milliseconds and 2. the sample value.</dd>
</dl></div>
</dd>
<dt id="smuview.AnalogTimeSignal.get_sample"><code class="name flex">
<span>def <span class="ident">get_sample</span></span>(<span>self: <a title="smuview.AnalogTimeSignal" href="#smuview.AnalogTimeSignal">AnalogTimeSignal</a>, pos: int, relative_time: bool) ‑> Tuple[float, float]</span>
</code></dt>
<dd>
<div class="desc"><p>Return the sample at the given position.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>pos</code></strong> :&ensp;<code>int</code></dt>
<dd>The position/number of the sample.</dd>
<dt><strong><code>relative_time</code></strong> :&ensp;<code>bool</code></dt>
<dd>When <code>True</code>, the returned timestamp is relative to the start of the SmuView session.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>Tuple[float, float]</code></dt>
<dd>The sample with 1. timestamp in milliseconds and 2. the sample value.</dd>
</dl></div>
</dd>
<dt id="smuview.AnalogTimeSignal.push_sample"><code class="name flex">
<span>def <span class="ident">push_sample</span></span>(<span>self: <a title="smuview.AnalogTimeSignal" href="#smuview.AnalogTimeSignal">AnalogTimeSignal</a>, sample: None, timestamp: float, unit_size: int, digits: int, decimal_places: int)</span>
</code></dt>
<dd>
<div class="desc"><p>Push a new sample to the signal.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>sample</code></strong> :&ensp;<code>float</code> or <code>double</code></dt>
<dd>The sample value.</dd>
<dt><strong><code>timestamp</code></strong> :&ensp;<code>float</code></dt>
<dd>The absolute timestamp in milliseconds.</dd>
<dt><strong><code>unit_size</code></strong> :&ensp;<code>int</code></dt>
<dd>The size of the floating point data type (float=4, double=8) for the <code>sample</code> argument.</dd>
<dt><strong><code>digits</code></strong> :&ensp;<code>int</code></dt>
<dd>The total number of digits.</dd>
<dt><strong><code>decimal_places</code></strong> :&ensp;<code>int</code></dt>
<dd>The number of decimal places.</dd>
</dl></div>
</dd>
</dl>
<h3>Inherited members</h3>
<ul class="hlist">
<li><code><b><a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a></b></code>:
<ul class="hlist">
<li><code><a title="smuview.BaseSignal.name" href="#smuview.BaseSignal.name">name</a></code></li>
<li><code><a title="smuview.BaseSignal.sample_count" href="#smuview.BaseSignal.sample_count">sample_count</a></code></li>
<li><code><a title="smuview.BaseSignal.set_name" href="#smuview.BaseSignal.set_name">set_name</a></code></li>
</ul>
</li>
</ul>
</dd>
<dt id="smuview.BaseChannel"><code class="flex name class">
<span>class <span class="ident">BaseChannel</span></span>
<span>(</span><span>*args, **kwargs)</span>
</code></dt>
<dd>
<div class="desc"><p>The base class for all channel types.</p></div>
<h3>Ancestors</h3>
<ul class="hlist">
<li>pybind11_builtins.pybind11_object</li>
</ul>
<h3>Subclasses</h3>
<ul class="hlist">
<li><a title="smuview.HardwareChannel" href="#smuview.HardwareChannel">HardwareChannel</a></li>
<li><a title="smuview.UserChannel" href="#smuview.UserChannel">UserChannel</a></li>
</ul>
<h3>Methods</h3>
<dl>
<dt id="smuview.BaseChannel.actual_signal"><code class="name flex">
<span>def <span class="ident">actual_signal</span></span>(<span>self: <a title="smuview.BaseChannel" href="#smuview.BaseChannel">BaseChannel</a>) ‑> <a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a></span>
</code></dt>
<dd>
<div class="desc"><p>Return the actual signal of the channel.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code><a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a></code></dt>
<dd>The actual signal object.</dd>
</dl></div>
</dd>
<dt id="smuview.BaseChannel.add_signal"><code class="name flex">
<span>def <span class="ident">add_signal</span></span>(<span>self: <a title="smuview.BaseChannel" href="#smuview.BaseChannel">BaseChannel</a>, quantity: <a title="smuview.Quantity" href="#smuview.Quantity">Quantity</a>, quantity_flags: Set[<a title="smuview.QuantityFlag" href="#smuview.QuantityFlag">QuantityFlag</a>], unit: <a title="smuview.Unit" href="#smuview.Unit">Unit</a>, custom_name: str = '') ‑> <a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a></span>
</code></dt>
<dd>
<div class="desc"><p>Add a new signal to the channel.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>quantity</code></strong> :&ensp;<code><a title="smuview.Quantity" href="#smuview.Quantity">Quantity</a></code></dt>
<dd>The <code><a title="smuview.Quantity" href="#smuview.Quantity">Quantity</a></code> of the new signal.</dd>
<dt><strong><code>quantity_flags</code></strong> :&ensp;<code>Set[<a title="smuview.QuantityFlag" href="#smuview.QuantityFlag">QuantityFlag</a>]</code></dt>
<dd>The <code><a title="smuview.QuantityFlag" href="#smuview.QuantityFlag">QuantityFlag</a></code>s of the new signal.</dd>
<dt><strong><code>unit</code></strong> :&ensp;<code><a title="smuview.Unit" href="#smuview.Unit">Unit</a></code></dt>
<dd>The <code><a title="smuview.Unit" href="#smuview.Unit">Unit</a></code> of the new signal.</dd>
<dt><strong><code>custom_name</code></strong> :&ensp;<code>str</code></dt>
<dd>A custom name for the new signal. If empty (default), the signal name will be automatically generated.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code><a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a></code></dt>
<dd>The new signal object.</dd>
</dl></div>
</dd>
<dt id="smuview.BaseChannel.name"><code class="name flex">
<span>def <span class="ident">name</span></span>(<span>self: <a title="smuview.BaseChannel" href="#smuview.BaseChannel">BaseChannel</a>) ‑> str</span>
</code></dt>
<dd>
<div class="desc"><p>Return the name of the channel.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>The name of the channel.</dd>
</dl></div>
</dd>
<dt id="smuview.BaseChannel.signals"><code class="name flex">
<span>def <span class="ident">signals</span></span>(<span>self: <a title="smuview.BaseChannel" href="#smuview.BaseChannel">BaseChannel</a>) ‑> List[<a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a>]</span>
</code></dt>
<dd>
<div class="desc"><p>Return all signals of the channel.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>List[<a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a>]</code></dt>
<dd>All signals of the channel.</dd>
</dl></div>
</dd>
</dl>
</dd>
<dt id="smuview.BaseDevice"><code class="flex name class">
<span>class <span class="ident">BaseDevice</span></span>
<span>(</span><span>*args, **kwargs)</span>
</code></dt>
<dd>
<div class="desc"><p>The base class for all device types.</p></div>
<h3>Ancestors</h3>
<ul class="hlist">
<li>pybind11_builtins.pybind11_object</li>
</ul>
<h3>Subclasses</h3>
<ul class="hlist">
<li><a title="smuview.HardwareDevice" href="#smuview.HardwareDevice">HardwareDevice</a></li>
<li><a title="smuview.UserDevice" href="#smuview.UserDevice">UserDevice</a></li>
</ul>
<h3>Methods</h3>
<dl>
<dt id="smuview.BaseDevice.add_user_channel"><code class="name flex">
<span>def <span class="ident">add_user_channel</span></span>(<span>self: <a title="smuview.BaseDevice" href="#smuview.BaseDevice">BaseDevice</a>, channel_name: str, channel_group_name: str) ‑> <a title="smuview.UserChannel" href="#smuview.UserChannel">UserChannel</a></span>
</code></dt>
<dd>
<div class="desc"><p>Add a new user channel to the device.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>channel_name</code></strong> :&ensp;<code>str</code></dt>
<dd>The name of the new user channel.</dd>
<dt><strong><code>channel_group_name</code></strong> :&ensp;<code>str</code></dt>
<dd>The name of the channel group where to create the user channel. Can be empty.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code><a title="smuview.UserChannel" href="#smuview.UserChannel">UserChannel</a></code></dt>
<dd>The new user channel object.</dd>
</dl></div>
</dd>
<dt id="smuview.BaseDevice.channels"><code class="name flex">
<span>def <span class="ident">channels</span></span>(<span>self: <a title="smuview.BaseDevice" href="#smuview.BaseDevice">BaseDevice</a>) ‑> Dict[str, <a title="smuview.BaseChannel" href="#smuview.BaseChannel">BaseChannel</a>]</span>
</code></dt>
<dd>
<div class="desc"><p>Return all channels of the device.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>Dict[str, <a title="smuview.BaseChannel" href="#smuview.BaseChannel">BaseChannel</a>]</code></dt>
<dd>A Dict where the key is the id of the channel and the value is the channel object.</dd>
</dl></div>
</dd>
<dt id="smuview.BaseDevice.configurables"><code class="name flex">
<span>def <span class="ident">configurables</span></span>(<span>self: <a title="smuview.BaseDevice" href="#smuview.BaseDevice">BaseDevice</a>) ‑> Dict[str, <a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a>]</span>
</code></dt>
<dd>
<div class="desc"><p>Return all configurables of the device.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>Dict[str, <a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a>]</code></dt>
<dd>A Dict where the key is the id of the <code><a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a></code> and the value is the <code><a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a></code> object.</dd>
</dl></div>
</dd>
<dt id="smuview.BaseDevice.id"><code class="name flex">
<span>def <span class="ident">id</span></span>(<span>self: <a title="smuview.BaseDevice" href="#smuview.BaseDevice">BaseDevice</a>) ‑> str</span>
</code></dt>
<dd>
<div class="desc"><p>Return the unique id of the device.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>The id of the device.</dd>
</dl></div>
</dd>
<dt id="smuview.BaseDevice.name"><code class="name flex">
<span>def <span class="ident">name</span></span>(<span>self: <a title="smuview.BaseDevice" href="#smuview.BaseDevice">BaseDevice</a>) ‑> str</span>
</code></dt>
<dd>
<div class="desc"><p>Return the name of the device.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>The name of the device.</dd>
</dl></div>
</dd>
</dl>
</dd>
<dt id="smuview.BaseSignal"><code class="flex name class">
<span>class <span class="ident">BaseSignal</span></span>
<span>(</span><span>*args, **kwargs)</span>
</code></dt>
<dd>
<div class="desc"><p>The base class for all signal types.</p></div>
<h3>Ancestors</h3>
<ul class="hlist">
<li>pybind11_builtins.pybind11_object</li>
</ul>
<h3>Subclasses</h3>
<ul class="hlist">
<li><a title="smuview.AnalogSampleSignal" href="#smuview.AnalogSampleSignal">AnalogSampleSignal</a></li>
<li><a title="smuview.AnalogTimeSignal" href="#smuview.AnalogTimeSignal">AnalogTimeSignal</a></li>
</ul>
<h3>Methods</h3>
<dl>
<dt id="smuview.BaseSignal.name"><code class="name flex">
<span>def <span class="ident">name</span></span>(<span>self: <a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a>) ‑> str</span>
</code></dt>
<dd>
<div class="desc"><p>Return the name of the signal.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>The name of the signal.</dd>
</dl></div>
</dd>
<dt id="smuview.BaseSignal.sample_count"><code class="name flex">
<span>def <span class="ident">sample_count</span></span>(<span>self: <a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a>) ‑> int</span>
</code></dt>
<dd>
<div class="desc"><p>Return the number of samples of the signal.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>int</code></dt>
<dd>The number of samples.</dd>
</dl></div>
</dd>
<dt id="smuview.BaseSignal.set_name"><code class="name flex">
<span>def <span class="ident">set_name</span></span>(<span>self: <a title="smuview.BaseSignal" href="#smuview.BaseSignal">BaseSignal</a>, arg0: str)</span>
</code></dt>
<dd>
<div class="desc"><p>Set a custom name for the signal.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>custom_name</code></strong> :&ensp;<code>str</code></dt>
<dd>A custom name for the signal. If empty, the signal name will be automatically generated.</dd>
</dl></div>
</dd>
</dl>
</dd>
<dt id="smuview.ConfigKey"><code class="flex name class">
<span>class <span class="ident">ConfigKey</span></span>
<span>(</span><span>...)</span>
</code></dt>
<dd>
<div class="desc"><p>Enum of all available config keys for controlling a device.</p>
<p><strong>init</strong>(self: smuview.ConfigKey, value: int) -&gt; None</p></div>
<h3>Ancestors</h3>
<ul class="hlist">
<li>pybind11_builtins.pybind11_object</li>
</ul>
<h3>Class variables</h3>
<dl>
<dt id="smuview.ConfigKey.ADCPowerlineCycles"><code class="name">var <span class="ident">ADCPowerlineCycles</span></code></dt>
<dd>
<div class="desc"><p>Number of powerline cycles for ADC integration time.</p></div>
</dd>
<dt id="smuview.ConfigKey.Amplitude"><code class="name">var <span class="ident">Amplitude</span></code></dt>
<dd>
<div class="desc"><p>Amplitude of a source without strictly-defined <code><a title="smuview.ConfigKey.MeasuredQuantity" href="#smuview.ConfigKey.MeasuredQuantity">ConfigKey.MeasuredQuantity</a></code>.</p></div>
</dd>
<dt id="smuview.ConfigKey.Averaging"><code class="name">var <span class="ident">Averaging</span></code></dt>
<dd>
<div class="desc"><p>Averaging.</p></div>
</dd>
<dt id="smuview.ConfigKey.AvgSamples"><code class="name">var <span class="ident">AvgSamples</span></code></dt>
<dd>
<div class="desc"><p>The number of samples to be averaged over.</p></div>
</dd>
<dt id="smuview.ConfigKey.BufferSize"><code class="name">var <span class="ident">BufferSize</span></code></dt>
<dd>
<div class="desc"><p>Buffer size.</p></div>
</dd>
<dt id="smuview.ConfigKey.CaptureFile"><code class="name">var <span class="ident">CaptureFile</span></code></dt>
<dd>
<div class="desc"><p>The capturefile to inject.</p></div>
</dd>
<dt id="smuview.ConfigKey.CaptureRatio"><code class="name">var <span class="ident">CaptureRatio</span></code></dt>
<dd>
<div class="desc"><p>The pre/post-trigger capture ratio.</p></div>
</dd>
<dt id="smuview.ConfigKey.CaptureUnitSize"><code class="name">var <span class="ident">CaptureUnitSize</span></code></dt>
<dd>
<div class="desc"><p>The capturefile unit size.</p></div>
</dd>
<dt id="smuview.ConfigKey.CenterFrequency"><code class="name">var <span class="ident">CenterFrequency</span></code></dt>
<dd>
<div class="desc"><p>Center frequency.</p></div>
</dd>
<dt id="smuview.ConfigKey.ChannelConfig"><code class="name">var <span class="ident">ChannelConfig</span></code></dt>
<dd>
<div class="desc"><p>Channel configuration.</p></div>
</dd>
<dt id="smuview.ConfigKey.ClockEdge"><code class="name">var <span class="ident">ClockEdge</span></code></dt>
<dd>
<div class="desc"><p>Choice of clock edge for external clock (<code>r</code> or <code>f</code>).</p></div>
</dd>
<dt id="smuview.ConfigKey.Coupling"><code class="name">var <span class="ident">Coupling</span></code></dt>
<dd>
<div class="desc"><p>Coupling.</p></div>
</dd>
<dt id="smuview.ConfigKey.Current"><code class="name">var <span class="ident">Current</span></code></dt>
<dd>
<div class="desc"><p>Current current.</p></div>
</dd>
<dt id="smuview.ConfigKey.CurrentLimit"><code class="name">var <span class="ident">CurrentLimit</span></code></dt>
<dd>
<div class="desc"><p>Current limit.</p></div>
</dd>
<dt id="smuview.ConfigKey.DataLog"><code class="name">var <span class="ident">DataLog</span></code></dt>
<dd>
<div class="desc"><p>The device has internal storage, into which data is logged.</p></div>
</dd>
<dt id="smuview.ConfigKey.DataSource"><code class="name">var <span class="ident">DataSource</span></code></dt>
<dd>
<div class="desc"><p>Data source for acquisition.</p></div>
</dd>
<dt id="smuview.ConfigKey.DeviceMode"><code class="name">var <span class="ident">DeviceMode</span></code></dt>
<dd>
<div class="desc"><p>Device mode for multi-function devices.</p></div>
</dd>
<dt id="smuview.ConfigKey.Digits"><code class="name">var <span class="ident">Digits</span></code></dt>
<dd>
<div class="desc"><p>The number of digits (e.g. for a DMM).</p></div>
</dd>
<dt id="smuview.ConfigKey.Enabled"><code class="name">var <span class="ident">Enabled</span></code></dt>
<dd>
<div class="desc"><p>Enabling/disabling a channel (group).</p></div>
</dd>
<dt id="smuview.ConfigKey.EquivCircuitModel"><code class="name">var <span class="ident">EquivCircuitModel</span></code></dt>
<dd>
<div class="desc"><p>Equivalent circuit model.</p></div>
</dd>
<dt id="smuview.ConfigKey.ExternalClock"><code class="name">var <span class="ident">ExternalClock</span></code></dt>
<dd>
<div class="desc"><p>Using an external clock.</p></div>
</dd>
<dt id="smuview.ConfigKey.ExternalClockSource"><code class="name">var <span class="ident">ExternalClockSource</span></code></dt>
<dd>
<div class="desc"><p>Which external clock source to use if the device supports multiple external clock channels.</p></div>
</dd>
<dt id="smuview.ConfigKey.Filter"><code class="name">var <span class="ident">Filter</span></code></dt>
<dd>
<div class="desc"><p>Filter.</p></div>
</dd>
<dt id="smuview.ConfigKey.HighResolution"><code class="name">var <span class="ident">HighResolution</span></code></dt>
<dd>
<div class="desc"><p>High resolution mode.</p></div>
</dd>
<dt id="smuview.ConfigKey.HoldMax"><code class="name">var <span class="ident">HoldMax</span></code></dt>
<dd>
<div class="desc"><p>Max hold mode.</p></div>
</dd>
<dt id="smuview.ConfigKey.HoldMin"><code class="name">var <span class="ident">HoldMin</span></code></dt>
<dd>
<div class="desc"><p>Min hold mode.</p></div>
</dd>
<dt id="smuview.ConfigKey.HorizTriggerPos"><code class="name">var <span class="ident">HorizTriggerPos</span></code></dt>
<dd>
<div class="desc"><p>Horizontal trigger position.</p></div>
</dd>
<dt id="smuview.ConfigKey.LogicThreshold"><code class="name">var <span class="ident">LogicThreshold</span></code></dt>
<dd>
<div class="desc"><p>Logic threshold: predefined levels (<code>TTL</code>, <code>ECL</code>, <code>CMOS</code>, etc).</p></div>
</dd>
<dt id="smuview.ConfigKey.LogicThresholdCustom"><code class="name">var <span class="ident">LogicThresholdCustom</span></code></dt>
<dd>
<div class="desc"><p>Logic threshold: custom numerical value.</p></div>
</dd>
<dt id="smuview.ConfigKey.MeasuredQuantity"><code class="name">var <span class="ident">MeasuredQuantity</span></code></dt>
<dd>
<div class="desc"><p>Measured quantity.</p></div>
</dd>
<dt id="smuview.ConfigKey.NumAnalogChannels"><code class="name">var <span class="ident">NumAnalogChannels</span></code></dt>
<dd>
<div class="desc"><p>The number of analog channels.</p></div>
</dd>
<dt id="smuview.ConfigKey.NumHDiv"><code class="name">var <span class="ident">NumHDiv</span></code></dt>
<dd>
<div class="desc"><p>Number of horizontal divisions, as related to <code><a title="smuview.ConfigKey.TimeBase" href="#smuview.ConfigKey.TimeBase">ConfigKey.TimeBase</a></code>.</p></div>
</dd>
<dt id="smuview.ConfigKey.NumLogicChannels"><code class="name">var <span class="ident">NumLogicChannels</span></code></dt>
<dd>
<div class="desc"><p>The number of logic channels.</p></div>
</dd>
<dt id="smuview.ConfigKey.NumVDiv"><code class="name">var <span class="ident">NumVDiv</span></code></dt>
<dd>
<div class="desc"><p>Number of vertical divisions, as related to <code><a title="smuview.ConfigKey.VDiv" href="#smuview.ConfigKey.VDiv">ConfigKey.VDiv</a></code>.</p></div>
</dd>
<dt id="smuview.ConfigKey.Offset"><code class="name">var <span class="ident">Offset</span></code></dt>
<dd>
<div class="desc"><p>Offset of a source without strictly-defined <code><a title="smuview.ConfigKey.MeasuredQuantity" href="#smuview.ConfigKey.MeasuredQuantity">ConfigKey.MeasuredQuantity</a></code>.</p></div>
</dd>
<dt id="smuview.ConfigKey.OutputFrequency"><code class="name">var <span class="ident">OutputFrequency</span></code></dt>
<dd>
<div class="desc"><p>Output frequency in Hz.</p></div>
</dd>
<dt id="smuview.ConfigKey.OutputFrequencyTarget"><code class="name">var <span class="ident">OutputFrequencyTarget</span></code></dt>
<dd>
<div class="desc"><p>Output frequency target in Hz.</p></div>
</dd>
<dt id="smuview.ConfigKey.OverCurrentProtectionActive"><code class="name">var <span class="ident">OverCurrentProtectionActive</span></code></dt>
<dd>
<div class="desc"><p>Status of over current protection (OCP).</p></div>
</dd>
<dt id="smuview.ConfigKey.OverCurrentProtectionEnabled"><code class="name">var <span class="ident">OverCurrentProtectionEnabled</span></code></dt>
<dd>
<div class="desc"><p>Enabling/disable
over current protection (OCP) feature.</p></div>
</dd>
<dt id="smuview.ConfigKey.OverCurrentProtectionThreshold"><code class="name">var <span class="ident">OverCurrentProtectionThreshold</span></code></dt>
<dd>
<div class="desc"><p>Over current protection (OCP) threshold.</p></div>
</dd>
<dt id="smuview.ConfigKey.OverTemperatureProtectionActive"><code class="name">var <span class="ident">OverTemperatureProtectionActive</span></code></dt>
<dd>
<div class="desc"><p>Status of over temperature protection (OTP).</p></div>
</dd>
<dt id="smuview.ConfigKey.OverTemperatureProtectionEnabled"><code class="name">var <span class="ident">OverTemperatureProtectionEnabled</span></code></dt>
<dd>
<div class="desc"><p>Enabling/disable over temperature protection (OTP) feature.</p></div>
</dd>
<dt id="smuview.ConfigKey.OverVoltageProtectionActive"><code class="name">var <span class="ident">OverVoltageProtectionActive</span></code></dt>
<dd>
<div class="desc"><p>Status of over voltage protection (OVP).</p></div>
</dd>
<dt id="smuview.ConfigKey.OverVoltageProtectionEnabled"><code class="name">var <span class="ident">OverVoltageProtectionEnabled</span></code></dt>
<dd>
<div class="desc"><p>Enabling/disable over voltage protection (OVP) feature.</p></div>
</dd>
<dt id="smuview.ConfigKey.OverVoltageProtectionThreshold"><code class="name">var <span class="ident">OverVoltageProtectionThreshold</span></code></dt>
<dd>
<div class="desc"><p>Over voltage protection (OVP) threshold.</p></div>
</dd>
<dt id="smuview.ConfigKey.PatternMode"><code class="name">var <span class="ident">PatternMode</span></code></dt>
<dd>
<div class="desc"><p>A pattern (pattern generator mode).</p></div>
</dd>
<dt id="smuview.ConfigKey.PeakDetection"><code class="name">var <span class="ident">PeakDetection</span></code></dt>
<dd>
<div class="desc"><p>Peak detection.</p></div>
</dd>
<dt id="smuview.ConfigKey.PowerOff"><code class="name">var <span class="ident">PowerOff</span></code></dt>
<dd>
<div class="desc"><p>Power off the device.</p></div>
</dd>
<dt id="smuview.ConfigKey.ProbeFactor"><code class="name">var <span class="ident">ProbeFactor</span></code></dt>
<dd>
<div class="desc"><p>The probe factor.</p></div>
</dd>
<dt id="smuview.ConfigKey.RLE"><code class="name">var <span class="ident">RLE</span></code></dt>
<dd>
<div class="desc"><p>Run-length encoding (RLE).</p></div>
</dd>
<dt id="smuview.ConfigKey.Range"><code class="name">var <span class="ident">Range</span></code></dt>
<dd>
<div class="desc"><p>The measurement range of a DMM or the output range of a power supply.</p></div>
</dd>
<dt id="smuview.ConfigKey.Regulation"><code class="name">var <span class="ident">Regulation</span></code></dt>
<dd>
<div class="desc"><p>Channel regulation. <code>CV</code>, <code>CC</code> or <code>UR</code>, denoting constant voltage, constant current or unregulated. <code>CC-</code> denotes a power supply in current sink mode (e.g. HP 66xxB). An empty string is used when there is no regulation, e.g. the output is disabled.</p></div>
</dd>
<dt id="smuview.ConfigKey.SampleInterval"><code class="name">var <span class="ident">SampleInterval</span></code></dt>
<dd>
<div class="desc"><p>The sample interval, in ms.</p></div>
</dd>
<dt id="smuview.ConfigKey.Samplerate"><code class="name">var <span class="ident">Samplerate</span></code></dt>
<dd>
<div class="desc"><p>The samplerate, in Hz.</p></div>
</dd>
<dt id="smuview.ConfigKey.SessionFile"><code class="name">var <span class="ident">SessionFile</span></code></dt>
<dd>
<div class="desc"><p>Session filename.</p></div>
</dd>
<dt id="smuview.ConfigKey.SplMeasurementRange"><code class="name">var <span class="ident">SplMeasurementRange</span></code></dt>
<dd>
<div class="desc"><p>Sound pressure level measurement range.</p></div>
</dd>
<dt id="smuview.ConfigKey.SplWeightFreq"><code class="name">var <span class="ident">SplWeightFreq</span></code></dt>
<dd>
<div class="desc"><p>Sound pressure level frequency weighting.</p></div>
</dd>
<dt id="smuview.ConfigKey.SplWeightTime"><code class="name">var <span class="ident">SplWeightTime</span></code></dt>
<dd>
<div class="desc"><p>Sound pressure level time weighting.</p></div>
</dd>
<dt id="smuview.ConfigKey.Swap"><code class="name">var <span class="ident">Swap</span></code></dt>
<dd>
<div class="desc"><p>Swapping channels.</p></div>
</dd>
<dt id="smuview.ConfigKey.TestMode"><code class="name">var <span class="ident">TestMode</span></code></dt>
<dd>
<div class="desc"><p>Self test mode.</p></div>
</dd>
<dt id="smuview.ConfigKey.TimeBase"><code class="name">var <span class="ident">TimeBase</span></code></dt>
<dd>
<div class="desc"><p>Time base.</p></div>
</dd>
<dt id="smuview.ConfigKey.TriggerLevel"><code class="name">var <span class="ident">TriggerLevel</span></code></dt>
<dd>
<div class="desc"><p>Trigger level.</p></div>
</dd>
<dt id="smuview.ConfigKey.TriggerMatch"><code class="name">var <span class="ident">TriggerMatch</span></code></dt>
<dd>
<div class="desc"><p>Trigger matches.</p></div>
</dd>
<dt id="smuview.ConfigKey.TriggerPattern"><code class="name">var <span class="ident">TriggerPattern</span></code></dt>
<dd>
<div class="desc"><p>The pattern for the logic trigger.</p></div>
</dd>
<dt id="smuview.ConfigKey.TriggerSlope"><code class="name">var <span class="ident">TriggerSlope</span></code></dt>
<dd>
<div class="desc"><p>The trigger slope.</p></div>
</dd>
<dt id="smuview.ConfigKey.TriggerSource"><code class="name">var <span class="ident">TriggerSource</span></code></dt>
<dd>
<div class="desc"><p>Trigger source.</p></div>
</dd>
<dt id="smuview.ConfigKey.UnderVoltageConditionActive"><code class="name">var <span class="ident">UnderVoltageConditionActive</span></code></dt>
<dd>
<div class="desc"><p>Status of under voltage condition (UVC).</p></div>
</dd>
<dt id="smuview.ConfigKey.UnderVoltageConditionEnabled"><code class="name">var <span class="ident">UnderVoltageConditionEnabled</span></code></dt>
<dd>
<div class="desc"><p>Enabling/disable under voltage condition (UVC) feature.</p></div>
</dd>
<dt id="smuview.ConfigKey.UnderVoltageConditionThreshold"><code class="name">var <span class="ident">UnderVoltageConditionThreshold</span></code></dt>
<dd>
<div class="desc"><p>Under voltage condition threshold (UVC).</p></div>
</dd>
<dt id="smuview.ConfigKey.Unknown"><code class="name">var <span class="ident">Unknown</span></code></dt>
<dd>
<div class="desc"><p>Unknown config key.</p></div>
</dd>
<dt id="smuview.ConfigKey.VDiv"><code class="name">var <span class="ident">VDiv</span></code></dt>
<dd>
<div class="desc"><p>Volts/div.</p></div>
</dd>
<dt id="smuview.ConfigKey.Voltage"><code class="name">var <span class="ident">Voltage</span></code></dt>
<dd>
<div class="desc"><p>Current voltage.</p></div>
</dd>
<dt id="smuview.ConfigKey.VoltageTarget"><code class="name">var <span class="ident">VoltageTarget</span></code></dt>
<dd>
<div class="desc"><p>Maximum target voltage.</p></div>
</dd>
<dt id="smuview.ConfigKey.VoltageThreshold"><code class="name">var <span class="ident">VoltageThreshold</span></code></dt>
<dd>
<div class="desc"><p>Logic low-high threshold range.</p></div>
</dd>
</dl>
<h3>Static methods</h3>
<dl>
<dt id="smuview.ConfigKey.get_data_type"><code class="name flex">
<span>def <span class="ident">get_data_type</span></span>(<span>config_key: <a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>) ‑> <a title="smuview.DataType" href="#smuview.DataType">DataType</a></span>
</code></dt>
<dd>
<div class="desc"><p>Helper function to get the data type for a config key.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The config key.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code><a title="smuview.DataType" href="#smuview.DataType">DataType</a></code></dt>
<dd>The data type of the config key.</dd>
</dl></div>
</dd>
</dl>
<h3>Instance variables</h3>
<dl>
<dt id="smuview.ConfigKey.name"><code class="name">var <span class="ident">name</span></code></dt>
<dd>
<div class="desc"><p>name(self: handle) -&gt; str</p></div>
</dd>
<dt id="smuview.ConfigKey.value"><code class="name">var <span class="ident">value</span></code></dt>
<dd>
<div class="desc"><p>(arg0: smuview.ConfigKey) -&gt; int</p></div>
</dd>
</dl>
</dd>
<dt id="smuview.Configurable"><code class="flex name class">
<span>class <span class="ident">Configurable</span></span>
<span>(</span><span>*args, **kwargs)</span>
</code></dt>
<dd>
<div class="desc"><p>A configurable for controlling a device with config keys.</p></div>
<h3>Ancestors</h3>
<ul class="hlist">
<li>pybind11_builtins.pybind11_object</li>
</ul>
<h3>Methods</h3>
<dl>
<dt id="smuview.Configurable.get_bool_config"><code class="name flex">
<span>def <span class="ident">get_bool_config</span></span>(<span>self: <a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a>, config_key: <a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>) ‑> bool</span>
</code></dt>
<dd>
<div class="desc"><p>Return a boolean value from the given config key.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The <code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code> to get.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>bool</code></dt>
<dd>The bool value of the config key.</dd>
</dl></div>
</dd>
<dt id="smuview.Configurable.get_double_config"><code class="name flex">
<span>def <span class="ident">get_double_config</span></span>(<span>self: <a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a>, config_key: <a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>) ‑> float</span>
</code></dt>
<dd>
<div class="desc"><p>Return a double value from the given config key.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The <code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code> to get.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>float</code></dt>
<dd>The float value of the config key.</dd>
</dl></div>
</dd>
<dt id="smuview.Configurable.get_int_config"><code class="name flex">
<span>def <span class="ident">get_int_config</span></span>(<span>self: <a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a>, config_key: <a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>) ‑> int</span>
</code></dt>
<dd>
<div class="desc"><p>Return an integer value from the given config key.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The <code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code> to get.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>int</code></dt>
<dd>The int value of the config key.</dd>
</dl></div>
</dd>
<dt id="smuview.Configurable.get_measured_quantity_config"><code class="name flex">
<span>def <span class="ident">get_measured_quantity_config</span></span>(<span>self: <a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a>, config_key: <a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>) ‑> Tuple[<a title="smuview.Quantity" href="#smuview.Quantity">Quantity</a>, Set[<a title="smuview.QuantityFlag" href="#smuview.QuantityFlag">QuantityFlag</a>]]</span>
</code></dt>
<dd>
<div class="desc"><p>Return a measured quantity value from the given config key.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The <code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code> to get.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>Tuple[<a title="smuview.Quantity" href="#smuview.Quantity">Quantity</a>, Set[<a title="smuview.QuantityFlag" href="#smuview.QuantityFlag">QuantityFlag</a>]]</code></dt>
<dd>The measured quantity value of the config key.</dd>
</dl></div>
</dd>
<dt id="smuview.Configurable.get_string_config"><code class="name flex">
<span>def <span class="ident">get_string_config</span></span>(<span>self: <a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a>, config_key: <a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>) ‑> str</span>
</code></dt>
<dd>
<div class="desc"><p>Return a string value from the given config key.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The <code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code> to get.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>The string value of the config key.</dd>
</dl></div>
</dd>
<dt id="smuview.Configurable.get_uint_config"><code class="name flex">
<span>def <span class="ident">get_uint_config</span></span>(<span>self: <a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a>, config_key: <a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>) ‑> int</span>
</code></dt>
<dd>
<div class="desc"><p>Return an unsigned integer value from the given config key.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The <code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code> to get.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>int</code></dt>
<dd>The (unsigned) int value of the config key.</dd>
</dl></div>
</dd>
<dt id="smuview.Configurable.getable_configs"><code class="name flex">
<span>def <span class="ident">getable_configs</span></span>(<span>self: <a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a>) ‑> Set[<a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>]</span>
</code></dt>
<dd>
<div class="desc"><p>Return all getable config keys.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>List[<a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>]</code></dt>
<dd>All getable config keys.</dd>
</dl></div>
</dd>
<dt id="smuview.Configurable.listable_configs"><code class="name flex">
<span>def <span class="ident">listable_configs</span></span>(<span>self: <a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a>) ‑> Set[<a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>]</span>
</code></dt>
<dd>
<div class="desc"><p>Return all listable config keys.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>List[<a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>]</code></dt>
<dd>All listable config keys.</dd>
</dl></div>
</dd>
<dt id="smuview.Configurable.name"><code class="name flex">
<span>def <span class="ident">name</span></span>(<span>self: <a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a>) ‑> str</span>
</code></dt>
<dd>
<div class="desc"><p>Return the name of the configurable.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>The name of the configurable.</dd>
</dl></div>
</dd>
<dt id="smuview.Configurable.set_config"><code class="name flex">
<span>def <span class="ident">set_config</span></span>(<span>*args, **kwargs)</span>
</code></dt>
<dd>
<div class="desc"><p>Overloaded function.</p>
<ol>
<li>set_config(self: smuview.Configurable, config_key: smuview.ConfigKey, value: bool) -&gt; None</li>
</ol>
<p>Set a boolean value to the given config key.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The <code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code> to set.</dd>
<dt><strong><code>value</code></strong> :&ensp;<code>bool</code></dt>
<dd>The bool value to set.</dd>
</dl>
<ol>
<li>set_config(self: smuview.Configurable, config_key: smuview.ConfigKey, value: int) -&gt; None</li>
</ol>
<p>Set an integer value to the given config key.</p>
<h2 id="parameters_1">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The <code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code> to set.</dd>
<dt><strong><code>value</code></strong> :&ensp;<code>int</code></dt>
<dd>The int value to set.</dd>
</dl>
<ol>
<li>set_config(self: smuview.Configurable, config_key: smuview.ConfigKey, value: int) -&gt; None</li>
</ol>
<p>Set an unsigned integer value to the given config key.</p>
<h2 id="parameters_2">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The <code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code> to set.</dd>
<dt><strong><code>value</code></strong> :&ensp;<code>int</code></dt>
<dd>The (unsigned) int value to set.</dd>
</dl>
<ol>
<li>set_config(self: smuview.Configurable, config_key: smuview.ConfigKey, value: float) -&gt; None</li>
</ol>
<p>Set a double value to the given config key.</p>
<h2 id="parameters_3">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The <code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code> to set.</dd>
<dt><strong><code>value</code></strong> :&ensp;<code>float</code></dt>
<dd>The float value to set.</dd>
</dl>
<ol>
<li>set_config(self: smuview.Configurable, config_key: smuview.ConfigKey, value: str) -&gt; None</li>
</ol>
<p>Set a string value to the given config key.</p>
<h2 id="parameters_4">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The <code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code> to set.</dd>
<dt><strong><code>value</code></strong> :&ensp;<code>str</code></dt>
<dd>The string value to set.</dd>
</dl>
<ol>
<li>set_config(self: smuview.Configurable, config_key: smuview.ConfigKey, value: Tuple[smuview.Quantity, Set[smuview.QuantityFlag]]) -&gt; None</li>
</ol>
<p>Set a measured quantity value to the given config key.</p>
<h2 id="parameters_5">Parameters</h2>
<dl>
<dt><strong><code>config_key</code></strong> :&ensp;<code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code></dt>
<dd>The <code><a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a></code> to set.</dd>
<dt><strong><code>value</code></strong> :&ensp;<code>Tuple[<a title="smuview.Quantity" href="#smuview.Quantity">Quantity</a>, Set[<a title="smuview.QuantityFlag" href="#smuview.QuantityFlag">QuantityFlag</a>]]</code></dt>
<dd>The measured quantity value to set.</dd>
</dl></div>
</dd>
<dt id="smuview.Configurable.setable_configs"><code class="name flex">
<span>def <span class="ident">setable_configs</span></span>(<span>self: <a title="smuview.Configurable" href="#smuview.Configurable">Configurable</a>) ‑> Set[<a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>]</span>
</code></dt>
<dd>
<div class="desc"><p>Return all setable config keys.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>List[<a title="smuview.ConfigKey" href="#smuview.ConfigKey">ConfigKey</a>]</code></dt>
<dd>All setable config keys.</dd>
</dl></div>
</dd>
</dl>
</dd>
<dt id="smuview.DataType"><code class="flex name class">
<span>class <span class="ident">DataType</span></span>
<span>(</span><span>...)</span>
</code></dt>
<dd>
<div class="desc"><p>Enum of all available data types.</p>
<p><strong>init</strong>(self: smuview.DataType, value: int) -&gt; None</p></div>
<h3>Ancestors</h3>
<ul class="hlist">
<li>pybind11_builtins.pybind11_object</li>
</ul>
<h3>Class variables</h3>
<dl>
<dt id="smuview.DataType.Bool"><code class="name">var <span class="ident">Bool</span></code></dt>
<dd>
<div class="desc"><p>Bool</p></div>
</dd>
<dt id="smuview.DataType.Double"><code class="name">var <span class="ident">Double</span></code></dt>
<dd>
<div class="desc"><p>Double</p></div>
</dd>
<dt id="smuview.DataType.DoubleRange"><code class="name">var <span class="ident">DoubleRange</span></code></dt>
<dd>
<div class="desc"><p>DoubleRange</p></div>
</dd>
<dt id="smuview.DataType.Int32"><code class="name">var <span class="ident">Int32</span></code></dt>
<dd>
<div class="desc"><p>Int32</p></div>
</dd>
<dt id="smuview.DataType.KeyValue"><code class="name">var <span class="ident">KeyValue</span></code></dt>
<dd>
<div class="desc"><p>KeyValue</p></div>
</dd>
<dt id="smuview.DataType.MQ"><code class="name">var <span class="ident">MQ</span></code></dt>
<dd>
<div class="desc"><p>MQ</p></div>
</dd>
<dt id="smuview.DataType.RationalPeriod"><code class="name">var <span class="ident">RationalPeriod</span></code></dt>
<dd>
<div class="desc"><p>RationalPeriod</p></div>
</dd>
<dt id="smuview.DataType.RationalVolt"><code class="name">var <span class="ident">RationalVolt</span></code></dt>
<dd>
<div class="desc"><p>RationalVolt</p></div>
</dd>
<dt id="smuview.DataType.String"><code class="name">var <span class="ident">String</span></code></dt>
<dd>
<div class="desc"><p>String</p></div>
</dd>
<dt id="smuview.DataType.UInt64"><code class="name">var <span class="ident">UInt64</span></code></dt>
<dd>
<div class="desc"><p>UInt64</p></div>
</dd>
<dt id="smuview.DataType.UInt64Range"><code class="name">var <span class="ident">UInt64Range</span></code></dt>
<dd>
<div class="desc"><p>UInt64Range</p></div>
</dd>
<dt id="smuview.DataType.Unknown"><code class="name">var <span class="ident">Unknown</span></code></dt>
<dd>
<div class="desc"><p>Unknown</p></div>
</dd>
</dl>
<h3>Instance variables</h3>
<dl>
<dt id="smuview.DataType.name"><code class="name">var <span class="ident">name</span></code></dt>
<dd>
<div class="desc"><p>name(self: handle) -&gt; str</p></div>
</dd>
<dt id="smuview.DataType.value"><code class="name">var <span class="ident">value</span></code></dt>
<dd>
<div class="desc"><p>(arg0: smuview.DataType) -&gt; int</p></div>
</dd>
</dl>
</dd>
<dt id="smuview.DockArea"><code class="flex name class">
<span>class <span class="ident">DockArea</span></span>
<span>(</span><span>...)</span>
</code></dt>
<dd>
<div class="desc"><p>Enum of all possible docking locations for a view.</p>
<p><strong>init</strong>(self: smuview.DockArea, value: int) -&gt; None</p></div>
<h3>Ancestors</h3>
<ul class="hlist">
<li>pybind11_builtins.pybind11_object</li>
</ul>
<h3>Class variables</h3>
<dl>
<dt id="smuview.DockArea.BottomDockArea"><code class="name">var <span class="ident">BottomDockArea</span></code></dt>
<dd>
<div class="desc"><p>Dock to the bottom dock area.</p></div>
</dd>
<dt id="smuview.DockArea.LeftDocktArea"><code class="name">var <span class="ident">LeftDocktArea</span></code></dt>
<dd>
<div class="desc"><p>Dock to the left dock area.</p></div>
</dd>
<dt id="smuview.DockArea.RightDockArea"><code class="name">var <span class="ident">RightDockArea</span></code></dt>
<dd>
<div class="desc"><p>Dock to the right dock area.</p></div>
</dd>
<dt id="smuview.DockArea.TopDockArea"><code class="name">var <span class="ident">TopDockArea</span></code></dt>
<dd>
<div class="desc"><p>Dock to the top dock area.</p></div>
</dd>
</dl>
<h3>Instance variables</h3>
<dl>
<dt id="smuview.DockArea.name"><code class="name">var <span class="ident">name</span></code></dt>
<dd>
<div class="desc"><p>name(self: handle) -&gt; str</p></div>
</dd>
<dt id="smuview.DockArea.value"><code class="name">var <span class="ident">value</span></code></dt>
<dd>
<div class="desc"><p>(arg0: smuview.DockArea) -&gt; int</p></
Download .txt
gitextract_dlxxxgec/

├── .clang-tidy
├── .editorconfig
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   └── bug_report.md
│   └── workflows/
│       ├── build.yml
│       └── documentation.yml
├── .gitignore
├── CMake/
│   ├── CheckSigrokFeatures.cmake
│   ├── FindQwt.cmake
│   ├── GetGitRevisionDescription.cmake
│   ├── GetGitRevisionDescription.cmake.in
│   └── memaccess.cmake
├── CMakeLists.txt
├── COPYING
├── Doxyfile
├── INSTALL
├── NEWS
├── README
├── TODO
├── appimagecraft.yml
├── config.h.in
├── contrib/
│   ├── config_version.sh.in
│   ├── org.sigrok.SmuView.appdata.xml
│   ├── org.sigrok.SmuView.desktop
│   ├── smuview.spec
│   └── smuview_cross.nsi.in
├── cppcheck-suppressions.xml
├── doc/
│   ├── smuview.1
│   ├── smuview_python_bindings.html
│   └── smuview_python_bindings.txt
├── extdef.h
├── external/
│   ├── .clang-tidy
│   ├── QCodeEditor/
│   │   ├── .clang-format
│   │   ├── .editorconfig
│   │   ├── .gitignore
│   │   ├── CMakeLists.txt
│   │   ├── LICENSE.MIT
│   │   ├── README.md
│   │   ├── include/
│   │   │   ├── QCXXHighlighter
│   │   │   ├── QCodeEditor
│   │   │   ├── QGLSLCompleter
│   │   │   ├── QGLSLHighlighter
│   │   │   ├── QHighlightBlockRule
│   │   │   ├── QHighlightRule
│   │   │   ├── QJSHighlighter
│   │   │   ├── QJSONHighlighter
│   │   │   ├── QJavaHighlighter
│   │   │   ├── QLanguage
│   │   │   ├── QLineNumberArea
│   │   │   ├── QLuaCompleter
│   │   │   ├── QLuaHighlighter
│   │   │   ├── QPythonCompleter
│   │   │   ├── QPythonHighlighter
│   │   │   ├── QStyleSyntaxHighlighter
│   │   │   ├── QSyntaxStyle
│   │   │   ├── QXMLHighlighter
│   │   │   └── internal/
│   │   │       ├── QCXXHighlighter.hpp
│   │   │       ├── QCodeEditor.hpp
│   │   │       ├── QGLSLCompleter.hpp
│   │   │       ├── QGLSLHighlighter.hpp
│   │   │       ├── QHighlightBlockRule.hpp
│   │   │       ├── QHighlightRule.hpp
│   │   │       ├── QJSHighlighter.hpp
│   │   │       ├── QJSONHighlighter.hpp
│   │   │       ├── QJavaHighlighter.hpp
│   │   │       ├── QLanguage.hpp
│   │   │       ├── QLineNumberArea.hpp
│   │   │       ├── QLuaCompleter.hpp
│   │   │       ├── QLuaHighlighter.hpp
│   │   │       ├── QPythonCompleter.hpp
│   │   │       ├── QPythonHighlighter.hpp
│   │   │       ├── QStyleSyntaxHighlighter.hpp
│   │   │       ├── QSyntaxStyle.hpp
│   │   │       └── QXMLHighlighter.hpp
│   │   ├── resources/
│   │   │   ├── default_style.xml
│   │   │   ├── languages/
│   │   │   │   ├── cpp.xml
│   │   │   │   ├── glsl.xml
│   │   │   │   ├── java.xml
│   │   │   │   ├── js.xml
│   │   │   │   ├── lua.xml
│   │   │   │   └── python.xml
│   │   │   └── qcodeeditor_resources.qrc
│   │   └── src/
│   │       └── internal/
│   │           ├── QCXXHighlighter.cpp
│   │           ├── QCodeEditor.cpp
│   │           ├── QGLSLCompleter.cpp
│   │           ├── QGLSLHighlighter.cpp
│   │           ├── QJSHighlighter.cpp
│   │           ├── QJSONHighlighter.cpp
│   │           ├── QJavaHighlighter.cpp
│   │           ├── QLanguage.cpp
│   │           ├── QLineNumberArea.cpp
│   │           ├── QLuaCompleter.cpp
│   │           ├── QLuaHighlighter.cpp
│   │           ├── QPythonCompleter.cpp
│   │           ├── QPythonHighlighter.cpp
│   │           ├── QStyleSyntaxHighlighter.cpp
│   │           ├── QSyntaxStyle.cpp
│   │           └── QXMLHighlighter.cpp
│   ├── QtFindReplaceDialog/
│   │   ├── .editorconfig
│   │   ├── .gitignore
│   │   ├── COPYING
│   │   ├── README.txt
│   │   ├── TODO
│   │   ├── dialogs/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── dialogs.pro
│   │   │   ├── finddialog.cpp
│   │   │   ├── finddialog.h
│   │   │   ├── findform.cpp
│   │   │   ├── findform.h
│   │   │   ├── findreplace_global.h
│   │   │   ├── findreplacedialog.cpp
│   │   │   ├── findreplacedialog.h
│   │   │   ├── findreplacedialog.ui
│   │   │   ├── findreplaceform.cpp
│   │   │   ├── findreplaceform.h
│   │   │   └── findreplaceform.ui
│   │   ├── doc/
│   │   │   ├── .gitignore
│   │   │   ├── Doxyfile
│   │   │   ├── README.txt
│   │   │   ├── doc.pro
│   │   │   └── qtfindreplacedialog.dox
│   │   ├── make-dist.sh
│   │   ├── qtfindreplacedialog.pri
│   │   └── qtfindreplacedialog.pro
│   ├── pybind11_2.11_dev1/
│   │   ├── .appveyor.yml
│   │   ├── .clang-format
│   │   ├── .clang-tidy
│   │   ├── .cmake-format.yaml
│   │   ├── .codespell-ignore-lines
│   │   ├── .gitignore
│   │   ├── .readthedocs.yml
│   │   ├── CMakeLists.txt
│   │   ├── LICENSE
│   │   ├── MANIFEST.in
│   │   ├── README.rst
│   │   ├── include/
│   │   │   └── pybind11/
│   │   │       ├── attr.h
│   │   │       ├── buffer_info.h
│   │   │       ├── cast.h
│   │   │       ├── chrono.h
│   │   │       ├── common.h
│   │   │       ├── complex.h
│   │   │       ├── detail/
│   │   │       │   ├── class.h
│   │   │       │   ├── common.h
│   │   │       │   ├── descr.h
│   │   │       │   ├── init.h
│   │   │       │   ├── internals.h
│   │   │       │   ├── type_caster_base.h
│   │   │       │   └── typeid.h
│   │   │       ├── eigen/
│   │   │       │   ├── matrix.h
│   │   │       │   └── tensor.h
│   │   │       ├── eigen.h
│   │   │       ├── embed.h
│   │   │       ├── eval.h
│   │   │       ├── functional.h
│   │   │       ├── gil.h
│   │   │       ├── iostream.h
│   │   │       ├── numpy.h
│   │   │       ├── operators.h
│   │   │       ├── options.h
│   │   │       ├── pybind11.h
│   │   │       ├── pytypes.h
│   │   │       ├── stl/
│   │   │       │   └── filesystem.h
│   │   │       ├── stl.h
│   │   │       └── stl_bind.h
│   │   ├── noxfile.py
│   │   ├── pybind11/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── _version.py
│   │   │   ├── commands.py
│   │   │   ├── py.typed
│   │   │   └── setup_helpers.py
│   │   ├── pyproject.toml
│   │   ├── setup.cfg
│   │   ├── setup.py
│   │   ├── tests/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── catch/
│   │   │   │   └── catch.hpp
│   │   │   ├── conftest.py
│   │   │   ├── constructor_stats.h
│   │   │   ├── cross_module_gil_utils.cpp
│   │   │   ├── cross_module_interleaved_error_already_set.cpp
│   │   │   ├── env.py
│   │   │   ├── extra_python_package/
│   │   │   │   ├── pytest.ini
│   │   │   │   └── test_files.py
│   │   │   ├── extra_setuptools/
│   │   │   │   ├── pytest.ini
│   │   │   │   └── test_setuphelper.py
│   │   │   ├── local_bindings.h
│   │   │   ├── object.h
│   │   │   ├── pybind11_cross_module_tests.cpp
│   │   │   ├── pybind11_tests.cpp
│   │   │   ├── pybind11_tests.h
│   │   │   ├── pytest.ini
│   │   │   ├── requirements.txt
│   │   │   ├── test_async.cpp
│   │   │   ├── test_async.py
│   │   │   ├── test_buffers.cpp
│   │   │   ├── test_buffers.py
│   │   │   ├── test_builtin_casters.cpp
│   │   │   ├── test_builtin_casters.py
│   │   │   ├── test_call_policies.cpp
│   │   │   ├── test_call_policies.py
│   │   │   ├── test_callbacks.cpp
│   │   │   ├── test_callbacks.py
│   │   │   ├── test_chrono.cpp
│   │   │   ├── test_chrono.py
│   │   │   ├── test_class.cpp
│   │   │   ├── test_class.py
│   │   │   ├── test_cmake_build/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── embed.cpp
│   │   │   │   ├── installed_embed/
│   │   │   │   │   └── CMakeLists.txt
│   │   │   │   ├── installed_function/
│   │   │   │   │   └── CMakeLists.txt
│   │   │   │   ├── installed_target/
│   │   │   │   │   └── CMakeLists.txt
│   │   │   │   ├── main.cpp
│   │   │   │   ├── subdirectory_embed/
│   │   │   │   │   └── CMakeLists.txt
│   │   │   │   ├── subdirectory_function/
│   │   │   │   │   └── CMakeLists.txt
│   │   │   │   ├── subdirectory_target/
│   │   │   │   │   └── CMakeLists.txt
│   │   │   │   └── test.py
│   │   │   ├── test_const_name.cpp
│   │   │   ├── test_const_name.py
│   │   │   ├── test_constants_and_functions.cpp
│   │   │   ├── test_constants_and_functions.py
│   │   │   ├── test_copy_move.cpp
│   │   │   ├── test_copy_move.py
│   │   │   ├── test_custom_type_casters.cpp
│   │   │   ├── test_custom_type_casters.py
│   │   │   ├── test_custom_type_setup.cpp
│   │   │   ├── test_custom_type_setup.py
│   │   │   ├── test_docstring_options.cpp
│   │   │   ├── test_docstring_options.py
│   │   │   ├── test_eigen_matrix.cpp
│   │   │   ├── test_eigen_matrix.py
│   │   │   ├── test_eigen_tensor.cpp
│   │   │   ├── test_eigen_tensor.inl
│   │   │   ├── test_eigen_tensor.py
│   │   │   ├── test_eigen_tensor_avoid_stl_array.cpp
│   │   │   ├── test_embed/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── catch.cpp
│   │   │   │   ├── external_module.cpp
│   │   │   │   ├── test_interpreter.cpp
│   │   │   │   ├── test_interpreter.py
│   │   │   │   └── test_trampoline.py
│   │   │   ├── test_enum.cpp
│   │   │   ├── test_enum.py
│   │   │   ├── test_eval.cpp
│   │   │   ├── test_eval.py
│   │   │   ├── test_eval_call.py
│   │   │   ├── test_exceptions.cpp
│   │   │   ├── test_exceptions.h
│   │   │   ├── test_exceptions.py
│   │   │   ├── test_factory_constructors.cpp
│   │   │   ├── test_factory_constructors.py
│   │   │   ├── test_gil_scoped.cpp
│   │   │   ├── test_gil_scoped.py
│   │   │   ├── test_iostream.cpp
│   │   │   ├── test_iostream.py
│   │   │   ├── test_kwargs_and_defaults.cpp
│   │   │   ├── test_kwargs_and_defaults.py
│   │   │   ├── test_local_bindings.cpp
│   │   │   ├── test_local_bindings.py
│   │   │   ├── test_methods_and_attributes.cpp
│   │   │   ├── test_methods_and_attributes.py
│   │   │   ├── test_modules.cpp
│   │   │   ├── test_modules.py
│   │   │   ├── test_multiple_inheritance.cpp
│   │   │   ├── test_multiple_inheritance.py
│   │   │   ├── test_numpy_array.cpp
│   │   │   ├── test_numpy_array.py
│   │   │   ├── test_numpy_dtypes.cpp
│   │   │   ├── test_numpy_dtypes.py
│   │   │   ├── test_numpy_vectorize.cpp
│   │   │   ├── test_numpy_vectorize.py
│   │   │   ├── test_opaque_types.cpp
│   │   │   ├── test_opaque_types.py
│   │   │   ├── test_operator_overloading.cpp
│   │   │   ├── test_operator_overloading.py
│   │   │   ├── test_pickling.cpp
│   │   │   ├── test_pickling.py
│   │   │   ├── test_pytypes.cpp
│   │   │   ├── test_pytypes.py
│   │   │   ├── test_sequences_and_iterators.cpp
│   │   │   ├── test_sequences_and_iterators.py
│   │   │   ├── test_smart_ptr.cpp
│   │   │   ├── test_smart_ptr.py
│   │   │   ├── test_stl.cpp
│   │   │   ├── test_stl.py
│   │   │   ├── test_stl_binders.cpp
│   │   │   ├── test_stl_binders.py
│   │   │   ├── test_tagbased_polymorphic.cpp
│   │   │   ├── test_tagbased_polymorphic.py
│   │   │   ├── test_thread.cpp
│   │   │   ├── test_thread.py
│   │   │   ├── test_union.cpp
│   │   │   ├── test_union.py
│   │   │   ├── test_virtual_functions.cpp
│   │   │   ├── test_virtual_functions.py
│   │   │   ├── valgrind-numpy-scipy.supp
│   │   │   └── valgrind-python.supp
│   │   └── tools/
│   │       ├── FindCatch.cmake
│   │       ├── FindEigen3.cmake
│   │       ├── FindPythonLibsNew.cmake
│   │       ├── JoinPaths.cmake
│   │       ├── check-style.sh
│   │       ├── cmake_uninstall.cmake.in
│   │       ├── codespell_ignore_lines_from_errors.py
│   │       ├── libsize.py
│   │       ├── make_changelog.py
│   │       ├── pybind11.pc.in
│   │       ├── pybind11Common.cmake
│   │       ├── pybind11Config.cmake.in
│   │       ├── pybind11NewTools.cmake
│   │       ├── pybind11Tools.cmake
│   │       ├── pyproject.toml
│   │       ├── setup_global.py.in
│   │       └── setup_main.py.in
│   └── pybind11_2.9.2/
│       ├── .appveyor.yml
│       ├── .clang-format
│       ├── .clang-tidy
│       ├── .cmake-format.yaml
│       ├── .gitignore
│       ├── .readthedocs.yml
│       ├── CMakeLists.txt
│       ├── LICENSE
│       ├── MANIFEST.in
│       ├── README.rst
│       ├── include/
│       │   └── pybind11/
│       │       ├── attr.h
│       │       ├── buffer_info.h
│       │       ├── cast.h
│       │       ├── chrono.h
│       │       ├── common.h
│       │       ├── complex.h
│       │       ├── detail/
│       │       │   ├── class.h
│       │       │   ├── common.h
│       │       │   ├── descr.h
│       │       │   ├── init.h
│       │       │   ├── internals.h
│       │       │   ├── type_caster_base.h
│       │       │   └── typeid.h
│       │       ├── eigen.h
│       │       ├── embed.h
│       │       ├── eval.h
│       │       ├── functional.h
│       │       ├── gil.h
│       │       ├── iostream.h
│       │       ├── numpy.h
│       │       ├── operators.h
│       │       ├── options.h
│       │       ├── pybind11.h
│       │       ├── pytypes.h
│       │       ├── stl/
│       │       │   └── filesystem.h
│       │       ├── stl.h
│       │       └── stl_bind.h
│       ├── noxfile.py
│       ├── pybind11/
│       │   ├── __init__.py
│       │   ├── __main__.py
│       │   ├── _version.py
│       │   ├── _version.pyi
│       │   ├── commands.py
│       │   ├── py.typed
│       │   ├── setup_helpers.py
│       │   └── setup_helpers.pyi
│       ├── pyproject.toml
│       ├── setup.cfg
│       ├── setup.py
│       ├── tests/
│       │   ├── CMakeLists.txt
│       │   ├── catch/
│       │   │   └── catch.hpp
│       │   ├── conftest.py
│       │   ├── constructor_stats.h
│       │   ├── cross_module_gil_utils.cpp
│       │   ├── env.py
│       │   ├── extra_python_package/
│       │   │   ├── pytest.ini
│       │   │   └── test_files.py
│       │   ├── extra_setuptools/
│       │   │   ├── pytest.ini
│       │   │   └── test_setuphelper.py
│       │   ├── local_bindings.h
│       │   ├── object.h
│       │   ├── pybind11_cross_module_tests.cpp
│       │   ├── pybind11_tests.cpp
│       │   ├── pybind11_tests.h
│       │   ├── pytest.ini
│       │   ├── requirements.txt
│       │   ├── test_async.cpp
│       │   ├── test_async.py
│       │   ├── test_buffers.cpp
│       │   ├── test_buffers.py
│       │   ├── test_builtin_casters.cpp
│       │   ├── test_builtin_casters.py
│       │   ├── test_call_policies.cpp
│       │   ├── test_call_policies.py
│       │   ├── test_callbacks.cpp
│       │   ├── test_callbacks.py
│       │   ├── test_chrono.cpp
│       │   ├── test_chrono.py
│       │   ├── test_class.cpp
│       │   ├── test_class.py
│       │   ├── test_cmake_build/
│       │   │   ├── CMakeLists.txt
│       │   │   ├── embed.cpp
│       │   │   ├── installed_embed/
│       │   │   │   └── CMakeLists.txt
│       │   │   ├── installed_function/
│       │   │   │   └── CMakeLists.txt
│       │   │   ├── installed_target/
│       │   │   │   └── CMakeLists.txt
│       │   │   ├── main.cpp
│       │   │   ├── subdirectory_embed/
│       │   │   │   └── CMakeLists.txt
│       │   │   ├── subdirectory_function/
│       │   │   │   └── CMakeLists.txt
│       │   │   ├── subdirectory_target/
│       │   │   │   └── CMakeLists.txt
│       │   │   └── test.py
│       │   ├── test_const_name.cpp
│       │   ├── test_const_name.py
│       │   ├── test_constants_and_functions.cpp
│       │   ├── test_constants_and_functions.py
│       │   ├── test_copy_move.cpp
│       │   ├── test_copy_move.py
│       │   ├── test_custom_type_casters.cpp
│       │   ├── test_custom_type_casters.py
│       │   ├── test_custom_type_setup.cpp
│       │   ├── test_custom_type_setup.py
│       │   ├── test_docstring_options.cpp
│       │   ├── test_docstring_options.py
│       │   ├── test_eigen.cpp
│       │   ├── test_eigen.py
│       │   ├── test_embed/
│       │   │   ├── CMakeLists.txt
│       │   │   ├── catch.cpp
│       │   │   ├── external_module.cpp
│       │   │   ├── test_interpreter.cpp
│       │   │   ├── test_interpreter.py
│       │   │   └── test_trampoline.py
│       │   ├── test_enum.cpp
│       │   ├── test_enum.py
│       │   ├── test_eval.cpp
│       │   ├── test_eval.py
│       │   ├── test_eval_call.py
│       │   ├── test_exceptions.cpp
│       │   ├── test_exceptions.h
│       │   ├── test_exceptions.py
│       │   ├── test_factory_constructors.cpp
│       │   ├── test_factory_constructors.py
│       │   ├── test_gil_scoped.cpp
│       │   ├── test_gil_scoped.py
│       │   ├── test_iostream.cpp
│       │   ├── test_iostream.py
│       │   ├── test_kwargs_and_defaults.cpp
│       │   ├── test_kwargs_and_defaults.py
│       │   ├── test_local_bindings.cpp
│       │   ├── test_local_bindings.py
│       │   ├── test_methods_and_attributes.cpp
│       │   ├── test_methods_and_attributes.py
│       │   ├── test_modules.cpp
│       │   ├── test_modules.py
│       │   ├── test_multiple_inheritance.cpp
│       │   ├── test_multiple_inheritance.py
│       │   ├── test_numpy_array.cpp
│       │   ├── test_numpy_array.py
│       │   ├── test_numpy_dtypes.cpp
│       │   ├── test_numpy_dtypes.py
│       │   ├── test_numpy_vectorize.cpp
│       │   ├── test_numpy_vectorize.py
│       │   ├── test_opaque_types.cpp
│       │   ├── test_opaque_types.py
│       │   ├── test_operator_overloading.cpp
│       │   ├── test_operator_overloading.py
│       │   ├── test_pickling.cpp
│       │   ├── test_pickling.py
│       │   ├── test_pytypes.cpp
│       │   ├── test_pytypes.py
│       │   ├── test_sequences_and_iterators.cpp
│       │   ├── test_sequences_and_iterators.py
│       │   ├── test_smart_ptr.cpp
│       │   ├── test_smart_ptr.py
│       │   ├── test_stl.cpp
│       │   ├── test_stl.py
│       │   ├── test_stl_binders.cpp
│       │   ├── test_stl_binders.py
│       │   ├── test_tagbased_polymorphic.cpp
│       │   ├── test_tagbased_polymorphic.py
│       │   ├── test_thread.cpp
│       │   ├── test_thread.py
│       │   ├── test_union.cpp
│       │   ├── test_union.py
│       │   ├── test_virtual_functions.cpp
│       │   ├── test_virtual_functions.py
│       │   ├── valgrind-numpy-scipy.supp
│       │   └── valgrind-python.supp
│       └── tools/
│           ├── FindCatch.cmake
│           ├── FindEigen3.cmake
│           ├── FindPythonLibsNew.cmake
│           ├── check-style.sh
│           ├── cmake_uninstall.cmake.in
│           ├── libsize.py
│           ├── make_changelog.py
│           ├── pybind11Common.cmake
│           ├── pybind11Config.cmake.in
│           ├── pybind11NewTools.cmake
│           ├── pybind11Tools.cmake
│           ├── pyproject.toml
│           ├── setup_global.py.in
│           └── setup_main.py.in
├── fonts/
│   └── LICENSE
├── main.cpp
├── manual/
│   ├── CMakeLists.txt
│   ├── asciidoctor-stylesheet-factory/
│   │   ├── LICENSE
│   │   └── stylesheets/
│   │       └── readthedocs.css
│   ├── cli.adoc
│   ├── data_processing.adoc
│   ├── data_tables/
│   │   ├── combine.csv
│   │   ├── combine_30ms.csv
│   │   ├── combine_absolute.csv
│   │   └── simple.csv
│   ├── data_visualisation.adoc
│   ├── device_control.adoc
│   ├── devices.adoc
│   ├── images/
│   │   ├── AddMathChannelDialog.xcf
│   │   ├── ConnectDeviceDialog.xcf
│   │   ├── DataTableView.xcf
│   │   ├── PowerPanelView.xcf
│   │   ├── SaveSignalsDialog.xcf
│   │   ├── SequenceOutputView.xcf
│   │   ├── SmuScript.xcf
│   │   ├── SourceControlView.xcf
│   │   ├── TimePlotView_2.xcf
│   │   ├── UserDevice.xcf
│   │   ├── ValuePanelView.xcf
│   │   ├── Welcome.xcf
│   │   └── numbers/
│   │       ├── 1.xcf
│   │       ├── 10.xcf
│   │       ├── 11.xcf
│   │       ├── 12.xcf
│   │       ├── 13.xcf
│   │       ├── 14.xcf
│   │       ├── 15.xcf
│   │       ├── 16.xcf
│   │       ├── 17.xcf
│   │       ├── 18.xcf
│   │       ├── 19.xcf
│   │       ├── 2.xcf
│   │       ├── 20.xcf
│   │       ├── 3.xcf
│   │       ├── 4.xcf
│   │       ├── 5.xcf
│   │       ├── 6.xcf
│   │       ├── 7.xcf
│   │       ├── 8.xcf
│   │       └── 9.xcf
│   ├── installation.adoc
│   ├── license.adoc
│   ├── manual.adoc
│   ├── overview.adoc
│   └── smuscript.adoc
├── signalhandler.cpp
├── signalhandler.hpp
├── smuscript/
│   ├── example_characterize_battery.py
│   ├── example_characterize_psu.py
│   ├── example_characterize_psu_2.py
│   ├── example_device_properties.py
│   ├── example_multiplexer.py
│   ├── example_ui.py
│   ├── example_user_channel.py
│   ├── generate_documentation.py
│   ├── python_version.py
│   ├── test_combine_signals.py
│   ├── test_fixed_channel.py
│   └── test_rnd_crashes.py
├── smuview.kdev4
├── smuview.qrc
├── smuviewico.rc
├── src/
│   ├── application.cpp
│   ├── application.hpp
│   ├── channels/
│   │   ├── addscchannel.cpp
│   │   ├── addscchannel.hpp
│   │   ├── basechannel.cpp
│   │   ├── basechannel.hpp
│   │   ├── dividechannel.cpp
│   │   ├── dividechannel.hpp
│   │   ├── hardwarechannel.cpp
│   │   ├── hardwarechannel.hpp
│   │   ├── integratechannel.cpp
│   │   ├── integratechannel.hpp
│   │   ├── mathchannel.cpp
│   │   ├── mathchannel.hpp
│   │   ├── movingavgchannel.cpp
│   │   ├── movingavgchannel.hpp
│   │   ├── multiplysfchannel.cpp
│   │   ├── multiplysfchannel.hpp
│   │   ├── multiplysschannel.cpp
│   │   ├── multiplysschannel.hpp
│   │   ├── userchannel.cpp
│   │   └── userchannel.hpp
│   ├── data/
│   │   ├── analogbasesignal.cpp
│   │   ├── analogbasesignal.hpp
│   │   ├── analogsamplesignal.cpp
│   │   ├── analogsamplesignal.hpp
│   │   ├── analogtimesignal.cpp
│   │   ├── analogtimesignal.hpp
│   │   ├── basesignal.cpp
│   │   ├── basesignal.hpp
│   │   ├── datautil.cpp
│   │   ├── datautil.hpp
│   │   └── properties/
│   │       ├── baseproperty.cpp
│   │       ├── baseproperty.hpp
│   │       ├── boolproperty.cpp
│   │       ├── boolproperty.hpp
│   │       ├── doubleproperty.cpp
│   │       ├── doubleproperty.hpp
│   │       ├── doublerangeproperty.cpp
│   │       ├── doublerangeproperty.hpp
│   │       ├── int32property.cpp
│   │       ├── int32property.hpp
│   │       ├── measuredquantityproperty.cpp
│   │       ├── measuredquantityproperty.hpp
│   │       ├── rationalproperty.cpp
│   │       ├── rationalproperty.hpp
│   │       ├── stringproperty.cpp
│   │       ├── stringproperty.hpp
│   │       ├── uint64property.cpp
│   │       ├── uint64property.hpp
│   │       ├── uint64rangeproperty.cpp
│   │       └── uint64rangeproperty.hpp
│   ├── devicemanager.cpp
│   ├── devicemanager.hpp
│   ├── devices/
│   │   ├── basedevice.cpp
│   │   ├── basedevice.hpp
│   │   ├── configurable.cpp
│   │   ├── configurable.hpp
│   │   ├── deviceutil.cpp
│   │   ├── deviceutil.hpp
│   │   ├── hardwaredevice.cpp
│   │   ├── hardwaredevice.hpp
│   │   ├── measurementdevice.cpp
│   │   ├── measurementdevice.hpp
│   │   ├── oscilloscopedevice.cpp
│   │   ├── oscilloscopedevice.hpp
│   │   ├── sourcesinkdevice.cpp
│   │   ├── sourcesinkdevice.hpp
│   │   ├── userdevice.cpp
│   │   └── userdevice.hpp
│   ├── mainwindow.cpp
│   ├── mainwindow.hpp
│   ├── python/
│   │   ├── bindings.cpp
│   │   ├── bindings.hpp
│   │   ├── pystreambuf.cpp
│   │   ├── pystreambuf.hpp
│   │   ├── pystreamredirect.hpp
│   │   ├── smuscriptrunner.cpp
│   │   ├── smuscriptrunner.hpp
│   │   ├── uihelper.cpp
│   │   ├── uihelper.hpp
│   │   ├── uiproxy.cpp
│   │   └── uiproxy.hpp
│   ├── session.cpp
│   ├── session.hpp
│   ├── settingsmanager.cpp
│   ├── settingsmanager.hpp
│   ├── ui/
│   │   ├── data/
│   │   │   ├── quantitycombobox.cpp
│   │   │   ├── quantitycombobox.hpp
│   │   │   ├── quantityflagslist.cpp
│   │   │   ├── quantityflagslist.hpp
│   │   │   ├── unitcombobox.cpp
│   │   │   └── unitcombobox.hpp
│   │   ├── datatypes/
│   │   │   ├── basewidget.cpp
│   │   │   ├── basewidget.hpp
│   │   │   ├── boolbutton.cpp
│   │   │   ├── boolbutton.hpp
│   │   │   ├── boolcheckbox.cpp
│   │   │   ├── boolcheckbox.hpp
│   │   │   ├── boolled.cpp
│   │   │   ├── boolled.hpp
│   │   │   ├── datatypehelper.cpp
│   │   │   ├── datatypehelper.hpp
│   │   │   ├── doublecontrol.cpp
│   │   │   ├── doublecontrol.hpp
│   │   │   ├── doubledisplay.cpp
│   │   │   ├── doubledisplay.hpp
│   │   │   ├── doubleknob.cpp
│   │   │   ├── doubleknob.hpp
│   │   │   ├── doublerangecombobox.cpp
│   │   │   ├── doublerangecombobox.hpp
│   │   │   ├── doubleslider.cpp
│   │   │   ├── doubleslider.hpp
│   │   │   ├── doublesmallcontrol.cpp
│   │   │   ├── doublesmallcontrol.hpp
│   │   │   ├── doublespinbox.cpp
│   │   │   ├── doublespinbox.hpp
│   │   │   ├── int32spinbox.cpp
│   │   │   ├── int32spinbox.hpp
│   │   │   ├── measuredquantitycombobox.cpp
│   │   │   ├── measuredquantitycombobox.hpp
│   │   │   ├── rationalcombobox.cpp
│   │   │   ├── rationalcombobox.hpp
│   │   │   ├── stringcombobox.cpp
│   │   │   ├── stringcombobox.hpp
│   │   │   ├── stringlabel.cpp
│   │   │   ├── stringlabel.hpp
│   │   │   ├── stringled.cpp
│   │   │   ├── stringled.hpp
│   │   │   ├── thresholdcontrol.cpp
│   │   │   ├── thresholdcontrol.hpp
│   │   │   ├── uint64combobox.cpp
│   │   │   ├── uint64combobox.hpp
│   │   │   ├── uint64label.cpp
│   │   │   ├── uint64label.hpp
│   │   │   ├── uint64rangecombobox.cpp
│   │   │   ├── uint64rangecombobox.hpp
│   │   │   ├── uint64spinbox.cpp
│   │   │   └── uint64spinbox.hpp
│   │   ├── devices/
│   │   │   ├── channelcombobox.cpp
│   │   │   ├── channelcombobox.hpp
│   │   │   ├── channelgroupcombobox.cpp
│   │   │   ├── channelgroupcombobox.hpp
│   │   │   ├── configkeycombobox.cpp
│   │   │   ├── configkeycombobox.hpp
│   │   │   ├── configurablecombobox.cpp
│   │   │   ├── configurablecombobox.hpp
│   │   │   ├── devicecombobox.cpp
│   │   │   ├── devicecombobox.hpp
│   │   │   ├── devicetree/
│   │   │   │   ├── devicetreemodel.cpp
│   │   │   │   ├── devicetreemodel.hpp
│   │   │   │   ├── devicetreeview.cpp
│   │   │   │   ├── devicetreeview.hpp
│   │   │   │   ├── treeitem.cpp
│   │   │   │   └── treeitem.hpp
│   │   │   ├── selectconfigurableform.cpp
│   │   │   ├── selectconfigurableform.hpp
│   │   │   ├── selectpropertyform.cpp
│   │   │   ├── selectpropertyform.hpp
│   │   │   ├── selectsignalwidget.cpp
│   │   │   ├── selectsignalwidget.hpp
│   │   │   ├── signalcombobox.cpp
│   │   │   └── signalcombobox.hpp
│   │   ├── dialogs/
│   │   │   ├── aboutdialog.cpp
│   │   │   ├── aboutdialog.hpp
│   │   │   ├── addmathchanneldialog.cpp
│   │   │   ├── addmathchanneldialog.hpp
│   │   │   ├── adduserchanneldialog.cpp
│   │   │   ├── adduserchanneldialog.hpp
│   │   │   ├── addviewdialog.cpp
│   │   │   ├── addviewdialog.hpp
│   │   │   ├── connectdialog.cpp
│   │   │   ├── connectdialog.hpp
│   │   │   ├── generatewaveformdialog.cpp
│   │   │   ├── generatewaveformdialog.hpp
│   │   │   ├── plotconfigdialog.cpp
│   │   │   ├── plotconfigdialog.hpp
│   │   │   ├── plotcurveconfigdialog.cpp
│   │   │   ├── plotcurveconfigdialog.hpp
│   │   │   ├── plotdiffmarkerdialog.cpp
│   │   │   ├── plotdiffmarkerdialog.hpp
│   │   │   ├── selectsignaldialog.cpp
│   │   │   ├── selectsignaldialog.hpp
│   │   │   ├── selectxysignalsdialog.cpp
│   │   │   ├── selectxysignalsdialog.hpp
│   │   │   ├── signalsavedialog.cpp
│   │   │   └── signalsavedialog.hpp
│   │   ├── tabs/
│   │   │   ├── basetab.cpp
│   │   │   ├── basetab.hpp
│   │   │   ├── devicetab.cpp
│   │   │   ├── devicetab.hpp
│   │   │   ├── measurementtab.cpp
│   │   │   ├── measurementtab.hpp
│   │   │   ├── oscilloscopetab.cpp
│   │   │   ├── oscilloscopetab.hpp
│   │   │   ├── smuscripttab.cpp
│   │   │   ├── smuscripttab.hpp
│   │   │   ├── sourcesinktab.cpp
│   │   │   ├── sourcesinktab.hpp
│   │   │   ├── tabdockwidget.cpp
│   │   │   ├── tabdockwidget.hpp
│   │   │   ├── tabhelper.cpp
│   │   │   ├── tabhelper.hpp
│   │   │   ├── usertab.cpp
│   │   │   ├── usertab.hpp
│   │   │   ├── welcometab.cpp
│   │   │   └── welcometab.hpp
│   │   ├── views/
│   │   │   ├── baseplotview.cpp
│   │   │   ├── baseplotview.hpp
│   │   │   ├── baseview.cpp
│   │   │   ├── baseview.hpp
│   │   │   ├── dataview.cpp
│   │   │   ├── dataview.hpp
│   │   │   ├── democontrolview.cpp
│   │   │   ├── democontrolview.hpp
│   │   │   ├── devicesview.cpp
│   │   │   ├── devicesview.hpp
│   │   │   ├── genericcontrolview.cpp
│   │   │   ├── genericcontrolview.hpp
│   │   │   ├── measurementcontrolview.cpp
│   │   │   ├── measurementcontrolview.hpp
│   │   │   ├── powerpanelview.cpp
│   │   │   ├── powerpanelview.hpp
│   │   │   ├── scopehorizontalcontrolview.cpp
│   │   │   ├── scopehorizontalcontrolview.hpp
│   │   │   ├── scopetriggercontrolview.cpp
│   │   │   ├── scopetriggercontrolview.hpp
│   │   │   ├── scopeverticalcontrolview.cpp
│   │   │   ├── scopeverticalcontrolview.hpp
│   │   │   ├── sequenceoutputview.cpp
│   │   │   ├── sequenceoutputview.hpp
│   │   │   ├── smuscriptoutputview.cpp
│   │   │   ├── smuscriptoutputview.hpp
│   │   │   ├── smuscripttreeview.cpp
│   │   │   ├── smuscripttreeview.hpp
│   │   │   ├── smuscriptview.cpp
│   │   │   ├── smuscriptview.hpp
│   │   │   ├── sourcesinkcontrolview.cpp
│   │   │   ├── sourcesinkcontrolview.hpp
│   │   │   ├── timeplotview.cpp
│   │   │   ├── timeplotview.hpp
│   │   │   ├── valuepanelview.cpp
│   │   │   ├── valuepanelview.hpp
│   │   │   ├── viewhelper.cpp
│   │   │   ├── viewhelper.hpp
│   │   │   ├── xyplotview.cpp
│   │   │   └── xyplotview.hpp
│   │   └── widgets/
│   │       ├── clickablelabel.cpp
│   │       ├── clickablelabel.hpp
│   │       ├── colorbutton.cpp
│   │       ├── colorbutton.hpp
│   │       ├── monofontdisplay.cpp
│   │       ├── monofontdisplay.hpp
│   │       ├── plot/
│   │       │   ├── axislocklabel.cpp
│   │       │   ├── axislocklabel.hpp
│   │       │   ├── axispopup.cpp
│   │       │   ├── axispopup.hpp
│   │       │   ├── basecurvedata.cpp
│   │       │   ├── basecurvedata.hpp
│   │       │   ├── curve.cpp
│   │       │   ├── curve.hpp
│   │       │   ├── plot.cpp
│   │       │   ├── plot.hpp
│   │       │   ├── plotmagnifier.cpp
│   │       │   ├── plotmagnifier.hpp
│   │       │   ├── plotscalepicker.cpp
│   │       │   ├── plotscalepicker.hpp
│   │       │   ├── timecurvedata.cpp
│   │       │   ├── timecurvedata.hpp
│   │       │   ├── xycurvedata.cpp
│   │       │   └── xycurvedata.hpp
│   │       ├── popup.cpp
│   │       └── popup.hpp
│   ├── util.cpp
│   └── util.hpp
├── stuff/
│   ├── gstreamer.txt
│   ├── linuxgpib_build.txt
│   ├── loads.txt
│   ├── mxe.txt
│   ├── parameter.txt
│   ├── pps.txt
│   ├── python.txt
│   ├── relays/
│   │   └── relays.txt
│   ├── release.txt
│   ├── scpi-use.txt
│   └── snippets.txt
└── test/
    ├── CMakeLists.txt
    ├── test.cpp
    ├── test.hpp
    └── util.cpp
Copy disabled (too large) Download .txt
Showing preview only (753,974K chars total). Download the full file to get everything.
SYMBOL INDEX (8486 symbols across 572 files)

FILE: external/QCodeEditor/include/internal/QCXXHighlighter.hpp
  class QSyntaxStyle (line 11) | class QSyntaxStyle
  class QCXXHighlighter (line 17) | class QCXXHighlighter : public QStyleSyntaxHighlighter

FILE: external/QCodeEditor/include/internal/QCodeEditor.hpp
  class QCompleter (line 6) | class QCompleter
  class QLineNumberArea (line 7) | class QLineNumberArea
  class QSyntaxStyle (line 8) | class QSyntaxStyle
  class QStyleSyntaxHighlighter (line 9) | class QStyleSyntaxHighlighter
  class QFramedTextAttribute (line 10) | class QFramedTextAttribute
  class QCodeEditor (line 15) | class QCodeEditor : public QTextEdit
    type Parenthesis (line 32) | struct Parenthesis
      method Parenthesis (line 37) | Parenthesis(QChar l = '(', QChar r = ')', bool complete = true, bool...
    method QCodeEditor (line 50) | QCodeEditor(const QCodeEditor &) = delete;
    method QCodeEditor (line 51) | QCodeEditor &operator=(const QCodeEditor &) = delete;
    type SquiggleInformation (line 364) | struct SquiggleInformation
      method SquiggleInformation (line 366) | SquiggleInformation() = default;
      method SquiggleInformation (line 368) | SquiggleInformation(QPair<int, int> start, QPair<int, int> stop, con...

FILE: external/QCodeEditor/include/internal/QGLSLCompleter.hpp
  class QGLSLCompleter (line 10) | class QGLSLCompleter : public QCompleter

FILE: external/QCodeEditor/include/internal/QGLSLHighlighter.hpp
  class QSyntaxStyle (line 11) | class QSyntaxStyle
  class QGLSLHighlighter (line 17) | class QGLSLHighlighter : public QStyleSyntaxHighlighter

FILE: external/QCodeEditor/include/internal/QHighlightBlockRule.hpp
  type QHighlightBlockRule (line 7) | struct QHighlightBlockRule
    method QHighlightBlockRule (line 9) | QHighlightBlockRule() : startPattern(), endPattern(), formatName()
    method QHighlightBlockRule (line 13) | QHighlightBlockRule(QRegularExpression start, QRegularExpression end, ...

FILE: external/QCodeEditor/include/internal/QHighlightRule.hpp
  type QHighlightRule (line 7) | struct QHighlightRule
    method QHighlightRule (line 9) | QHighlightRule() : pattern(), formatName()
    method QHighlightRule (line 13) | QHighlightRule(QRegularExpression p, QString f) : pattern(std::move(p)...

FILE: external/QCodeEditor/include/internal/QJSHighlighter.hpp
  class QSyntaxStyle (line 10) | class QSyntaxStyle
  class QJSHighlighter (line 15) | class QJSHighlighter : public QStyleSyntaxHighlighter

FILE: external/QCodeEditor/include/internal/QJSONHighlighter.hpp
  class QJSONHighlighter (line 14) | class QJSONHighlighter : public QStyleSyntaxHighlighter

FILE: external/QCodeEditor/include/internal/QJavaHighlighter.hpp
  class QSyntaxStyle (line 11) | class QSyntaxStyle
  class QJavaHighlighter (line 16) | class QJavaHighlighter : public QStyleSyntaxHighlighter

FILE: external/QCodeEditor/include/internal/QLanguage.hpp
  class QIODevice (line 8) | class QIODevice
  class QLanguage (line 14) | class QLanguage : public QObject

FILE: external/QCodeEditor/include/internal/QLineNumberArea.hpp
  class QSyntaxStyle (line 8) | class QSyntaxStyle
  class QLineNumberArea (line 13) | class QLineNumberArea : public QWidget
    method QLineNumberArea (line 25) | QLineNumberArea(const QLineNumberArea &) = delete;
    method QLineNumberArea (line 26) | QLineNumberArea &operator=(const QLineNumberArea &) = delete;

FILE: external/QCodeEditor/include/internal/QLuaCompleter.hpp
  class QLuaCompleter (line 10) | class QLuaCompleter : public QCompleter

FILE: external/QCodeEditor/include/internal/QLuaHighlighter.hpp
  class QSyntaxStyle (line 13) | class QSyntaxStyle
  class QLuaHighlighter (line 19) | class QLuaHighlighter : public QStyleSyntaxHighlighter

FILE: external/QCodeEditor/include/internal/QPythonCompleter.hpp
  class QPythonCompleter (line 10) | class QPythonCompleter : public QCompleter

FILE: external/QCodeEditor/include/internal/QPythonHighlighter.hpp
  class QSyntaxStyle (line 12) | class QSyntaxStyle
  class QPythonHighlighter (line 18) | class QPythonHighlighter : public QStyleSyntaxHighlighter

FILE: external/QCodeEditor/include/internal/QStyleSyntaxHighlighter.hpp
  class QSyntaxStyle (line 6) | class QSyntaxStyle
  class QStyleSyntaxHighlighter (line 12) | class QStyleSyntaxHighlighter : public QSyntaxHighlighter
    method QStyleSyntaxHighlighter (line 24) | QStyleSyntaxHighlighter(const QStyleSyntaxHighlighter &) = delete;
    method QStyleSyntaxHighlighter (line 25) | QStyleSyntaxHighlighter &operator=(const QStyleSyntaxHighlighter &) = ...

FILE: external/QCodeEditor/include/internal/QSyntaxStyle.hpp
  class QSyntaxStyle (line 13) | class QSyntaxStyle : public QObject

FILE: external/QCodeEditor/include/internal/QXMLHighlighter.hpp
  class QXMLHighlighter (line 14) | class QXMLHighlighter : public QStyleSyntaxHighlighter

FILE: external/QCodeEditor/src/internal/QCodeEditor.cpp
  function QCompleter (line 987) | QCompleter *QCodeEditor::completer() const
  function QChar (line 1056) | QChar QCodeEditor::charUnderCursor(int offset) const
  function QString (line 1072) | QString QCodeEditor::wordUnderCursor() const

FILE: external/QCodeEditor/src/internal/QLanguage.cpp
  function QStringList (line 64) | QStringList QLanguage::keys()
  function QStringList (line 69) | QStringList QLanguage::names(const QString &key)

FILE: external/QCodeEditor/src/internal/QLineNumberArea.cpp
  function QSize (line 19) | QSize QLineNumberArea::sizeHint() const
  function QSyntaxStyle (line 43) | QSyntaxStyle *QLineNumberArea::syntaxStyle() const

FILE: external/QCodeEditor/src/internal/QStyleSyntaxHighlighter.cpp
  function QSyntaxStyle (line 15) | QSyntaxStyle *QStyleSyntaxHighlighter::syntaxStyle() const
  function QString (line 20) | QString QStyleSyntaxHighlighter::commentLineSequence() const
  function QString (line 30) | QString QStyleSyntaxHighlighter::startCommentBlockSequence() const
  function QString (line 40) | QString QStyleSyntaxHighlighter::endCommentBlockSequence() const

FILE: external/QCodeEditor/src/internal/QSyntaxStyle.cpp
  function QString (line 117) | QString QSyntaxStyle::name() const
  function QTextCharFormat (line 122) | QTextCharFormat QSyntaxStyle::getFormat(const QString &name) const
  function QSyntaxStyle (line 139) | QSyntaxStyle *QSyntaxStyle::defaultStyle()

FILE: external/QtFindReplaceDialog/dialogs/findreplacedialog.h
  function namespace (line 13) | namespace Ui

FILE: external/QtFindReplaceDialog/dialogs/findreplaceform.h
  function namespace (line 14) | namespace Ui
  function findNext (line 104) | void findNext()
  function findPrev (line 112) | void findPrev()

FILE: external/pybind11_2.11_dev1/include/pybind11/attr.h
  function is_method (line 18) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  type is_operator (line 30) | struct is_operator {}
  type is_final (line 33) | struct is_final {}
  type name (line 48) | struct name {
  type op_type (line 168) | enum op_type : int
  type undefined_t (line 169) | struct undefined_t
  type function_record (line 188) | struct function_record {
  type type_record (line 266) | struct type_record {
  function function_call (line 360) | inline function_call::function_call(const function_record &f, handle p) ...
  type is_new_style_constructor (line 366) | struct is_new_style_constructor {}
  function init (line 380) | static void init(const T &, function_record *) {}
  function init (line 381) | static void init(const T &, type_record *) {}
  function precall (line 382) | static void precall(function_call &) {}
  function postcall (line 383) | static void postcall(function_call &, handle) {}
  function name (line 388) | struct process_attribute<name> : process_attribute_default<name> {
  function doc (line 394) | struct process_attribute<doc> : process_attribute_default<doc> {
  type process_attribute (line 400) | struct process_attribute
  function init (line 401) | static void init(const char *d, function_record *r) { r->doc = const_cas...
  function init (line 402) | static void init(const char *d, type_record *r) { r->doc = const_cast<ch...
  type process_attribute (line 405) | struct process_attribute
  function return_value_policy (line 409) | struct process_attribute<return_value_policy> : process_attribute_defaul...
  function sibling (line 416) | struct process_attribute<sibling> : process_attribute_default<sibling> {
  function is_method (line 422) | struct process_attribute<is_method> : process_attribute_default<is_metho...
  function scope (line 431) | struct process_attribute<scope> : process_attribute_default<scope> {
  function is_operator (line 437) | struct process_attribute<is_operator> : process_attribute_default<is_ope...
  function is_new_style_constructor (line 442) | struct process_attribute<is_new_style_constructor>
  function check_kw_only_arg (line 449) | inline void check_kw_only_arg(const arg &a, function_record *r) {
  function append_self_arg_if_needed (line 456) | inline void append_self_arg_if_needed(function_record *r) {
  function arg (line 464) | struct process_attribute<arg> : process_attribute_default<arg> {
  function arg_v (line 475) | struct process_attribute<arg_v> : process_attribute_default<arg_v> {
  function kw_only (line 516) | struct process_attribute<kw_only> : process_attribute_default<kw_only> {
  function pos_only (line 529) | struct process_attribute<pos_only> : process_attribute_default<pos_only> {
  function init (line 545) | static void init(const handle &h, type_record *r) { r->bases.append(h); }
  function init (line 551) | static void init(const base<T> &, type_record *r) { r->add_base(typeid(T...
  function multiple_inheritance (line 556) | struct process_attribute<multiple_inheritance> : process_attribute_defau...
  function dynamic_attr (line 563) | struct process_attribute<dynamic_attr> : process_attribute_default<dynam...
  function custom_type_setup (line 568) | struct process_attribute<custom_type_setup> {
  function is_final (line 575) | struct process_attribute<is_final> : process_attribute_default<is_final> {
  function buffer_protocol (line 580) | struct process_attribute<buffer_protocol> : process_attribute_default<bu...
  function metaclass (line 585) | struct process_attribute<metaclass> : process_attribute_default<metaclas...
  function module_local (line 590) | struct process_attribute<module_local> : process_attribute_default<modul...
  function prepend (line 596) | struct process_attribute<prepend> : process_attribute_default<prepend> {
  function arithmetic (line 602) | struct process_attribute<arithmetic> : process_attribute_default<arithme...
  function init (line 632) | static void init(const Args &...args, function_record *r) {
  function init (line 639) | static void init(const Args &...args, type_record *r) {
  function precall (line 646) | static void precall(function_call &call) {
  function postcall (line 652) | static void postcall(function_call &call, handle fn_ret) {

FILE: external/pybind11_2.11_dev1/include/pybind11/buffer_info.h
  function PYBIND11_NAMESPACE_BEGIN (line 14) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  function std (line 31) | inline std::vector<ssize_t> f_strides(const std::vector<ssize_t> &shape,...
  function buffer_info (line 40) | PYBIND11_NAMESPACE_END(detail)
  function Py_buffer (line 150) | Py_buffer *view() const { return m_view; }
  type private_ctr_tag (line 154) | struct private_ctr_tag {}
  function compare (line 182) | static bool compare(const buffer_info &b) {

FILE: external/pybind11_2.11_dev1/include/pybind11/cast.h
  function PYBIND11_NAMESPACE_BEGIN (line 31) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  function handle (line 68) | static handle
  function index_check (line 136) | auto index_check = [](PyObject *o) { return PyIndex_Check(o); }
  function index_check (line 140) | auto index_check = [](PyObject *o) { return hasattr(o, "__index__"); }
  function handle (line 250) | static handle cast(T, return_value_policy /* policy */, handle /* parent...
  function load (line 264) | bool load(handle h, bool) {
  function handle (line 290) | static handle cast(const void *ptr, return_value_policy /* policy */, ha...
  function else (line 333) | else if (hasattr(src, PYBIND11_BOOL_ATTR)) {
  function handle (line 353) | static handle cast(bool src, return_value_policy /* policy */, handle /*...
  function load (line 381) | bool load(handle src, bool) {
  function handle (line 433) | static handle
  function handle (line 538) | static handle cast(const CharT *src, return_value_policy policy, handle ...
  function handle (line 545) | static handle cast(CharT src, return_value_policy policy, handle parent) {
  function handle (line 647) | handle cast(T *src, return_value_policy policy, handle parent) {
  function load (line 749) | bool load(handle src, bool convert) {
  function handle (line 826) | static handle cast(holder_type &&src, return_value_policy, handle) {
  function bool_ (line 873) | struct handle_type_name<bool_> {
  function bytes (line 877) | struct handle_type_name<bytes> {
  function int_ (line 881) | struct handle_type_name<int_> {
  function iterable (line 885) | struct handle_type_name<iterable> {
  function iterator (line 889) | struct handle_type_name<iterator> {
  function float_ (line 893) | struct handle_type_name<float_> {
  function none (line 897) | struct handle_type_name<none> {
  function args (line 901) | struct handle_type_name<args> {
  function kwargs (line 905) | struct handle_type_name<kwargs> {
  function handle (line 934) | static handle cast(const handle &src, return_value_policy /* policy */, ...
  function return_value_policy (line 995) | static return_value_policy policy(return_value_policy p) { return p; }
  function return_value_policy (line 1002) | static return_value_policy policy(return_value_policy p) {
  function cast (line 1141) | inline void object::cast() && {
  type override_unused (line 1155) | struct override_unused {}
  function cast_error (line 1199) | inline cast_error cast_error_unable_to_convert_call_arg(const std::strin...
  type arg (line 1236) | struct arg {
  function namespace (line 1335) | inline namespace literals {
  type function_record (line 1350) | struct function_record
  type function_call (line 1353) | struct function_call {
  function load_args (line 1402) | bool load_args(function_call &call) { return load_impl_sequence(call, in...
  function tuple (line 1457) | tuple args() && { return std::move(m_args); }
  function object (line 1460) | object call(PyObject *ptr) const {
  function tuple (line 1490) | tuple args() && { return std::move(m_args); }
  function dict (line 1491) | dict kwargs() && { return std::move(m_kwargs); }
  function object (line 1494) | object call(PyObject *ptr) const {
  function process (line 1518) | void process(list &args_list, detail::args_proxy ap) {
  function process (line 1524) | void process(list & /*args_list*/, arg_v a) {
  function process (line 1549) | void process(list & /*args_list*/, detail::kwargs_proxy kp) {
  function nameless_argument_error (line 1565) | [[noreturn]] static void nameless_argument_error() {
  function nameless_argument_error (line 1571) | [[noreturn]] static void nameless_argument_error(const std::string &type) {
  function multiple_values_error (line 1576) | [[noreturn]] static void multiple_values_error() {
  function multiple_values_error (line 1582) | [[noreturn]] static void multiple_values_error(const std::string &name) {
  function args_are_all_positional (line 1596) | bool args_are_all_positional() {

FILE: external/pybind11_2.11_dev1/include/pybind11/chrono.h
  function PYBIND11_NAMESPACE_BEGIN (line 21) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  function handle (line 74) | static handle cast(const type &src, return_value_policy /* policy */, ha...
  function std (line 102) | inline std::tm *localtime_thread_safe(const std::time_t *time, std::tm *...
  function load (line 123) | bool load(handle src, bool) {
  function handle (line 173) | static handle cast(const std::chrono::time_point<std::chrono::system_clo...

FILE: external/pybind11_2.11_dev1/include/pybind11/complex.h
  function std (line 27) | static std::string format() { return std::string(value); }
  function handle (line 66) | static handle

FILE: external/pybind11_2.11_dev1/include/pybind11/detail/class.h
  function std (line 28) | inline std::string get_fully_qualified_tp_name(PyTypeObject *type) {
  function PyTypeObject (line 40) | inline PyTypeObject *type_incref(PyTypeObject *type) {
  function PyObject (line 48) | inline PyObject *pybind11_static_get(PyObject *self, PyObject * /*ob*/, ...
  function pybind11_static_set (line 53) | inline int pybind11_static_set(PyObject *self, PyObject *obj, PyObject *...
  function PyTypeObject (line 64) | inline PyTypeObject *make_static_property_type() {
  function PyTypeObject (line 111) | inline PyTypeObject *make_static_property_type() {
  function pybind11_meta_setattro (line 137) | inline int pybind11_meta_setattro(PyObject *obj, PyObject *name, PyObjec...
  function PyObject (line 174) | inline PyObject *pybind11_meta_getattro(PyObject *obj, PyObject *name) {
  function PyObject (line 184) | inline PyObject *pybind11_meta_call(PyObject *type, PyObject *args, PyOb...
  function PyTypeObject (line 251) | inline PyTypeObject *make_default_metaclass() {
  function PyObject (line 368) | inline PyObject *pybind11_object_new(PyTypeObject *type, PyObject *, PyO...
  function pybind11_object_init (line 375) | inline int pybind11_object_init(PyObject *self, PyObject *, PyObject *) {
  function add_patient (line 382) | inline void add_patient(PyObject *nurse, PyObject *patient) {
  function clear_patients (line 390) | inline void clear_patients(PyObject *self) {
  function clear_instance (line 408) | inline void clear_instance(PyObject *self) {
  function pybind11_object_dealloc (line 447) | inline void pybind11_object_dealloc(PyObject *self) {
  function PyObject (line 473) | inline PyObject *make_object_base_type(PyTypeObject *metaclass) {
  function pybind11_traverse (line 516) | inline int pybind11_traverse(PyObject *self, visitproc visit, void *arg) {
  function pybind11_clear (line 527) | inline int pybind11_clear(PyObject *self) {
  function enable_dynamic_attributes (line 534) | inline void enable_dynamic_attributes(PyHeapTypeObject *heap_type) {
  function pybind11_getbuffer (line 561) | inline int pybind11_getbuffer(PyObject *obj, Py_buffer *view, int flags) {
  function pybind11_releasebuffer (line 608) | inline void pybind11_releasebuffer(PyObject *, Py_buffer *view) {
  function enable_buffer_protocol (line 613) | inline void enable_buffer_protocol(PyHeapTypeObject *heap_type) {
  function PyObject (line 622) | inline PyObject *make_new_python_type(const type_record &rec) {

FILE: external/pybind11_2.11_dev1/include/pybind11/detail/common.h
  function return_value_policy (line 418) | enum class return_value_policy : uint8_t {
  function size_in_ptrs (line 476) | inline static constexpr size_t size_in_ptrs(size_t s) {
  function instance_simple_holder_in_ptrs (line 486) | constexpr size_t instance_simple_holder_in_ptrs() {
  type type_info (line 493) | struct type_info
  type value_and_holder (line 494) | struct value_and_holder
  type nonsimple_values_and_holders (line 496) | struct nonsimple_values_and_holders {
  type instance (line 502) | struct instance {
  type select_indices_impl (line 617) | struct select_indices_impl
  type void_type (line 721) | struct void_type {}
  function constexpr_sum (line 730) | size_t constexpr_sum(Ts... ns) {
  function constexpr_sum (line 734) | constexpr size_t constexpr_sum() { return 0; }
  function constexpr_sum (line 736) | size_t constexpr_sum(T n, Ts... ns) {
  function first (line 741) | PYBIND11_NAMESPACE_BEGIN(constexpr_impl)
  function last (line 749) | constexpr int last(int /*i*/, int result) { return result; }
  function PYBIND11_EXPORT_EXCEPTION (line 905) | PYBIND11_EXPORT_EXCEPTION builtin_exception : public std::runtime_error {
  function pybind11_fail (line 933) | void pybind11_fail(const char *reason) {
  function PYBIND11_NOINLINE (line 937) | [[noreturn]] PYBIND11_NOINLINE void pybind11_fail(const std::string &rea...
  function std (line 975) | static std::string format() { return std::string(1, c); }
  type error_scope (line 987) | struct error_scope {
  type nodelete (line 996) | struct nodelete {
  function detail (line 1030) | constexpr detail::overload_cast_impl<Args...> overload_cast{}
  function const_ (line 1036) | static constexpr auto const_ = std::true_type{}
  function operator (line 1082) | operator std::vector<T> &&() && { return std::move(v); }
  function silence_msvc_c4127 (line 1142) | constexpr inline bool silence_msvc_c4127(bool cond) { return cond; }

FILE: external/pybind11_2.11_dev1/include/pybind11/detail/descr.h
  function descr (line 63) | constexpr descr<0> const_name(char const (&)[1]) { return {}; }

FILE: external/pybind11_2.11_dev1/include/pybind11/detail/init.h
  function PYBIND11_NAMESPACE_BEGIN (line 14) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  function no_nullptr (line 34) | PYBIND11_NAMESPACE_BEGIN(initimpl)

FILE: external/pybind11_2.11_dev1/include/pybind11/detail/internals.h
  function tls_replace_value (line 97) | inline void tls_replace_value(PYBIND11_TLS_KEY_REF key, void *value) {
  function same_type (line 118) | inline bool same_type(const std::type_info &lhs, const std::type_info &r...
  function same_type (line 122) | inline bool same_type(const std::type_info &lhs, const std::type_info &r...
  type type_hash (line 126) | struct type_hash {
  type type_equal_to (line 137) | struct type_equal_to {
  type override_hash (line 147) | struct override_hash {
  type internals (line 158) | struct internals {
  type type_info (line 216) | struct type_info {
  function internals (line 312) | inline internals **&get_internals_pp() {
  function raise_err (line 340) | inline bool raise_err(PyObject *exc_type, const char *msg) {
  function translate_exception (line 349) | inline void translate_exception(std::exception_ptr p) {
  function translate_local_exception (line 409) | inline void translate_local_exception(std::exception_ptr p) {
  function PYBIND11_NOINLINE (line 425) | PYBIND11_NOINLINE internals &get_internals() {
  function local_internals (line 539) | inline local_internals &get_local_internals() {
  function is_function_record_capsule (line 574) | inline bool is_function_record_capsule(const capsule &cap) {
  function PYBIND11_NOINLINE (line 591) | PYBIND11_NOINLINE void *set_shared_data(const std::string &name, void *d...

FILE: external/pybind11_2.11_dev1/include/pybind11/detail/type_caster_base.h
  function PYBIND11_NAMESPACE_BEGIN (line 29) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  function PYBIND11_NOINLINE (line 81) | PYBIND11_NOINLINE static void add_patient(handle h) {
  function PYBIND11_NOINLINE (line 106) | PYBIND11_NOINLINE void all_type_info_populate(PyTypeObject *t, std::vect...
  function explicit (line 269) | explicit value_and_holder(size_t index) : index{index}
  type values_and_holders (line 315) | struct values_and_holders {
  function PYBIND11_NOINLINE (line 465) | PYBIND11_NOINLINE bool isinstance_generic(handle obj, const std::type_in...
  function PYBIND11_NOINLINE (line 473) | PYBIND11_NOINLINE handle get_object_handle(const void *ptr, const detail...

FILE: external/pybind11_2.11_dev1/include/pybind11/detail/typeid.h
  function PYBIND11_NAMESPACE_BEGIN (line 21) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  function std (line 51) | inline std::string clean_type_id(const char *typeid_name) {
  function type_id (line 57) | PYBIND11_NAMESPACE_END(detail)

FILE: external/pybind11_2.11_dev1/include/pybind11/eigen/matrix.h
  function EigenDStride (line 95) | EigenDStride stride{0, 0};    // Only valid if negativestrides is false!
  type eigen_extract_stride (line 140) | struct eigen_extract_stride
  type eigen_extract_stride (line 144) | struct eigen_extract_stride
  function EigenConformable (line 181) | static EigenConformable<row_major> conformable(const array &a) {
  function capsule (line 292) | capsule base(src, [](void *o) { delete static_cast<Type *>(o); }
  function load (line 303) | bool load(handle src, bool convert) {
  function handle (line 348) | handle cast_impl(CType *src, return_value_policy policy, handle parent) {
  function handle (line 373) | static handle cast(const Type &&src, return_value_policy /* policy */, h...
  function handle (line 377) | static handle cast(Type &src, return_value_policy policy, handle parent) {
  function handle (line 385) | static handle cast(const Type &src, return_value_policy policy, handle p...
  function handle (line 393) | static handle cast(Type *src, return_value_policy policy, handle parent) {
  function handle (line 397) | static handle cast(const Type *src, return_value_policy policy, handle p...
  function operator (line 404) | operator Type *() { return &value; }
  function operator (line 550) | operator Type *() { return ref.get(); }
  function handle (line 628) | static handle cast(const Type *src, return_value_policy policy, handle p...
  function load (line 650) | bool load(handle src, bool) {
  function handle (line 689) | static handle cast(const Type &src, return_value_policy /* policy */, ha...

FILE: external/pybind11_2.11_dev1/include/pybind11/eigen/tensor.h
  type eigen_tensor_helper (line 57) | struct eigen_tensor_helper
  function is_correct_shape (line 65) | static constexpr bool
  function free (line 86) | static void free(Type *tensor) { delete tensor; }
  type eigen_tensor_helper (line 90) | struct eigen_tensor_helper
  function load (line 178) | bool load(handle src, bool convert) {
  function handle (line 221) | static handle cast(Type &&src, return_value_policy policy, handle parent) {
  function handle (line 229) | static handle cast(const Type &&src, return_value_policy policy, handle ...
  function handle (line 237) | static handle cast(Type &src, return_value_policy policy, handle parent) {
  function handle (line 245) | static handle cast(const Type &src, return_value_policy policy, handle p...
  function handle (line 253) | static handle cast(Type *src, return_value_policy policy, handle parent) {
  function handle (line 262) | static handle cast(const Type *src, return_value_policy policy, handle p...
  function handle (line 272) | handle cast_impl(C *src, return_value_policy policy, handle parent) {
  function load (line 372) | bool load(handle src, bool /*convert*/) {
  function handle (line 414) | static handle cast(MapType &&src, return_value_policy policy, handle par...
  function handle (line 418) | static handle cast(const MapType &&src, return_value_policy policy, hand...
  function handle (line 422) | static handle cast(MapType &src, return_value_policy policy, handle pare...
  function handle (line 430) | static handle cast(const MapType &src, return_value_policy policy, handl...
  function handle (line 438) | static handle cast(MapType *src, return_value_policy policy, handle pare...
  function handle (line 447) | static handle cast(const MapType *src, return_value_policy policy, handl...
  function handle (line 457) | handle cast_impl(C *src, return_value_policy policy, handle parent) {

FILE: external/pybind11_2.11_dev1/include/pybind11/embed.h
  function PYBIND11_NAMESPACE_BEGIN (line 59) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  type wide_char_arg_deleter (line 77) | struct wide_char_arg_deleter {
  function wchar_t (line 84) | inline wchar_t *widen_chars(const char *safe_arg) {
  function finalize_interpreter (line 218) | inline void finalize_interpreter() {
  function class (line 258) | class scoped_interpreter {

FILE: external/pybind11_2.11_dev1/include/pybind11/eval.h
  function PYBIND11_NAMESPACE_BEGIN (line 18) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  function exec (line 88) | inline void exec(const str &expr, object global = globals(), object loca...

FILE: external/pybind11_2.11_dev1/include/pybind11/functional.h
  function PYBIND11_NAMESPACE_BEGIN (line 16) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)

FILE: external/pybind11_2.11_dev1/include/pybind11/gil.h
  function PYBIND11_NAMESPACE_BEGIN (line 18) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  function inc_ref (line 91) | void inc_ref() { ++tstate->gilstate_counter; }
  function PYBIND11_NOINLINE (line 93) | PYBIND11_NOINLINE void dec_ref() {
  function PYBIND11_NOINLINE (line 123) | PYBIND11_NOINLINE void disarm() { active = false; }
  function PYBIND11_NOINLINE (line 125) | PYBIND11_NOINLINE ~gil_scoped_acquire() {
  function class (line 138) | class gil_scoped_release {
  function PYBIND11_NOINLINE (line 163) | PYBIND11_NOINLINE void disarm() { active = false; }
  function class (line 189) | class gil_scoped_acquire {
  function class (line 200) | class gil_scoped_release {
  function class (line 215) | class gil_scoped_acquire {
  function class (line 226) | class gil_scoped_release {

FILE: external/pybind11_2.11_dev1/include/pybind11/iostream.h
  function PYBIND11_NAMESPACE_BEGIN (line 34) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  function utf8_remainder (line 58) | size_t utf8_remainder() const {
  function is_leading (line 62) | auto is_leading = [](char c) { return (static_cast<unsigned char>(c) & 0...
  function is_leading_2b (line 63) | auto is_leading_2b = [](char c) { return static_cast<unsigned char>(c) <...
  function is_leading_3b (line 64) | auto is_leading_3b = [](char c) { return static_cast<unsigned char>(c) <...
  function _sync (line 94) | int _sync() {
  function sync (line 117) | int sync() override { return _sync(); }
  function class (line 192) | class scoped_estream_redirect : public scoped_ostream_redirect {
  function OstreamRedirect (line 200) | PYBIND11_NAMESPACE_BEGIN(detail)
  function exit (line 222) | void exit() {

FILE: external/pybind11_2.11_dev1/include/pybind11/numpy.h
  function array (line 41) | PYBIND11_NAMESPACE_BEGIN(detail)
  type PyArrayDescr_Proxy (line 51) | struct PyArrayDescr_Proxy {
  type PyArray_Proxy (line 66) | struct PyArray_Proxy {
  type PyVoidScalarObject_Proxy (line 77) | struct PyVoidScalarObject_Proxy {
  type numpy_type_info (line 84) | struct numpy_type_info {
  function if (line 89) | struct numpy_internals {
  function numpy_internals (line 113) | inline numpy_internals &get_numpy_internals() {
  function PyArray_Check_ (line 138) | struct npy_api {
  function PyArrayDescr_Check_ (line 200) | bool PyArrayDescr_Check_(PyObject *obj) const {
  type functions (line 241) | enum functions {
  function npy_api (line 263) | static npy_api lookup() {
  function PyArray_Proxy (line 297) | inline PyArray_Proxy *array_proxy(void *ptr) { return reinterpret_cast<P...
  function PyArray_Proxy (line 299) | inline const PyArray_Proxy *array_proxy(const void *ptr) {
  function PyArrayDescr_Proxy (line 303) | inline PyArrayDescr_Proxy *array_descriptor_proxy(PyObject *ptr) {
  function PyArrayDescr_Proxy (line 307) | inline const PyArrayDescr_Proxy *array_descriptor_proxy(const PyObject *...
  function check_flags (line 311) | inline bool check_flags(const void *ptr, int flag) {
  function append_extents (line 330) | static void append_extents(list & /* shape */) {}
  function append_extents (line 345) | static void append_extents(list &shape) {
  function itemsize (line 465) | constexpr static ssize_t itemsize() { return sizeof(T); }
  function shape (line 468) | ssize_t shape(ssize_t dim) const { return shape_[(size_t) dim]; }
  function explicit (line 542) | explicit dtype(const buffer_info &info) {
  function explicit (line 550) | explicit dtype(const pybind11::str &format) : dtype(from_args(format)) {}
  function explicit (line 552) | explicit dtype(const std::string &format) : dtype(pybind11::str(format)) {}
  function explicit (line 554) | explicit dtype(const char *format) : dtype(pybind11::str(format)) {}
  function explicit (line 565) | explicit dtype(int typenum)
  function dtype (line 573) | static dtype from_args(const object &args) {
  function dtype (line 583) | dtype of() {
  function itemsize (line 588) | ssize_t itemsize() const { return detail::array_descriptor_proxy(m_ptr)-...
  function explicit (line 773) | explicit array(const buffer_info &info, handle base = handle())
  function size (line 782) | ssize_t size() const {
  function ndim (line 795) | ssize_t ndim() const { return detail::array_proxy(m_ptr)->nd; }
  function strides (line 815) | ssize_t strides(ssize_t dim) const {
  function flags (line 823) | int flags() const { return detail::array_proxy(m_ptr)->flags; }
  function array (line 905) | array squeeze() {
  function array (line 930) | array reshape(ShapeContainer new_shape) {
  function array (line 946) | array view(const std::string &dtype) {
  type detail (line 968) | struct detail
  function fail_dim_check (line 970) | void fail_dim_check(ssize_t dim, const std::string &msg) const {
  function check_dimensions_impl (line 992) | void check_dimensions_impl(ssize_t, const ssize_t *) const {}
  type private_ctor (line 1018) | struct private_ctor {}
  function explicit (line 1053) | explicit array_t(const buffer_info &info, handle base = handle()) : arra...
  function array_t (line 1134) | static array_t ensure(handle h) {
  function check_ (line 1142) | static bool check_(handle h) {
  function std (line 1169) | static std::string format() {
  function string (line 1176) | string format() { return std::to_string(N) + 's'; }
  function string (line 1180) | string format() { return std::to_string(N) + 's'; }
  function std (line 1185) | static std::string format() {
  function std (line 1193) | static std::string format() {
  function load (line 1205) | bool load(handle src, bool convert) {
  function handle (line 1213) | static handle cast(const handle &src, return_value_policy /* policy */, ...
  function compare (line 1221) | static bool compare(const buffer_info &b) {
  function pybind11 (line 1284) | static pybind11::dtype dtype() {
  function pybind11 (line 1317) | static pybind11::dtype dtype() {
  function pybind11 (line 1332) | static pybind11::dtype dtype() { return base_descr::dtype(); }
  type field_descriptor (line 1335) | struct field_descriptor {
  function pybind11 (line 1423) | static pybind11::dtype dtype() { return reinterpret_borrow<pybind11::dty...
  function std (line 1425) | static std::string format() {
  function register_dtype (line 1430) | static void register_dtype(any_container<field_descriptor> fields) {
  function direct_converter (line 1443) | static bool direct_converter(PyObject *obj, void *&value) {
  function class (line 1536) | class common_iterator {
  function init_common_iterator (line 1602) | void init_common_iterator(const buffer_info &buffer,
  function increment_common_iterator (line 1628) | void increment_common_iterator(size_t dim) {
  function broadcast_trivial (line 1639) | enum class broadcast_trivial { non_trivial, c_trivial, f_trivial };
  function Type (line 1756) | static Type create(broadcast_trivial trivial, const std::vector<ssize_t>...
  function Return (line 1763) | static Return *mutable_data(Type &array) { return array.mutable_data(); }
  function Return (line 1765) | static Return call(Func &f, Args &...args) { return f(args...); }
  function call (line 1767) | static void call(Return *out, size_t i, Func &f, Args &...args) { out[i]...
  function Type (line 1775) | static Type create(broadcast_trivial, const std::vector<ssize_t> &) { re...
  function detail (line 1779) | static detail::void_type call(Func &f, Args &...args) {
  function call (line 1784) | static void call(void *, size_t, Func &f, Args &...args) { f(args...); }
  function object (line 1810) | object operator()(typename vectorize_arg<Args>::type... args) {

FILE: external/pybind11_2.11_dev1/include/pybind11/operators.h
  function PYBIND11_NAMESPACE_BEGIN (line 14) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  type op_impl (line 82) | struct op_impl {}

FILE: external/pybind11_2.11_dev1/include/pybind11/options.h
  function options (line 14) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  function show_user_defined_docstrings (line 56) | static bool show_user_defined_docstrings() {
  function show_function_signatures (line 60) | static bool show_function_signatures() { return global_state().show_func...
  function show_enum_members_docstring (line 62) | static bool show_enum_members_docstring() { return global_state().show_e...
  type state (line 68) | struct state {
  function state (line 76) | static state &global_state() {

FILE: external/pybind11_2.11_dev1/include/pybind11/pybind11.h
  function PYBIND11_NAMESPACE_BEGIN (line 50) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  type InitializingFunctionRecordDeleter (line 152) | struct InitializingFunctionRecordDeleter {
  function PYBIND11_NOINLINE (line 161) | PYBIND11_NOINLINE unique_function_record make_function_record() {
  type capture (line 169) | struct capture {
  function class (line 313) | class strdup_guard {
  function release (line 329) | void release() { strings.clear(); }
  function initialize_generic (line 336) | void initialize_generic(unique_function_record &&unique_rec,
  function capsule (line 504) | capsule rec_capsule(unique_rec.release(),
  function loader_life_support (line 939) | loader_life_support guard{}
  function append_note_if_missing_header_is_suspected (line 1025) | auto append_note_if_missing_header_is_suspected = [](std::string &msg) {
  function module_ (line 1205) | static module_ import(const char *name) {
  function reload (line 1214) | void reload() {
  function module_ (line 1246) | static module_ create_extension_module(const char *name, const char *doc...
  function dict (line 1281) | inline dict globals() {
  function object (line 1289) | object make_simple_namespace(Args &&...args_) {
  function mark_parents_nonsimple (line 1359) | void mark_parents_nonsimple(PyTypeObject *value) {
  function add_base (line 1558) | void add_base(detail::type_record &rec) {
  function add_base (line 1565) | void add_base(detail::type_record &) {}
  type capture (line 1632) | struct capture {
  function cpp_function (line 1667) | cpp_function fget([pm](const type &c) -> const D & { return c.*pm; }
  function cpp_function (line 1677) | cpp_function fget([pm](const type &c) -> const D & { return c.*pm; }
  function cpp_function (line 1684) | cpp_function fget([pm](const object &) -> const D & { return *pm; }
  function cpp_function (line 1692) | cpp_function fget([pm](const object &) -> const D & { return *pm; }
  function init_holder (line 1803) | void init_holder(detail::instance *inst,
  function init_holder_from_existing (line 1821) | static void init_holder_from_existing(const detail::value_and_holder &v_h,
  function init_holder_from_existing (line 1828) | static void init_holder_from_existing(const detail::value_and_holder &v_h,
  function init_holder (line 1837) | static void init_holder(detail::instance *inst,
  function init_instance (line 1855) | static void init_instance(detail::instance *inst, const void *holder_ptr) {
  function dealloc (line 1865) | static void dealloc(detail::value_and_holder &v_h) {
  function detail (line 1883) | static detail::function_record *get_function_record(handle h) {
  function enum_name (line 1937) | PYBIND11_NAMESPACE_BEGIN(detail)
  function PYBIND11_NOINLINE (line 2106) | PYBIND11_NOINLINE void export_values() {
  type equivalent_integer (line 2120) | struct equivalent_integer
  type equivalent_integer (line 2124) | struct equivalent_integer
  type equivalent_integer (line 2128) | struct equivalent_integer
  type equivalent_integer (line 2132) | struct equivalent_integer
  type equivalent_integer (line 2136) | struct equivalent_integer
  type equivalent_integer (line 2140) | struct equivalent_integer
  type equivalent_integer (line 2144) | struct equivalent_integer
  type equivalent_integer (line 2148) | struct equivalent_integer
  function keep_alive_impl (line 2214) | void keep_alive_impl(handle nurse, handle patient) {
  function PYBIND11_NOINLINE (line 2244) | PYBIND11_NOINLINE void
  function std (line 2262) | inline std::pair<decltype(internals::registered_types_py)::iterator, bool>
  function result_type (line 2318) | result_type operator()(Iterator &it) const { return *it; }
  function result_type (line 2340) | result_type operator()(Iterator &it) const { return (*it).first; }
  function result_type (line 2353) | result_type operator()(Iterator &it) const { return (*it).second; }
  function set_flag (line 2472) | struct set_flag {
  function register_exception_translator (line 2502) | inline void register_exception_translator(ExceptionTranslator &&translat...
  function register_local_exception_translator (line 2513) | inline void register_local_exception_translator(ExceptionTranslator &&tr...
  function get_exception_object (line 2545) | PYBIND11_NAMESPACE_BEGIN(detail)
  function register_exception (line 2580) | PYBIND11_NAMESPACE_END(detail)
  function print (line 2609) | void print(const tuple &args, const dict &kwargs) {
  function m_fetched_error_deleter (line 2648) | inline void
  function get_type_override (line 2661) | PYBIND11_NAMESPACE_BEGIN(detail)
  function get_override (line 2752) | PYBIND11_NAMESPACE_END(detail)
  function function (line 2858) | inline function

FILE: external/pybind11_2.11_dev1/include/pybind11/pytypes.h
  type arg (line 42) | struct arg
  type arg_v (line 43) | struct arg_v
  type obj_attr (line 53) | struct obj_attr
  type str_attr (line 54) | struct str_attr
  type generic_item (line 55) | struct generic_item
  type sequence_item (line 56) | struct sequence_item
  type list_item (line 57) | struct list_item
  type tuple_item (line 58) | struct tuple_item
  function class (line 68) | class pyobject_tag {}
  function m_ptr (line 225) | m_ptr(ptr) {}
  function m_ptr (line 235) | m_ptr(obj) {}
  function PyObject (line 238) | PyObject *ptr() const { return m_ptr; }
  function handle (line 259) | const handle &dec_ref() const & {
  function class (line 309) | class object : public handle {
  function restore (line 596) | void restore() {
  function matches (line 606) | bool matches(handle exc) const {
  function std (line 620) | inline std::string error_string() {
  function PYBIND11_EXPORT_EXCEPTION (line 630) | PYBIND11_EXPORT_EXCEPTION error_already_set : public std::exception {
  function raise_from (line 688) | inline void raise_from(PyObject *type, const char *message) {
  function raise_from (line 717) | inline void raise_from(error_already_set &err, PyObject *type, const cha...
  function isinstance (line 745) | inline bool isinstance<object>(handle obj) {
  function isinstance (line 751) | inline bool isinstance(handle obj, handle type) {
  function hasattr (line 761) | inline bool hasattr(handle obj, handle name) {
  function hasattr (line 765) | inline bool hasattr(handle obj, const char *name) {
  function delattr (line 769) | inline void delattr(handle obj, handle name) {
  function delattr (line 775) | inline void delattr(handle obj, const char *name) {
  function object (line 781) | inline object getattr(handle obj, handle name) {
  function object (line 789) | inline object getattr(handle obj, const char *name) {
  function object (line 797) | inline object getattr(handle obj, handle name, handle default_) {
  function object (line 805) | inline object getattr(handle obj, const char *name, handle default_) {
  function setattr (line 813) | inline void setattr(handle obj, handle name, handle value) {
  function setattr (line 819) | inline void setattr(handle obj, const char *name, handle value) {
  function hash (line 825) | inline ssize_t hash(handle obj) {
  function get_function (line 835) | PYBIND11_NAMESPACE_BEGIN(detail)
  function PyObject (line 851) | inline PyObject *dict_getitemstring(PyObject *v, const char *key) {
  function PyObject (line 866) | inline PyObject *dict_getitem(PyObject *v, PyObject *key) {
  function handle (line 885) | inline handle object_or_cast(PyObject *ptr) { return ptr; }
  function object (line 961) | static object get(handle obj, handle key) { return getattr(obj, key); }
  function set (line 962) | static void set(handle obj, handle key, handle val) { setattr(obj, key, ...
  function set (line 965) | struct str_attr {
  type generic_item (line 971) | struct generic_item {
  function set (line 982) | static void set(handle obj, handle key, handle val) {
  type sequence_item (line 989) | struct sequence_item {
  type list_item (line 1010) | struct list_item {
  type tuple_item (line 1031) | struct tuple_item {
  function reference (line 1071) | reference operator[](difference_type n) const { return *(*this + n); }
  function pointer (line 1072) | pointer operator->() const { return **this; }
  function arrow_proxy (line 1120) | PYBIND11_NAMESPACE_BEGIN(iterator_policies)
  function class (line 1132) | class sequence_fast_readonly {
  function increment (line 1143) | void increment() { ++ptr; }
  function decrement (line 1144) | void decrement() { --ptr; }
  function advance (line 1145) | void advance(ssize_t n) { ptr += n; }
  function equal (line 1146) | bool equal(const sequence_fast_readonly &b) const { return ptr == b.ptr; }
  function distance_to (line 1147) | ssize_t distance_to(const sequence_fast_readonly &b) const { return ptr ...
  function class (line 1154) | class sequence_slow_readwrite {
  function increment (line 1164) | void increment() { ++index; }
  function decrement (line 1165) | void decrement() { --index; }
  function advance (line 1166) | void advance(ssize_t n) { index += n; }
  function equal (line 1167) | bool equal(const sequence_slow_readwrite &b) const { return index == b.i...
  function distance_to (line 1168) | ssize_t distance_to(const sequence_slow_readwrite &b) const { return ind...
  function class (line 1176) | class dict_readonly {
  function increment (line 1188) | void increment() {
  function equal (line 1193) | bool equal(const dict_readonly &b) const { return pos == b.pos; }
  function PyIterable_Check (line 1213) | inline bool PyIterable_Check(PyObject *obj) {
  function PyNone_Check (line 1223) | inline bool PyNone_Check(PyObject *o) { return o == Py_None; }
  function PyEllipsis_Check (line 1224) | inline bool PyEllipsis_Check(PyObject *o) { return o == Py_Ellipsis; }
  function PyUnicode_Check_Permissive (line 1227) | inline bool PyUnicode_Check_Permissive(PyObject *o) {
  function PyStaticMethod_Check (line 1235) | inline bool PyStaticMethod_Check(PyObject *o) { return o->ob_type == &Py...
  function class (line 1237) | class kwargs_proxy : public handle {
  function class (line 1242) | class args_proxy : public handle {
  function Parent (line 1289) | Name(const object &o)                                                   ...
  function Parent (line 1313) | Name(const object &o) : Parent(o) {                                     ...
  function class (line 1338) | class iterator : public object {
  function reference (line 1360) | reference operator*() const {
  function pointer (line 1368) | pointer operator->() const {
  function iterator (line 1386) | static iterator sentinel() { return {}; }
  function class (line 1403) | class type : public object {
  function class (line 1429) | class iterable : public object {
  function namespace (line 1523) | inline namespace literals {
  function bytes (line 1588) | inline bytes::bytes(const pybind11::str &s) {
  function str (line 1608) | inline str::str(const bytes &b) {
  function class (line 1626) | class bytearray : public object {
  function class (line 1656) | class none : public object {
  function class (line 1662) | class ellipsis : public object {
  function class (line 1668) | class bool_ : public object {
  function as_unsigned (line 1689) | PYBIND11_NAMESPACE_BEGIN(detail)
  function class (line 1740) | class float_ : public object {
  function class (line 1762) | class weakref : public object {
  function class (line 1779) | class slice : public object {
  function compute (line 1807) | bool compute(
  function object (line 1816) | object index_to_object(T index) {
  function class (line 1821) | class capsule : public object {
  function explicit (line 1869) | explicit capsule(void (*destructor)()) {
  function set_pointer (line 1901) | void set_pointer(const void *value) {
  function set_name (line 1916) | void set_name(const char *new_name) {
  function class (line 1936) | class tuple : public object {
  function args_are_all_keyword_or_ds (line 1962) | bool args_are_all_keyword_or_ds() {
  function class (line 1966) | class dict : public object {
  function clear (line 1985) | void clear() /* py-non-const */ { PyDict_Clear(ptr()); }
  function class (line 2005) | class sequence : public object {
  function item_accessor (line 2018) | item_accessor operator[](T &&o) const {
  function class (line 2025) | class list : public object {
  function class (line 2064) | class args : public tuple {
  function memoryview (line 2249) | static memoryview from_memory(const void *mem, ssize_t size) {
  function memoryview (line 2254) | static memoryview from_memory(std::string_view mem) {
  function memoryview (line 2261) | inline memoryview memoryview::from_buffer(void *ptr,
  function len (line 2300) | inline size_t len(handle h) {
  function len_hint (line 2310) | inline size_t len_hint(handle h) {
  function str (line 2321) | inline str repr(handle h) {
  function iterator (line 2329) | inline iterator iter(handle obj) {

FILE: external/pybind11_2.11_dev1/include/pybind11/stl.h
  function PYBIND11_NAMESPACE_BEGIN (line 35) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
  function reserve_maybe (line 116) | void reserve_maybe(const dict &, void *) {}
  function load (line 168) | bool load(handle src, bool convert) {
  function reserve_maybe (line 190) | void reserve_maybe(const sequence &, void *) {}
  function load (line 322) | bool load(handle src, bool convert) {
  type type_caster (line 355) | struct type_caster
  type variant_caster_visitor (line 360) | struct variant_caster_visitor {
  type type_caster (line 432) | struct type_caster

FILE: external/pybind11_2.11_dev1/include/pybind11/stl/filesystem.h
  function PyObject (line 51) | static PyObject *unicode_from_fs_native(const std::wstring &w) {
  function load (line 65) | bool load(handle handle, bool) {
  type type_caster (line 108) | struct type_caster
  type type_caster (line 111) | struct type_caster

FILE: external/pybind11_2.11_dev1/include/pybind11/stl_bind.h
  function PYBIND11_NAMESPACE_BEGIN (line 18) | PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)

FILE: external/pybind11_2.11_dev1/noxfile.py
  function lint (line 25) | def lint(session: nox.Session) -> None:
  function tests (line 34) | def tests(session: nox.Session) -> None:
  function tests_packaging (line 55) | def tests_packaging(session: nox.Session) -> None:
  function docs (line 65) | def docs(session: nox.Session) -> None:
  function make_changelog (line 87) | def make_changelog(session: nox.Session) -> None:
  function build (line 96) | def build(session: nox.Session) -> None:

FILE: external/pybind11_2.11_dev1/pybind11/__main__.py
  function print_includes (line 10) | def print_includes() -> None:
  function main (line 26) | def main() -> None:

FILE: external/pybind11_2.11_dev1/pybind11/_version.py
  function _to_int (line 4) | def _to_int(s: str) -> Union[int, str]:

FILE: external/pybind11_2.11_dev1/pybind11/commands.py
  function get_include (line 6) | def get_include(user: bool = False) -> str:  # pylint: disable=unused-ar...
  function get_cmake_dir (line 16) | def get_cmake_dir() -> str:
  function get_pkgconfig_dir (line 28) | def get_pkgconfig_dir() -> str:

FILE: external/pybind11_2.11_dev1/pybind11/setup_helpers.py
  class Pybind11Extension (line 87) | class Pybind11Extension(_Extension):  # type: ignore[misc]
    method _add_cflags (line 114) | def _add_cflags(self, flags: List[str]) -> None:
    method _add_ldflags (line 117) | def _add_ldflags(self, flags: List[str]) -> None:
    method __init__ (line 120) | def __init__(self, *args: Any, **kwargs: Any) -> None:
    method cxx_std (line 165) | def cxx_std(self) -> int:
    method cxx_std (line 176) | def cxx_std(self, level: int) -> None:
  function tmp_chdir (line 216) | def tmp_chdir() -> Iterator[str]:
  function has_flag (line 232) | def has_flag(compiler: Any, flag: str) -> bool:
  function auto_cpp_level (line 256) | def auto_cpp_level(compiler: Any) -> Union[str, int]:
  class build_ext (line 274) | class build_ext(_build_ext):  # type: ignore[misc] # noqa: N801
    method build_extensions (line 281) | def build_extensions(self) -> None:
  function intree_extensions (line 293) | def intree_extensions(
  function naive_recompile (line 335) | def naive_recompile(obj: str, src: str) -> bool:
  function no_recompile (line 344) | def no_recompile(obg: str, src: str) -> bool:  # pylint: disable=unused-...
  class ParallelCompile (line 375) | class ParallelCompile:
    method __init__ (line 413) | def __init__(
    method function (line 426) | def function(self) -> CCompilerMethod:
    method install (line 492) | def install(self: S) -> S:
    method __enter__ (line 499) | def __enter__(self: S) -> S:
    method __exit__ (line 503) | def __exit__(self, *args: Any) -> None:

FILE: external/pybind11_2.11_dev1/setup.py
  function build_expected_version_hex (line 26) | def build_expected_version_hex(matches: Dict[str, str]) -> str:
  function get_and_replace (line 87) | def get_and_replace(
  class SDist (line 99) | class SDist(setuptools.command.sdist.sdist):  # type: ignore[misc]
    method make_release_tree (line 100) | def make_release_tree(self, base_dir: str, files: List[str]) -> None:
  function remove_output (line 115) | def remove_output(*sources: str) -> Iterator[None]:

FILE: external/pybind11_2.11_dev1/tests/catch/catch.hpp
  type Catch (line 98) | namespace Catch {
    type CaseSensitive (line 486) | struct CaseSensitive { enum Choice {
      type Choice (line 486) | enum Choice {
    class NonCopyable (line 491) | class NonCopyable {
      method NonCopyable (line 492) | NonCopyable( NonCopyable const& )              = delete;
      method NonCopyable (line 493) | NonCopyable( NonCopyable && )                  = delete;
      method NonCopyable (line 494) | NonCopyable& operator = ( NonCopyable const& ) = delete;
      method NonCopyable (line 495) | NonCopyable& operator = ( NonCopyable && )     = delete;
    type SourceLineInfo (line 502) | struct SourceLineInfo {
      method SourceLineInfo (line 504) | SourceLineInfo() = delete;
      method SourceLineInfo (line 505) | SourceLineInfo( char const* _file, std::size_t _line ) noexcept
      method SourceLineInfo (line 510) | SourceLineInfo( SourceLineInfo const& other )            = default;
      method SourceLineInfo (line 511) | SourceLineInfo& operator = ( SourceLineInfo const& )     = default;
      method SourceLineInfo (line 512) | SourceLineInfo( SourceLineInfo&& )              noexcept = default;
      method SourceLineInfo (line 513) | SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default;
      method empty (line 515) | bool empty() const noexcept { return file[0] == '\0'; }
    type StreamEndStop (line 534) | struct StreamEndStop {
    function T (line 538) | T const& operator + ( T const& value, StreamEndStop ) {
    type RegistrarForTagAliases (line 549) | struct RegistrarForTagAliases {
    class TestSpec (line 570) | class TestSpec
      class Pattern (line 5112) | class Pattern {
      class NamePattern (line 5123) | class NamePattern : public Pattern {
      class TagPattern (line 5131) | class TagPattern : public Pattern {
      class ExcludedPattern (line 5139) | class ExcludedPattern : public Pattern {
      type Filter (line 5147) | struct Filter {
      type FilterMatch (line 5155) | struct FilterMatch {
    type ITestInvoker (line 572) | struct ITestInvoker {
    class TestCase (line 577) | class TestCase
    type IConfig (line 578) | struct IConfig
    type ITestCaseRegistry (line 580) | struct ITestCaseRegistry {
    class StringRef (line 606) | class StringRef {
      method StringRef (line 618) | constexpr StringRef() noexcept = default;
      method StringRef (line 622) | constexpr StringRef( char const* rawChars, size_type size ) noexcept
      method StringRef (line 627) | StringRef( std::string const& stdString ) noexcept
      method empty (line 648) | constexpr auto empty() const noexcept -> bool {
      method size (line 651) | constexpr auto size() const noexcept -> size_type {
      method isNullTerminated (line 668) | constexpr auto isNullTerminated() const noexcept -> bool {
      method const_iterator (line 673) | constexpr const_iterator begin() const { return m_start; }
      method const_iterator (line 674) | constexpr const_iterator end() const { return m_start + m_size; }
    type always_false (line 925) | struct always_false : std::false_type {}
    type true_given (line 927) | struct true_given : std::true_type {}
    type is_callable_tester (line 928) | struct is_callable_tester {
    type is_callable (line 936) | struct is_callable
    class TestInvokerAsMethod (line 962) | class TestInvokerAsMethod : public ITestInvoker {
      method TestInvokerAsMethod (line 965) | TestInvokerAsMethod( void (C::*testAsMethod)() ) noexcept : m_testAs...
      method invoke (line 967) | void invoke() const override {
    function makeTestInvoker (line 976) | auto makeTestInvoker( void (C::*testAsMethod)() ) noexcept -> ITestInv...
    type NameAndTags (line 980) | struct NameAndTags {
    type AutoReg (line 986) | struct AutoReg : NonCopyable {
    type ResultWas (line 1353) | struct ResultWas { enum OfType {
      type OfType (line 1353) | enum OfType {
    type ResultDisposition (line 1377) | struct ResultDisposition { enum Flags {
      type Flags (line 1377) | enum Flags {
    function isFalseTest (line 1388) | inline bool isFalseTest( int flags ) { return ( flags & ResultDisposit...
    type AssertionInfo (line 1396) | struct AssertionInfo
    class StringRef (line 1431) | class StringRef
      method StringRef (line 618) | constexpr StringRef() noexcept = default;
      method StringRef (line 622) | constexpr StringRef( char const* rawChars, size_type size ) noexcept
      method StringRef (line 627) | StringRef( std::string const& stdString ) noexcept
      method empty (line 648) | constexpr auto empty() const noexcept -> bool {
      method size (line 651) | constexpr auto size() const noexcept -> size_type {
      method isNullTerminated (line 668) | constexpr auto isNullTerminated() const noexcept -> bool {
      method const_iterator (line 673) | constexpr const_iterator begin() const { return m_start; }
      method const_iterator (line 674) | constexpr const_iterator end() const { return m_start + m_size; }
    type IStream (line 1433) | struct IStream {
    class ReusableStringStream (line 1440) | class ReusableStringStream : NonCopyable {
      method get (line 1454) | auto get() -> std::ostream& { return *m_oss; }
    type Detail (line 1465) | namespace Detail {
      type EnumInfo (line 1466) | struct EnumInfo {
      function rawMemoryToString (line 1559) | std::string rawMemoryToString( const T& object ) {
      class IsStreamInsertable (line 1564) | class IsStreamInsertable {
      function convertUnstreamable (line 1580) | typename std::enable_if<
      function convertUnstreamable (line 1586) | typename std::enable_if<
      function convertUnstreamable (line 1593) | typename std::enable_if<
      function stringify (line 1644) | std::string stringify(const T& e) {
      function convertUnknownEnumToString (line 1649) | std::string convertUnknownEnumToString( E e ) {
      function rangeToString (line 1829) | std::string rangeToString(InputIterator first, Sentinel last) {
      function stringify (line 1859) | inline std::string stringify( NSString* nsstring ) {
      type TupleElementPrinter (line 1927) | struct TupleElementPrinter {
        method print (line 1928) | static void print(const Tuple& tuple, std::ostream& os) {
      type TupleElementPrinter<Tuple, N, false> (line 1939) | struct TupleElementPrinter<Tuple, N, false> {
        method print (line 1940) | static void print(const Tuple&, std::ostream&) {}
      class Approx (line 3078) | class Approx {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7885) | Approx Approx::custom() {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7889) | Approx Approx::operator-() const {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      class EnumValuesRegistry (line 10567) | class EnumValuesRegistry : public IMutableEnumValuesRegistry {
      function StringRef (line 10594) | StringRef extractInstanceName(StringRef enumInstance) {
      function parseEnums (line 10604) | std::vector<StringRef> parseEnums( StringRef enums ) {
      function StringRef (line 10616) | StringRef EnumInfo::lookup( int value ) const {
      function makeEnumInfo (line 10624) | std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRe...
      function EnumInfo (line 10638) | EnumInfo const& EnumValuesRegistry::registerEnum( StringRef enumName...
      class StreamBufImpl (line 13649) | class StreamBufImpl : public std::streambuf {
        method StreamBufImpl (line 13654) | StreamBufImpl() {
        method overflow (line 13663) | int overflow( int c ) override {
        method sync (line 13675) | int sync() override {
      type OutputDebugWriter (line 13686) | struct OutputDebugWriter {
      class FileStream (line 13695) | class FileStream : public IStream {
        method FileStream (line 13698) | FileStream( StringRef filename ) {
      class CoutStream (line 13711) | class CoutStream : public IStream {
        method CoutStream (line 13716) | CoutStream() : m_os( Catch::cout().rdbuf() ) {}
      class DebugOutStream (line 13725) | class DebugOutStream : public IStream {
        method DebugOutStream (line 13729) | DebugOutStream()
      type Endianness (line 15029) | struct Endianness {
        type Arch (line 15030) | enum Arch { Big, Little }
        method Arch (line 15032) | static Arch which() {
      function rawMemoryToString (line 15042) | std::string rawMemoryToString( const void *object, std::size_t size ) {
    type IMutableEnumValuesRegistry (line 1476) | struct IMutableEnumValuesRegistry {
    type Detail (line 1552) | namespace Detail {
      type EnumInfo (line 1466) | struct EnumInfo {
      function rawMemoryToString (line 1559) | std::string rawMemoryToString( const T& object ) {
      class IsStreamInsertable (line 1564) | class IsStreamInsertable {
      function convertUnstreamable (line 1580) | typename std::enable_if<
      function convertUnstreamable (line 1586) | typename std::enable_if<
      function convertUnstreamable (line 1593) | typename std::enable_if<
      function stringify (line 1644) | std::string stringify(const T& e) {
      function convertUnknownEnumToString (line 1649) | std::string convertUnknownEnumToString( E e ) {
      function rangeToString (line 1829) | std::string rangeToString(InputIterator first, Sentinel last) {
      function stringify (line 1859) | inline std::string stringify( NSString* nsstring ) {
      type TupleElementPrinter (line 1927) | struct TupleElementPrinter {
        method print (line 1928) | static void print(const Tuple& tuple, std::ostream& os) {
      type TupleElementPrinter<Tuple, N, false> (line 1939) | struct TupleElementPrinter<Tuple, N, false> {
        method print (line 1940) | static void print(const Tuple&, std::ostream&) {}
      class Approx (line 3078) | class Approx {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7885) | Approx Approx::custom() {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7889) | Approx Approx::operator-() const {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      class EnumValuesRegistry (line 10567) | class EnumValuesRegistry : public IMutableEnumValuesRegistry {
      function StringRef (line 10594) | StringRef extractInstanceName(StringRef enumInstance) {
      function parseEnums (line 10604) | std::vector<StringRef> parseEnums( StringRef enums ) {
      function StringRef (line 10616) | StringRef EnumInfo::lookup( int value ) const {
      function makeEnumInfo (line 10624) | std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRe...
      function EnumInfo (line 10638) | EnumInfo const& EnumValuesRegistry::registerEnum( StringRef enumName...
      class StreamBufImpl (line 13649) | class StreamBufImpl : public std::streambuf {
        method StreamBufImpl (line 13654) | StreamBufImpl() {
        method overflow (line 13663) | int overflow( int c ) override {
        method sync (line 13675) | int sync() override {
      type OutputDebugWriter (line 13686) | struct OutputDebugWriter {
      class FileStream (line 13695) | class FileStream : public IStream {
        method FileStream (line 13698) | FileStream( StringRef filename ) {
      class CoutStream (line 13711) | class CoutStream : public IStream {
        method CoutStream (line 13716) | CoutStream() : m_os( Catch::cout().rdbuf() ) {}
      class DebugOutStream (line 13725) | class DebugOutStream : public IStream {
        method DebugOutStream (line 13729) | DebugOutStream()
      type Endianness (line 15029) | struct Endianness {
        type Arch (line 15030) | enum Arch { Big, Little }
        method Arch (line 15032) | static Arch which() {
      function rawMemoryToString (line 15042) | std::string rawMemoryToString( const void *object, std::size_t size ) {
    type StringMaker (line 1615) | struct StringMaker {
      method convert (line 1617) | static
      method convert (line 1628) | static
    type Detail (line 1639) | namespace Detail {
      type EnumInfo (line 1466) | struct EnumInfo {
      function rawMemoryToString (line 1559) | std::string rawMemoryToString( const T& object ) {
      class IsStreamInsertable (line 1564) | class IsStreamInsertable {
      function convertUnstreamable (line 1580) | typename std::enable_if<
      function convertUnstreamable (line 1586) | typename std::enable_if<
      function convertUnstreamable (line 1593) | typename std::enable_if<
      function stringify (line 1644) | std::string stringify(const T& e) {
      function convertUnknownEnumToString (line 1649) | std::string convertUnknownEnumToString( E e ) {
      function rangeToString (line 1829) | std::string rangeToString(InputIterator first, Sentinel last) {
      function stringify (line 1859) | inline std::string stringify( NSString* nsstring ) {
      type TupleElementPrinter (line 1927) | struct TupleElementPrinter {
        method print (line 1928) | static void print(const Tuple& tuple, std::ostream& os) {
      type TupleElementPrinter<Tuple, N, false> (line 1939) | struct TupleElementPrinter<Tuple, N, false> {
        method print (line 1940) | static void print(const Tuple&, std::ostream&) {}
      class Approx (line 3078) | class Approx {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7885) | Approx Approx::custom() {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7889) | Approx Approx::operator-() const {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      class EnumValuesRegistry (line 10567) | class EnumValuesRegistry : public IMutableEnumValuesRegistry {
      function StringRef (line 10594) | StringRef extractInstanceName(StringRef enumInstance) {
      function parseEnums (line 10604) | std::vector<StringRef> parseEnums( StringRef enums ) {
      function StringRef (line 10616) | StringRef EnumInfo::lookup( int value ) const {
      function makeEnumInfo (line 10624) | std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRe...
      function EnumInfo (line 10638) | EnumInfo const& EnumValuesRegistry::registerEnum( StringRef enumName...
      class StreamBufImpl (line 13649) | class StreamBufImpl : public std::streambuf {
        method StreamBufImpl (line 13654) | StreamBufImpl() {
        method overflow (line 13663) | int overflow( int c ) override {
        method sync (line 13675) | int sync() override {
      type OutputDebugWriter (line 13686) | struct OutputDebugWriter {
      class FileStream (line 13695) | class FileStream : public IStream {
        method FileStream (line 13698) | FileStream( StringRef filename ) {
      class CoutStream (line 13711) | class CoutStream : public IStream {
        method CoutStream (line 13716) | CoutStream() : m_os( Catch::cout().rdbuf() ) {}
      class DebugOutStream (line 13725) | class DebugOutStream : public IStream {
        method DebugOutStream (line 13729) | DebugOutStream()
      type Endianness (line 15029) | struct Endianness {
        type Arch (line 15030) | enum Arch { Big, Little }
        method Arch (line 15032) | static Arch which() {
      function rawMemoryToString (line 15042) | std::string rawMemoryToString( const void *object, std::size_t size ) {
    type StringMaker<std::string> (line 1665) | struct StringMaker<std::string> {
    type StringMaker<std::string_view> (line 1671) | struct StringMaker<std::string_view> {
    type StringMaker<char const *> (line 1677) | struct StringMaker<char const *> {
    type StringMaker<char *> (line 1681) | struct StringMaker<char *> {
    type StringMaker<std::wstring> (line 1687) | struct StringMaker<std::wstring> {
    type StringMaker<std::wstring_view> (line 1693) | struct StringMaker<std::wstring_view> {
    type StringMaker<wchar_t const *> (line 1699) | struct StringMaker<wchar_t const *> {
    type StringMaker<wchar_t *> (line 1703) | struct StringMaker<wchar_t *> {
    type StringMaker<char[SZ]> (line 1711) | struct StringMaker<char[SZ]> {
      method convert (line 1712) | static std::string convert(char const* str) {
    type StringMaker<signed char[SZ]> (line 1717) | struct StringMaker<signed char[SZ]> {
      method convert (line 1718) | static std::string convert(signed char const* str) {
    type StringMaker<unsigned char[SZ]> (line 1723) | struct StringMaker<unsigned char[SZ]> {
      method convert (line 1724) | static std::string convert(unsigned char const* str) {
    type StringMaker<std::byte> (line 1731) | struct StringMaker<std::byte> {
    type StringMaker<int> (line 1736) | struct StringMaker<int> {
    type StringMaker<long> (line 1740) | struct StringMaker<long> {
    type StringMaker<long long> (line 1744) | struct StringMaker<long long> {
    type StringMaker<unsigned int> (line 1748) | struct StringMaker<unsigned int> {
    type StringMaker<unsigned long> (line 1752) | struct StringMaker<unsigned long> {
    type StringMaker<unsigned long long> (line 1756) | struct StringMaker<unsigned long long> {
    type StringMaker<bool> (line 1761) | struct StringMaker<bool> {
    type StringMaker<char> (line 1766) | struct StringMaker<char> {
    type StringMaker<signed char> (line 1770) | struct StringMaker<signed char> {
    type StringMaker<unsigned char> (line 1774) | struct StringMaker<unsigned char> {
    type StringMaker<std::nullptr_t> (line 1779) | struct StringMaker<std::nullptr_t> {
    type StringMaker<float> (line 1784) | struct StringMaker<float> {
    type StringMaker<double> (line 1790) | struct StringMaker<double> {
    type StringMaker<T*> (line 1796) | struct StringMaker<T*> {
      method convert (line 1798) | static std::string convert(U* p) {
    type StringMaker<R C::*> (line 1808) | struct StringMaker<R C::*> {
      method convert (line 1809) | static std::string convert(R C::* p) {
    type StringMaker<T^> (line 1820) | struct StringMaker<T^> {
      method convert (line 1821) | static std::string convert( T^ ref ) {
    type Detail (line 1827) | namespace Detail {
      type EnumInfo (line 1466) | struct EnumInfo {
      function rawMemoryToString (line 1559) | std::string rawMemoryToString( const T& object ) {
      class IsStreamInsertable (line 1564) | class IsStreamInsertable {
      function convertUnstreamable (line 1580) | typename std::enable_if<
      function convertUnstreamable (line 1586) | typename std::enable_if<
      function convertUnstreamable (line 1593) | typename std::enable_if<
      function stringify (line 1644) | std::string stringify(const T& e) {
      function convertUnknownEnumToString (line 1649) | std::string convertUnknownEnumToString( E e ) {
      function rangeToString (line 1829) | std::string rangeToString(InputIterator first, Sentinel last) {
      function stringify (line 1859) | inline std::string stringify( NSString* nsstring ) {
      type TupleElementPrinter (line 1927) | struct TupleElementPrinter {
        method print (line 1928) | static void print(const Tuple& tuple, std::ostream& os) {
      type TupleElementPrinter<Tuple, N, false> (line 1939) | struct TupleElementPrinter<Tuple, N, false> {
        method print (line 1940) | static void print(const Tuple&, std::ostream&) {}
      class Approx (line 3078) | class Approx {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7885) | Approx Approx::custom() {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7889) | Approx Approx::operator-() const {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      class EnumValuesRegistry (line 10567) | class EnumValuesRegistry : public IMutableEnumValuesRegistry {
      function StringRef (line 10594) | StringRef extractInstanceName(StringRef enumInstance) {
      function parseEnums (line 10604) | std::vector<StringRef> parseEnums( StringRef enums ) {
      function StringRef (line 10616) | StringRef EnumInfo::lookup( int value ) const {
      function makeEnumInfo (line 10624) | std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRe...
      function EnumInfo (line 10638) | EnumInfo const& EnumValuesRegistry::registerEnum( StringRef enumName...
      class StreamBufImpl (line 13649) | class StreamBufImpl : public std::streambuf {
        method StreamBufImpl (line 13654) | StreamBufImpl() {
        method overflow (line 13663) | int overflow( int c ) override {
        method sync (line 13675) | int sync() override {
      type OutputDebugWriter (line 13686) | struct OutputDebugWriter {
      class FileStream (line 13695) | class FileStream : public IStream {
        method FileStream (line 13698) | FileStream( StringRef filename ) {
      class CoutStream (line 13711) | class CoutStream : public IStream {
        method CoutStream (line 13716) | CoutStream() : m_os( Catch::cout().rdbuf() ) {}
      class DebugOutStream (line 13725) | class DebugOutStream : public IStream {
        method DebugOutStream (line 13729) | DebugOutStream()
      type Endianness (line 15029) | struct Endianness {
        type Arch (line 15030) | enum Arch { Big, Little }
        method Arch (line 15032) | static Arch which() {
      function rawMemoryToString (line 15042) | std::string rawMemoryToString( const void *object, std::size_t size ) {
    type StringMaker<NSString*> (line 1844) | struct StringMaker<NSString*> {
      method convert (line 1845) | static std::string convert(NSString * nsstring) {
    type StringMaker<NSObject*> (line 1852) | struct StringMaker<NSObject*> {
      method convert (line 1853) | static std::string convert(NSObject* nsObject) {
    type Detail (line 1858) | namespace Detail {
      type EnumInfo (line 1466) | struct EnumInfo {
      function rawMemoryToString (line 1559) | std::string rawMemoryToString( const T& object ) {
      class IsStreamInsertable (line 1564) | class IsStreamInsertable {
      function convertUnstreamable (line 1580) | typename std::enable_if<
      function convertUnstreamable (line 1586) | typename std::enable_if<
      function convertUnstreamable (line 1593) | typename std::enable_if<
      function stringify (line 1644) | std::string stringify(const T& e) {
      function convertUnknownEnumToString (line 1649) | std::string convertUnknownEnumToString( E e ) {
      function rangeToString (line 1829) | std::string rangeToString(InputIterator first, Sentinel last) {
      function stringify (line 1859) | inline std::string stringify( NSString* nsstring ) {
      type TupleElementPrinter (line 1927) | struct TupleElementPrinter {
        method print (line 1928) | static void print(const Tuple& tuple, std::ostream& os) {
      type TupleElementPrinter<Tuple, N, false> (line 1939) | struct TupleElementPrinter<Tuple, N, false> {
        method print (line 1940) | static void print(const Tuple&, std::ostream&) {}
      class Approx (line 3078) | class Approx {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7885) | Approx Approx::custom() {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7889) | Approx Approx::operator-() const {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      class EnumValuesRegistry (line 10567) | class EnumValuesRegistry : public IMutableEnumValuesRegistry {
      function StringRef (line 10594) | StringRef extractInstanceName(StringRef enumInstance) {
      function parseEnums (line 10604) | std::vector<StringRef> parseEnums( StringRef enums ) {
      function StringRef (line 10616) | StringRef EnumInfo::lookup( int value ) const {
      function makeEnumInfo (line 10624) | std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRe...
      function EnumInfo (line 10638) | EnumInfo const& EnumValuesRegistry::registerEnum( StringRef enumName...
      class StreamBufImpl (line 13649) | class StreamBufImpl : public std::streambuf {
        method StreamBufImpl (line 13654) | StreamBufImpl() {
        method overflow (line 13663) | int overflow( int c ) override {
        method sync (line 13675) | int sync() override {
      type OutputDebugWriter (line 13686) | struct OutputDebugWriter {
      class FileStream (line 13695) | class FileStream : public IStream {
        method FileStream (line 13698) | FileStream( StringRef filename ) {
      class CoutStream (line 13711) | class CoutStream : public IStream {
        method CoutStream (line 13716) | CoutStream() : m_os( Catch::cout().rdbuf() ) {}
      class DebugOutStream (line 13725) | class DebugOutStream : public IStream {
        method DebugOutStream (line 13729) | DebugOutStream()
      type Endianness (line 15029) | struct Endianness {
        type Arch (line 15030) | enum Arch { Big, Little }
        method Arch (line 15032) | static Arch which() {
      function rawMemoryToString (line 15042) | std::string rawMemoryToString( const void *object, std::size_t size ) {
    type StringMaker<std::pair<T1, T2> > (line 1885) | struct StringMaker<std::pair<T1, T2> > {
      method convert (line 1886) | static std::string convert(const std::pair<T1, T2>& pair) {
    type StringMaker<std::optional<T> > (line 1903) | struct StringMaker<std::optional<T> > {
      method convert (line 1904) | static std::string convert(const std::optional<T>& optional) {
    type Detail (line 1921) | namespace Detail {
      type EnumInfo (line 1466) | struct EnumInfo {
      function rawMemoryToString (line 1559) | std::string rawMemoryToString( const T& object ) {
      class IsStreamInsertable (line 1564) | class IsStreamInsertable {
      function convertUnstreamable (line 1580) | typename std::enable_if<
      function convertUnstreamable (line 1586) | typename std::enable_if<
      function convertUnstreamable (line 1593) | typename std::enable_if<
      function stringify (line 1644) | std::string stringify(const T& e) {
      function convertUnknownEnumToString (line 1649) | std::string convertUnknownEnumToString( E e ) {
      function rangeToString (line 1829) | std::string rangeToString(InputIterator first, Sentinel last) {
      function stringify (line 1859) | inline std::string stringify( NSString* nsstring ) {
      type TupleElementPrinter (line 1927) | struct TupleElementPrinter {
        method print (line 1928) | static void print(const Tuple& tuple, std::ostream& os) {
      type TupleElementPrinter<Tuple, N, false> (line 1939) | struct TupleElementPrinter<Tuple, N, false> {
        method print (line 1940) | static void print(const Tuple&, std::ostream&) {}
      class Approx (line 3078) | class Approx {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7885) | Approx Approx::custom() {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7889) | Approx Approx::operator-() const {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      class EnumValuesRegistry (line 10567) | class EnumValuesRegistry : public IMutableEnumValuesRegistry {
      function StringRef (line 10594) | StringRef extractInstanceName(StringRef enumInstance) {
      function parseEnums (line 10604) | std::vector<StringRef> parseEnums( StringRef enums ) {
      function StringRef (line 10616) | StringRef EnumInfo::lookup( int value ) const {
      function makeEnumInfo (line 10624) | std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRe...
      function EnumInfo (line 10638) | EnumInfo const& EnumValuesRegistry::registerEnum( StringRef enumName...
      class StreamBufImpl (line 13649) | class StreamBufImpl : public std::streambuf {
        method StreamBufImpl (line 13654) | StreamBufImpl() {
        method overflow (line 13663) | int overflow( int c ) override {
        method sync (line 13675) | int sync() override {
      type OutputDebugWriter (line 13686) | struct OutputDebugWriter {
      class FileStream (line 13695) | class FileStream : public IStream {
        method FileStream (line 13698) | FileStream( StringRef filename ) {
      class CoutStream (line 13711) | class CoutStream : public IStream {
        method CoutStream (line 13716) | CoutStream() : m_os( Catch::cout().rdbuf() ) {}
      class DebugOutStream (line 13725) | class DebugOutStream : public IStream {
        method DebugOutStream (line 13729) | DebugOutStream()
      type Endianness (line 15029) | struct Endianness {
        type Arch (line 15030) | enum Arch { Big, Little }
        method Arch (line 15032) | static Arch which() {
      function rawMemoryToString (line 15042) | std::string rawMemoryToString( const void *object, std::size_t size ) {
    type StringMaker<std::monostate> (line 1962) | struct StringMaker<std::monostate> {
      method convert (line 1963) | static std::string convert(const std::monostate&) {
    type detail (line 1991) | namespace detail {
      type void_type (line 1993) | struct void_type {
      type is_range_impl (line 1998) | struct is_range_impl : std::false_type {
      type is_range_impl<T, typename void_type<decltype(begin(std::declval<T>()))>::type> (line 2002) | struct is_range_impl<T, typename void_type<decltype(begin(std::declv...
    type is_range (line 2007) | struct is_range : detail::is_range_impl<T> {
    type is_range<T^> (line 2012) | struct is_range<T^> {
    function rangeToString (line 2018) | std::string rangeToString( Range const& range ) {
    function rangeToString (line 2024) | std::string rangeToString( std::vector<bool, Allocator> const& v ) {
    type StringMaker<R, typename std::enable_if<is_range<R>::value && !::Catch::Detail::IsStreamInsertable<R>::value>::type> (line 2040) | struct StringMaker<R, typename std::enable_if<is_range<R>::value && !:...
      method convert (line 2041) | static std::string convert( R const& range ) {
    type StringMaker<T[SZ]> (line 2047) | struct StringMaker<T[SZ]> {
      method convert (line 2048) | static std::string convert(T const(&arr)[SZ]) {
    type ratio_string (line 2064) | struct ratio_string {
    type ratio_string<std::atto> (line 2076) | struct ratio_string<std::atto> {
    type ratio_string<std::femto> (line 2080) | struct ratio_string<std::femto> {
    type ratio_string<std::pico> (line 2084) | struct ratio_string<std::pico> {
    type ratio_string<std::nano> (line 2088) | struct ratio_string<std::nano> {
    type ratio_string<std::micro> (line 2092) | struct ratio_string<std::micro> {
    type ratio_string<std::milli> (line 2096) | struct ratio_string<std::milli> {
    type StringMaker<std::chrono::duration<Value, Ratio>> (line 2103) | struct StringMaker<std::chrono::duration<Value, Ratio>> {
      method convert (line 2104) | static std::string convert(std::chrono::duration<Value, Ratio> const...
    type StringMaker<std::chrono::duration<Value, std::ratio<1>>> (line 2111) | struct StringMaker<std::chrono::duration<Value, std::ratio<1>>> {
      method convert (line 2112) | static std::string convert(std::chrono::duration<Value, std::ratio<1...
    type StringMaker<std::chrono::duration<Value, std::ratio<60>>> (line 2119) | struct StringMaker<std::chrono::duration<Value, std::ratio<60>>> {
      method convert (line 2120) | static std::string convert(std::chrono::duration<Value, std::ratio<6...
    type StringMaker<std::chrono::duration<Value, std::ratio<3600>>> (line 2127) | struct StringMaker<std::chrono::duration<Value, std::ratio<3600>>> {
      method convert (line 2128) | static std::string convert(std::chrono::duration<Value, std::ratio<3...
    type StringMaker<std::chrono::time_point<Clock, Duration>> (line 2139) | struct StringMaker<std::chrono::time_point<Clock, Duration>> {
      method convert (line 2140) | static std::string convert(std::chrono::time_point<Clock, Duration> ...
    type StringMaker<std::chrono::time_point<std::chrono::system_clock, Duration>> (line 2146) | struct StringMaker<std::chrono::time_point<std::chrono::system_clock, ...
      method convert (line 2147) | static std::string convert(std::chrono::time_point<std::chrono::syst...
    type ITransientExpression (line 2202) | struct ITransientExpression {
      method isBinaryExpression (line 2203) | auto isBinaryExpression() const -> bool { return m_isBinaryExpressio...
      method getResult (line 2204) | auto getResult() const -> bool { return m_result; }
      method ITransientExpression (line 2207) | ITransientExpression( bool isBinaryExpression, bool result )
    class BinaryExpr (line 2224) | class BinaryExpr  : public ITransientExpression {
      method streamReconstructedExpression (line 2229) | void streamReconstructedExpression( std::ostream &os ) const override {
      method BinaryExpr (line 2235) | BinaryExpr( bool comparisonResult, LhsT lhs, StringRef op, RhsT rhs )
    class UnaryExpr (line 2300) | class UnaryExpr : public ITransientExpression {
      method streamReconstructedExpression (line 2303) | void streamReconstructedExpression( std::ostream &os ) const override {
      method UnaryExpr (line 2308) | explicit UnaryExpr( LhsT lhs )
    function compareEqual (line 2316) | auto compareEqual( LhsT const& lhs, RhsT const& rhs ) -> bool { return...
    function compareEqual (line 2318) | auto compareEqual( T* const& lhs, int rhs ) -> bool { return lhs == re...
    function compareEqual (line 2320) | auto compareEqual( T* const& lhs, long rhs ) -> bool { return lhs == r...
    function compareEqual (line 2322) | auto compareEqual( int lhs, T* const& rhs ) -> bool { return reinterpr...
    function compareEqual (line 2324) | auto compareEqual( long lhs, T* const& rhs ) -> bool { return reinterp...
    function compareNotEqual (line 2327) | auto compareNotEqual( LhsT const& lhs, RhsT&& rhs ) -> bool { return s...
    function compareNotEqual (line 2329) | auto compareNotEqual( T* const& lhs, int rhs ) -> bool { return lhs !=...
    function compareNotEqual (line 2331) | auto compareNotEqual( T* const& lhs, long rhs ) -> bool { return lhs !...
    function compareNotEqual (line 2333) | auto compareNotEqual( int lhs, T* const& rhs ) -> bool { return reinte...
    function compareNotEqual (line 2335) | auto compareNotEqual( long lhs, T* const& rhs ) -> bool { return reint...
    class ExprLhs (line 2338) | class ExprLhs {
      method ExprLhs (line 2341) | explicit ExprLhs( LhsT lhs ) : m_lhs( lhs ) {}
      method makeUnaryExpr (line 2402) | auto makeUnaryExpr() const -> UnaryExpr<LhsT> {
    function handleExpression (line 2410) | void handleExpression( ExprLhs<T> const& expr ) {
    type Decomposer (line 2414) | struct Decomposer {
    class AssertionResult (line 2439) | class AssertionResult
      method AssertionResult (line 5399) | AssertionResult() = delete;
    type AssertionInfo (line 2440) | struct AssertionInfo
    type SectionInfo (line 2441) | struct SectionInfo
      method SectionInfo (line 2866) | SectionInfo
    type SectionEndInfo (line 2442) | struct SectionEndInfo
    type MessageInfo (line 2443) | struct MessageInfo
    type MessageBuilder (line 2444) | struct MessageBuilder
      method MessageBuilder (line 2633) | MessageBuilder& operator << ( T const& value ) {
    type Counts (line 2445) | struct Counts
    type AssertionReaction (line 2446) | struct AssertionReaction
    type SourceLineInfo (line 2447) | struct SourceLineInfo
      method SourceLineInfo (line 504) | SourceLineInfo() = delete;
      method SourceLineInfo (line 505) | SourceLineInfo( char const* _file, std::size_t _line ) noexcept
      method SourceLineInfo (line 510) | SourceLineInfo( SourceLineInfo const& other )            = default;
      method SourceLineInfo (line 511) | SourceLineInfo& operator = ( SourceLineInfo const& )     = default;
      method SourceLineInfo (line 512) | SourceLineInfo( SourceLineInfo&& )              noexcept = default;
      method SourceLineInfo (line 513) | SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default;
      method empty (line 515) | bool empty() const noexcept { return file[0] == '\0'; }
    type ITransientExpression (line 2449) | struct ITransientExpression
      method isBinaryExpression (line 2203) | auto isBinaryExpression() const -> bool { return m_isBinaryExpressio...
      method getResult (line 2204) | auto getResult() const -> bool { return m_result; }
      method ITransientExpression (line 2207) | ITransientExpression( bool isBinaryExpression, bool result )
    type IGeneratorTracker (line 2450) | struct IGeneratorTracker
    type BenchmarkInfo (line 2453) | struct BenchmarkInfo
    type BenchmarkStats (line 2455) | struct BenchmarkStats
    type IResultCapture (line 2458) | struct IResultCapture {
    type TestFailureException (line 2521) | struct TestFailureException{}
    type AssertionResultData (line 2522) | struct AssertionResultData
      method AssertionResultData (line 5385) | AssertionResultData() = delete;
    type IResultCapture (line 2523) | struct IResultCapture
    class RunContext (line 2524) | class RunContext
      method RunContext (line 8064) | RunContext( RunContext const& ) = delete;
      method RunContext (line 8065) | RunContext& operator =( RunContext const& ) = delete;
    class LazyExpression (line 2526) | class LazyExpression {
      method LazyExpression (line 2536) | LazyExpression& operator = ( LazyExpression const& ) = delete;
    type AssertionReaction (line 2543) | struct AssertionReaction {
    class AssertionHandler (line 2548) | class AssertionHandler {
      method handleExpr (line 2567) | void handleExpr( ExprLhs<T> const& expr ) {
    type MessageInfo (line 2599) | struct MessageInfo {
    type MessageStream (line 2616) | struct MessageStream {
      method MessageStream (line 2619) | MessageStream& operator << ( T const& value ) {
    type MessageBuilder (line 2627) | struct MessageBuilder : MessageStream {
      method MessageBuilder (line 2633) | MessageBuilder& operator << ( T const& value ) {
    class ScopedMessage (line 2641) | class ScopedMessage {
      method ScopedMessage (line 2644) | ScopedMessage( ScopedMessage& duplicate ) = delete;
    class Capturer (line 2652) | class Capturer {
      method captureValues (line 2663) | void captureValues( size_t index, T const& value ) {
      method captureValues (line 2668) | void captureValues( size_t index, T const& value, Ts const&... value...
    type Counts (line 2829) | struct Counts {
    type Totals (line 2842) | struct Totals {
    type SectionInfo (line 2860) | struct SectionInfo {
      method SectionInfo (line 2866) | SectionInfo
    type SectionEndInfo (line 2876) | struct SectionEndInfo {
    class Timer (line 2894) | class Timer {
    class Section (line 2911) | class Section : NonCopyable {
    class TestCase (line 2952) | class TestCase
    type ITestCaseRegistry (line 2953) | struct ITestCaseRegistry
    type IExceptionTranslatorRegistry (line 2954) | struct IExceptionTranslatorRegistry
    type IExceptionTranslator (line 2955) | struct IExceptionTranslator
    type IReporterRegistry (line 2956) | struct IReporterRegistry
    type IReporterFactory (line 2957) | struct IReporterFactory
    type ITagAliasRegistry (line 2958) | struct ITagAliasRegistry
    type IMutableEnumValuesRegistry (line 2959) | struct IMutableEnumValuesRegistry
    class StartupExceptionRegistry (line 2961) | class StartupExceptionRegistry
    type IRegistryHub (line 2965) | struct IRegistryHub {
    type IMutableRegistryHub (line 2976) | struct IMutableRegistryHub {
    type IExceptionTranslator (line 3007) | struct IExceptionTranslator
    type IExceptionTranslator (line 3010) | struct IExceptionTranslator {
    type IExceptionTranslatorRegistry (line 3015) | struct IExceptionTranslatorRegistry {
    class ExceptionTranslatorRegistrar (line 3021) | class ExceptionTranslatorRegistrar {
      class ExceptionTranslator (line 3023) | class ExceptionTranslator : public IExceptionTranslator {
        method ExceptionTranslator (line 3026) | ExceptionTranslator( std::string(*translateFunction)( T& ) )
        method translate (line 3030) | std::string translate( ExceptionTranslators::const_iterator it, Ex...
      method ExceptionTranslatorRegistrar (line 3052) | ExceptionTranslatorRegistrar( std::string(*translateFunction)( T& ) ) {
    type Detail (line 3076) | namespace Detail {
      type EnumInfo (line 1466) | struct EnumInfo {
      function rawMemoryToString (line 1559) | std::string rawMemoryToString( const T& object ) {
      class IsStreamInsertable (line 1564) | class IsStreamInsertable {
      function convertUnstreamable (line 1580) | typename std::enable_if<
      function convertUnstreamable (line 1586) | typename std::enable_if<
      function convertUnstreamable (line 1593) | typename std::enable_if<
      function stringify (line 1644) | std::string stringify(const T& e) {
      function convertUnknownEnumToString (line 1649) | std::string convertUnknownEnumToString( E e ) {
      function rangeToString (line 1829) | std::string rangeToString(InputIterator first, Sentinel last) {
      function stringify (line 1859) | inline std::string stringify( NSString* nsstring ) {
      type TupleElementPrinter (line 1927) | struct TupleElementPrinter {
        method print (line 1928) | static void print(const Tuple& tuple, std::ostream& os) {
      type TupleElementPrinter<Tuple, N, false> (line 1939) | struct TupleElementPrinter<Tuple, N, false> {
        method print (line 1940) | static void print(const Tuple&, std::ostream&) {}
      class Approx (line 3078) | class Approx {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7885) | Approx Approx::custom() {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      function Approx (line 7889) | Approx Approx::operator-() const {
        method Approx (line 3096) | Approx operator()( T const& value ) const {
        method Approx (line 3105) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
        method Approx (line 3150) | Approx& epsilon( T const& newEpsilon ) {
        method Approx (line 3157) | Approx& margin( T const& newMargin ) {
        method Approx (line 3164) | Approx& scale( T const& newScale ) {
      class EnumValuesRegistry (line 10567) | class EnumValuesRegistry : public IMutableEnumValuesRegistry {
      function StringRef (line 10594) | StringRef extractInstanceName(StringRef enumInstance) {
      function parseEnums (line 10604) | std::vector<StringRef> parseEnums( StringRef enums ) {
      function StringRef (line 10616) | StringRef EnumInfo::lookup( int value ) const {
      function makeEnumInfo (line 10624) | std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRe...
      function EnumInfo (line 10638) | EnumInfo const& EnumValuesRegistry::registerEnum( StringRef enumName...
      class StreamBufImpl (line 13649) | class StreamBufImpl : public std::streambuf {
        method StreamBufImpl (line 13654) | StreamBufImpl() {
        method overflow (line 13663) | int overflow( int c ) override {
        method sync (line 13675) | int sync() override {
      type OutputDebugWriter (line 13686) | struct OutputDebugWriter {
      class FileStream (line 13695) | class FileStream : public IStream {
        method FileStream (line 13698) | FileStream( StringRef filename ) {
      class CoutStream (line 13711) | class CoutStream : public IStream {
        method CoutStream (line 13716) | CoutStream() : m_os( Catch::cout().rdbuf() ) {}
      class DebugOutStream (line 13725) | class DebugOutStream : public IStream {
        method DebugOutStream (line 13729) | DebugOutStream()
      type Endianness (line 15029) | struct Endianness {
        type Arch (line 15030) | enum Arch { Big, Little }
        method Arch (line 15032) | static Arch which() {
      function rawMemoryToString (line 15042) | std::string rawMemoryToString( const void *object, std::size_t size ) {
    type literals (line 3179) | namespace literals {
    type StringMaker<Catch::Detail::Approx> (line 3185) | struct StringMaker<Catch::Detail::Approx> {
    type pluralise (line 3216) | struct pluralise {
    type Matchers (line 3236) | namespace Matchers {
      type Impl (line 3237) | namespace Impl {
        type MatchAllOf (line 3239) | struct MatchAllOf
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3240) | struct MatchAnyOf
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3241) | struct MatchNotOf
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
        class MatcherUntypedBase (line 3243) | class MatcherUntypedBase {
          method MatcherUntypedBase (line 3245) | MatcherUntypedBase() = default;
          method MatcherUntypedBase (line 3246) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
          method MatcherUntypedBase (line 3247) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
        type MatcherMethod (line 3262) | struct MatcherMethod {
        type MatcherMethod<NSString*> (line 3270) | struct MatcherMethod<NSString*> {
        type MatcherBase (line 3280) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
        type MatchAllOf (line 3288) | struct MatchAllOf : MatcherBase<ArgT> {
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3321) | struct MatchAnyOf : MatcherBase<ArgT> {
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3356) | struct MatchNotOf : MatcherBase<ArgT> {
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
      type Exception (line 3397) | namespace Exception {
        class ExceptionMessageMatcher (line 3399) | class ExceptionMessageMatcher : public MatcherBase<std::exception> {
          method ExceptionMessageMatcher (line 3403) | ExceptionMessageMatcher(std::string const& message):
      type Floating (line 3425) | namespace Floating {
        type FloatingPointKind (line 3427) | enum class FloatingPointKind : uint8_t
        type WithinAbsMatcher (line 3429) | struct WithinAbsMatcher : MatcherBase<double> {
        type WithinUlpsMatcher (line 3438) | struct WithinUlpsMatcher : MatcherBase<double> {
        type WithinRelMatcher (line 3454) | struct WithinRelMatcher : MatcherBase<double> {
        type FloatingPointKind (line 11565) | enum class FloatingPointKind : uint8_t {
      type Generic (line 3488) | namespace Generic {
        type Detail (line 3490) | namespace Detail {
        class PredicateMatcher (line 3495) | class PredicateMatcher : public MatcherBase<T> {
          method PredicateMatcher (line 3500) | PredicateMatcher(std::function<bool(T const&)> const& elem, std:...
          method match (line 3505) | bool match( T const& item ) const override {
          method describe (line 3509) | std::string describe() const override {
      function Predicate (line 3521) | Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)>...
      type StdString (line 3536) | namespace StdString {
        type CasedString (line 3538) | struct CasedString
        type StringMatcherBase (line 3548) | struct StringMatcherBase : MatcherBase<std::string> {
        type EqualsMatcher (line 3556) | struct EqualsMatcher : StringMatcherBase {
        type ContainsMatcher (line 3560) | struct ContainsMatcher : StringMatcherBase {
        type StartsWithMatcher (line 3564) | struct StartsWithMatcher : StringMatcherBase {
        type EndsWithMatcher (line 3568) | struct EndsWithMatcher : StringMatcherBase {
        type RegexMatcher (line 3573) | struct RegexMatcher : MatcherBase<std::string> {
      type Vector (line 3605) | namespace Vector {
        type ContainsElementMatcher (line 3607) | struct ContainsElementMatcher : MatcherBase<std::vector<T, Alloc>> {
          method ContainsElementMatcher (line 3609) | ContainsElementMatcher(T const &comparator) : m_comparator( comp...
          method match (line 3611) | bool match(std::vector<T, Alloc> const &v) const override {
          method describe (line 3620) | std::string describe() const override {
        type ContainsMatcher (line 3628) | struct ContainsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method ContainsMatcher (line 3630) | ContainsMatcher(std::vector<T, AllocComp> const &comparator) : m...
          method match (line 3632) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3650) | std::string describe() const override {
        type EqualsMatcher (line 3658) | struct EqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method EqualsMatcher (line 3660) | EqualsMatcher(std::vector<T, AllocComp> const &comparator) : m_c...
          method match (line 3662) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3674) | std::string describe() const override {
        type ApproxMatcher (line 3681) | struct ApproxMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method ApproxMatcher (line 3683) | ApproxMatcher(std::vector<T, AllocComp> const& comparator) : m_c...
          method match (line 3685) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3693) | std::string describe() const override {
          method ApproxMatcher (line 3697) | ApproxMatcher& epsilon( T const& newEpsilon ) {
          method ApproxMatcher (line 3702) | ApproxMatcher& margin( T const& newMargin ) {
          method ApproxMatcher (line 3707) | ApproxMatcher& scale( T const& newScale ) {
        type UnorderedEqualsMatcher (line 3717) | struct UnorderedEqualsMatcher : MatcherBase<std::vector<T, AllocMa...
          method UnorderedEqualsMatcher (line 3718) | UnorderedEqualsMatcher(std::vector<T, AllocComp> const& target) ...
          method match (line 3719) | bool match(std::vector<T, AllocMatch> const& vec) const override {
          method describe (line 3726) | std::string describe() const override {
      function Contains (line 3739) | Vector::ContainsMatcher<T, AllocComp, AllocMatch> Contains( std::vec...
      function VectorContains (line 3744) | Vector::ContainsElementMatcher<T, Alloc> VectorContains( T const& co...
      function Equals (line 3749) | Vector::EqualsMatcher<T, AllocComp, AllocMatch> Equals( std::vector<...
      function Approx (line 3754) | Vector::ApproxMatcher<T, AllocComp, AllocMatch> Approx( std::vector<...
      function UnorderedEquals (line 3759) | Vector::UnorderedEqualsMatcher<T, AllocComp, AllocMatch> UnorderedEq...
      type Impl (line 11406) | namespace Impl {
        type MatchAllOf (line 3239) | struct MatchAllOf
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3240) | struct MatchAnyOf
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3241) | struct MatchNotOf
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
        class MatcherUntypedBase (line 3243) | class MatcherUntypedBase {
          method MatcherUntypedBase (line 3245) | MatcherUntypedBase() = default;
          method MatcherUntypedBase (line 3246) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
          method MatcherUntypedBase (line 3247) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
        type MatcherMethod (line 3262) | struct MatcherMethod {
        type MatcherMethod<NSString*> (line 3270) | struct MatcherMethod<NSString*> {
        type MatcherBase (line 3280) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
        type MatchAllOf (line 3288) | struct MatchAllOf : MatcherBase<ArgT> {
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3321) | struct MatchAnyOf : MatcherBase<ArgT> {
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3356) | struct MatchNotOf : MatcherBase<ArgT> {
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
      type Exception (line 11428) | namespace Exception {
        class ExceptionMessageMatcher (line 3399) | class ExceptionMessageMatcher : public MatcherBase<std::exception> {
          method ExceptionMessageMatcher (line 3403) | ExceptionMessageMatcher(std::string const& message):
      function Message (line 11439) | Exception::ExceptionMessageMatcher Message(std::string const& messag...
      type Floating (line 11563) | namespace Floating {
        type FloatingPointKind (line 3427) | enum class FloatingPointKind : uint8_t
        type WithinAbsMatcher (line 3429) | struct WithinAbsMatcher : MatcherBase<double> {
        type WithinUlpsMatcher (line 3438) | struct WithinUlpsMatcher : MatcherBase<double> {
        type WithinRelMatcher (line 3454) | struct WithinRelMatcher : MatcherBase<double> {
        type FloatingPointKind (line 11565) | enum class FloatingPointKind : uint8_t {
      function WithinULP (line 11663) | Floating::WithinUlpsMatcher WithinULP(double target, uint64_t maxUlp...
      function WithinULP (line 11667) | Floating::WithinUlpsMatcher WithinULP(float target, uint64_t maxUlpD...
      function WithinAbs (line 11671) | Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
      function WithinRel (line 11675) | Floating::WithinRelMatcher WithinRel(double target, double eps) {
      function WithinRel (line 11679) | Floating::WithinRelMatcher WithinRel(double target) {
      function WithinRel (line 11683) | Floating::WithinRelMatcher WithinRel(float target, float eps) {
      function WithinRel (line 11687) | Floating::WithinRelMatcher WithinRel(float target) {
      type StdString (line 11711) | namespace StdString {
        type CasedString (line 3538) | struct CasedString
        type StringMatcherBase (line 3548) | struct StringMatcherBase : MatcherBase<std::string> {
        type EqualsMatcher (line 3556) | struct EqualsMatcher : StringMatcherBase {
        type ContainsMatcher (line 3560) | struct ContainsMatcher : StringMatcherBase {
        type StartsWithMatcher (line 3564) | struct StartsWithMatcher : StringMatcherBase {
        type EndsWithMatcher (line 3568) | struct EndsWithMatcher : StringMatcherBase {
        type RegexMatcher (line 3573) | struct RegexMatcher : MatcherBase<std::string> {
      function Equals (line 11786) | StdString::EqualsMatcher Equals( std::string const& str, CaseSensiti...
      function Contains (line 11789) | StdString::ContainsMatcher Contains( std::string const& str, CaseSen...
      function EndsWith (line 11792) | StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSen...
      function StartsWith (line 11795) | StdString::StartsWithMatcher StartsWith( std::string const& str, Cas...
      function Matches (line 11799) | StdString::RegexMatcher Matches(std::string const& regex, CaseSensit...
    type Matchers (line 3396) | namespace Matchers {
      type Impl (line 3237) | namespace Impl {
        type MatchAllOf (line 3239) | struct MatchAllOf
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3240) | struct MatchAnyOf
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3241) | struct MatchNotOf
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
        class MatcherUntypedBase (line 3243) | class MatcherUntypedBase {
          method MatcherUntypedBase (line 3245) | MatcherUntypedBase() = default;
          method MatcherUntypedBase (line 3246) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
          method MatcherUntypedBase (line 3247) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
        type MatcherMethod (line 3262) | struct MatcherMethod {
        type MatcherMethod<NSString*> (line 3270) | struct MatcherMethod<NSString*> {
        type MatcherBase (line 3280) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
        type MatchAllOf (line 3288) | struct MatchAllOf : MatcherBase<ArgT> {
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3321) | struct MatchAnyOf : MatcherBase<ArgT> {
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3356) | struct MatchNotOf : MatcherBase<ArgT> {
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
      type Exception (line 3397) | namespace Exception {
        class ExceptionMessageMatcher (line 3399) | class ExceptionMessageMatcher : public MatcherBase<std::exception> {
          method ExceptionMessageMatcher (line 3403) | ExceptionMessageMatcher(std::string const& message):
      type Floating (line 3425) | namespace Floating {
        type FloatingPointKind (line 3427) | enum class FloatingPointKind : uint8_t
        type WithinAbsMatcher (line 3429) | struct WithinAbsMatcher : MatcherBase<double> {
        type WithinUlpsMatcher (line 3438) | struct WithinUlpsMatcher : MatcherBase<double> {
        type WithinRelMatcher (line 3454) | struct WithinRelMatcher : MatcherBase<double> {
        type FloatingPointKind (line 11565) | enum class FloatingPointKind : uint8_t {
      type Generic (line 3488) | namespace Generic {
        type Detail (line 3490) | namespace Detail {
        class PredicateMatcher (line 3495) | class PredicateMatcher : public MatcherBase<T> {
          method PredicateMatcher (line 3500) | PredicateMatcher(std::function<bool(T const&)> const& elem, std:...
          method match (line 3505) | bool match( T const& item ) const override {
          method describe (line 3509) | std::string describe() const override {
      function Predicate (line 3521) | Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)>...
      type StdString (line 3536) | namespace StdString {
        type CasedString (line 3538) | struct CasedString
        type StringMatcherBase (line 3548) | struct StringMatcherBase : MatcherBase<std::string> {
        type EqualsMatcher (line 3556) | struct EqualsMatcher : StringMatcherBase {
        type ContainsMatcher (line 3560) | struct ContainsMatcher : StringMatcherBase {
        type StartsWithMatcher (line 3564) | struct StartsWithMatcher : StringMatcherBase {
        type EndsWithMatcher (line 3568) | struct EndsWithMatcher : StringMatcherBase {
        type RegexMatcher (line 3573) | struct RegexMatcher : MatcherBase<std::string> {
      type Vector (line 3605) | namespace Vector {
        type ContainsElementMatcher (line 3607) | struct ContainsElementMatcher : MatcherBase<std::vector<T, Alloc>> {
          method ContainsElementMatcher (line 3609) | ContainsElementMatcher(T const &comparator) : m_comparator( comp...
          method match (line 3611) | bool match(std::vector<T, Alloc> const &v) const override {
          method describe (line 3620) | std::string describe() const override {
        type ContainsMatcher (line 3628) | struct ContainsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method ContainsMatcher (line 3630) | ContainsMatcher(std::vector<T, AllocComp> const &comparator) : m...
          method match (line 3632) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3650) | std::string describe() const override {
        type EqualsMatcher (line 3658) | struct EqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method EqualsMatcher (line 3660) | EqualsMatcher(std::vector<T, AllocComp> const &comparator) : m_c...
          method match (line 3662) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3674) | std::string describe() const override {
        type ApproxMatcher (line 3681) | struct ApproxMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method ApproxMatcher (line 3683) | ApproxMatcher(std::vector<T, AllocComp> const& comparator) : m_c...
          method match (line 3685) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3693) | std::string describe() const override {
          method ApproxMatcher (line 3697) | ApproxMatcher& epsilon( T const& newEpsilon ) {
          method ApproxMatcher (line 3702) | ApproxMatcher& margin( T const& newMargin ) {
          method ApproxMatcher (line 3707) | ApproxMatcher& scale( T const& newScale ) {
        type UnorderedEqualsMatcher (line 3717) | struct UnorderedEqualsMatcher : MatcherBase<std::vector<T, AllocMa...
          method UnorderedEqualsMatcher (line 3718) | UnorderedEqualsMatcher(std::vector<T, AllocComp> const& target) ...
          method match (line 3719) | bool match(std::vector<T, AllocMatch> const& vec) const override {
          method describe (line 3726) | std::string describe() const override {
      function Contains (line 3739) | Vector::ContainsMatcher<T, AllocComp, AllocMatch> Contains( std::vec...
      function VectorContains (line 3744) | Vector::ContainsElementMatcher<T, Alloc> VectorContains( T const& co...
      function Equals (line 3749) | Vector::EqualsMatcher<T, AllocComp, AllocMatch> Equals( std::vector<...
      function Approx (line 3754) | Vector::ApproxMatcher<T, AllocComp, AllocMatch> Approx( std::vector<...
      function UnorderedEquals (line 3759) | Vector::UnorderedEqualsMatcher<T, AllocComp, AllocMatch> UnorderedEq...
      type Impl (line 11406) | namespace Impl {
        type MatchAllOf (line 3239) | struct MatchAllOf
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3240) | struct MatchAnyOf
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3241) | struct MatchNotOf
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
        class MatcherUntypedBase (line 3243) | class MatcherUntypedBase {
          method MatcherUntypedBase (line 3245) | MatcherUntypedBase() = default;
          method MatcherUntypedBase (line 3246) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
          method MatcherUntypedBase (line 3247) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
        type MatcherMethod (line 3262) | struct MatcherMethod {
        type MatcherMethod<NSString*> (line 3270) | struct MatcherMethod<NSString*> {
        type MatcherBase (line 3280) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
        type MatchAllOf (line 3288) | struct MatchAllOf : MatcherBase<ArgT> {
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3321) | struct MatchAnyOf : MatcherBase<ArgT> {
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3356) | struct MatchNotOf : MatcherBase<ArgT> {
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
      type Exception (line 11428) | namespace Exception {
        class ExceptionMessageMatcher (line 3399) | class ExceptionMessageMatcher : public MatcherBase<std::exception> {
          method ExceptionMessageMatcher (line 3403) | ExceptionMessageMatcher(std::string const& message):
      function Message (line 11439) | Exception::ExceptionMessageMatcher Message(std::string const& messag...
      type Floating (line 11563) | namespace Floating {
        type FloatingPointKind (line 3427) | enum class FloatingPointKind : uint8_t
        type WithinAbsMatcher (line 3429) | struct WithinAbsMatcher : MatcherBase<double> {
        type WithinUlpsMatcher (line 3438) | struct WithinUlpsMatcher : MatcherBase<double> {
        type WithinRelMatcher (line 3454) | struct WithinRelMatcher : MatcherBase<double> {
        type FloatingPointKind (line 11565) | enum class FloatingPointKind : uint8_t {
      function WithinULP (line 11663) | Floating::WithinUlpsMatcher WithinULP(double target, uint64_t maxUlp...
      function WithinULP (line 11667) | Floating::WithinUlpsMatcher WithinULP(float target, uint64_t maxUlpD...
      function WithinAbs (line 11671) | Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
      function WithinRel (line 11675) | Floating::WithinRelMatcher WithinRel(double target, double eps) {
      function WithinRel (line 11679) | Floating::WithinRelMatcher WithinRel(double target) {
      function WithinRel (line 11683) | Floating::WithinRelMatcher WithinRel(float target, float eps) {
      function WithinRel (line 11687) | Floating::WithinRelMatcher WithinRel(float target) {
      type StdString (line 11711) | namespace StdString {
        type CasedString (line 3538) | struct CasedString
        type StringMatcherBase (line 3548) | struct StringMatcherBase : MatcherBase<std::string> {
        type EqualsMatcher (line 3556) | struct EqualsMatcher : StringMatcherBase {
        type ContainsMatcher (line 3560) | struct ContainsMatcher : StringMatcherBase {
        type StartsWithMatcher (line 3564) | struct StartsWithMatcher : StringMatcherBase {
        type EndsWithMatcher (line 3568) | struct EndsWithMatcher : StringMatcherBase {
        type RegexMatcher (line 3573) | struct RegexMatcher : MatcherBase<std::string> {
      function Equals (line 11786) | StdString::EqualsMatcher Equals( std::string const& str, CaseSensiti...
      function Contains (line 11789) | StdString::ContainsMatcher Contains( std::string const& str, CaseSen...
      function EndsWith (line 11792) | StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSen...
      function StartsWith (line 11795) | StdString::StartsWithMatcher StartsWith( std::string const& str, Cas...
      function Matches (line 11799) | StdString::RegexMatcher Matches(std::string const& regex, CaseSensit...
    type Matchers (line 3423) | namespace Matchers {
      type Impl (line 3237) | namespace Impl {
        type MatchAllOf (line 3239) | struct MatchAllOf
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3240) | struct MatchAnyOf
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3241) | struct MatchNotOf
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
        class MatcherUntypedBase (line 3243) | class MatcherUntypedBase {
          method MatcherUntypedBase (line 3245) | MatcherUntypedBase() = default;
          method MatcherUntypedBase (line 3246) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
          method MatcherUntypedBase (line 3247) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
        type MatcherMethod (line 3262) | struct MatcherMethod {
        type MatcherMethod<NSString*> (line 3270) | struct MatcherMethod<NSString*> {
        type MatcherBase (line 3280) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
        type MatchAllOf (line 3288) | struct MatchAllOf : MatcherBase<ArgT> {
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3321) | struct MatchAnyOf : MatcherBase<ArgT> {
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3356) | struct MatchNotOf : MatcherBase<ArgT> {
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
      type Exception (line 3397) | namespace Exception {
        class ExceptionMessageMatcher (line 3399) | class ExceptionMessageMatcher : public MatcherBase<std::exception> {
          method ExceptionMessageMatcher (line 3403) | ExceptionMessageMatcher(std::string const& message):
      type Floating (line 3425) | namespace Floating {
        type FloatingPointKind (line 3427) | enum class FloatingPointKind : uint8_t
        type WithinAbsMatcher (line 3429) | struct WithinAbsMatcher : MatcherBase<double> {
        type WithinUlpsMatcher (line 3438) | struct WithinUlpsMatcher : MatcherBase<double> {
        type WithinRelMatcher (line 3454) | struct WithinRelMatcher : MatcherBase<double> {
        type FloatingPointKind (line 11565) | enum class FloatingPointKind : uint8_t {
      type Generic (line 3488) | namespace Generic {
        type Detail (line 3490) | namespace Detail {
        class PredicateMatcher (line 3495) | class PredicateMatcher : public MatcherBase<T> {
          method PredicateMatcher (line 3500) | PredicateMatcher(std::function<bool(T const&)> const& elem, std:...
          method match (line 3505) | bool match( T const& item ) const override {
          method describe (line 3509) | std::string describe() const override {
      function Predicate (line 3521) | Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)>...
      type StdString (line 3536) | namespace StdString {
        type CasedString (line 3538) | struct CasedString
        type StringMatcherBase (line 3548) | struct StringMatcherBase : MatcherBase<std::string> {
        type EqualsMatcher (line 3556) | struct EqualsMatcher : StringMatcherBase {
        type ContainsMatcher (line 3560) | struct ContainsMatcher : StringMatcherBase {
        type StartsWithMatcher (line 3564) | struct StartsWithMatcher : StringMatcherBase {
        type EndsWithMatcher (line 3568) | struct EndsWithMatcher : StringMatcherBase {
        type RegexMatcher (line 3573) | struct RegexMatcher : MatcherBase<std::string> {
      type Vector (line 3605) | namespace Vector {
        type ContainsElementMatcher (line 3607) | struct ContainsElementMatcher : MatcherBase<std::vector<T, Alloc>> {
          method ContainsElementMatcher (line 3609) | ContainsElementMatcher(T const &comparator) : m_comparator( comp...
          method match (line 3611) | bool match(std::vector<T, Alloc> const &v) const override {
          method describe (line 3620) | std::string describe() const override {
        type ContainsMatcher (line 3628) | struct ContainsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method ContainsMatcher (line 3630) | ContainsMatcher(std::vector<T, AllocComp> const &comparator) : m...
          method match (line 3632) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3650) | std::string describe() const override {
        type EqualsMatcher (line 3658) | struct EqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method EqualsMatcher (line 3660) | EqualsMatcher(std::vector<T, AllocComp> const &comparator) : m_c...
          method match (line 3662) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3674) | std::string describe() const override {
        type ApproxMatcher (line 3681) | struct ApproxMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method ApproxMatcher (line 3683) | ApproxMatcher(std::vector<T, AllocComp> const& comparator) : m_c...
          method match (line 3685) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3693) | std::string describe() const override {
          method ApproxMatcher (line 3697) | ApproxMatcher& epsilon( T const& newEpsilon ) {
          method ApproxMatcher (line 3702) | ApproxMatcher& margin( T const& newMargin ) {
          method ApproxMatcher (line 3707) | ApproxMatcher& scale( T const& newScale ) {
        type UnorderedEqualsMatcher (line 3717) | struct UnorderedEqualsMatcher : MatcherBase<std::vector<T, AllocMa...
          method UnorderedEqualsMatcher (line 3718) | UnorderedEqualsMatcher(std::vector<T, AllocComp> const& target) ...
          method match (line 3719) | bool match(std::vector<T, AllocMatch> const& vec) const override {
          method describe (line 3726) | std::string describe() const override {
      function Contains (line 3739) | Vector::ContainsMatcher<T, AllocComp, AllocMatch> Contains( std::vec...
      function VectorContains (line 3744) | Vector::ContainsElementMatcher<T, Alloc> VectorContains( T const& co...
      function Equals (line 3749) | Vector::EqualsMatcher<T, AllocComp, AllocMatch> Equals( std::vector<...
      function Approx (line 3754) | Vector::ApproxMatcher<T, AllocComp, AllocMatch> Approx( std::vector<...
      function UnorderedEquals (line 3759) | Vector::UnorderedEqualsMatcher<T, AllocComp, AllocMatch> UnorderedEq...
      type Impl (line 11406) | namespace Impl {
        type MatchAllOf (line 3239) | struct MatchAllOf
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3240) | struct MatchAnyOf
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3241) | struct MatchNotOf
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
        class MatcherUntypedBase (line 3243) | class MatcherUntypedBase {
          method MatcherUntypedBase (line 3245) | MatcherUntypedBase() = default;
          method MatcherUntypedBase (line 3246) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
          method MatcherUntypedBase (line 3247) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
        type MatcherMethod (line 3262) | struct MatcherMethod {
        type MatcherMethod<NSString*> (line 3270) | struct MatcherMethod<NSString*> {
        type MatcherBase (line 3280) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
        type MatchAllOf (line 3288) | struct MatchAllOf : MatcherBase<ArgT> {
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3321) | struct MatchAnyOf : MatcherBase<ArgT> {
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3356) | struct MatchNotOf : MatcherBase<ArgT> {
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
      type Exception (line 11428) | namespace Exception {
        class ExceptionMessageMatcher (line 3399) | class ExceptionMessageMatcher : public MatcherBase<std::exception> {
          method ExceptionMessageMatcher (line 3403) | ExceptionMessageMatcher(std::string const& message):
      function Message (line 11439) | Exception::ExceptionMessageMatcher Message(std::string const& messag...
      type Floating (line 11563) | namespace Floating {
        type FloatingPointKind (line 3427) | enum class FloatingPointKind : uint8_t
        type WithinAbsMatcher (line 3429) | struct WithinAbsMatcher : MatcherBase<double> {
        type WithinUlpsMatcher (line 3438) | struct WithinUlpsMatcher : MatcherBase<double> {
        type WithinRelMatcher (line 3454) | struct WithinRelMatcher : MatcherBase<double> {
        type FloatingPointKind (line 11565) | enum class FloatingPointKind : uint8_t {
      function WithinULP (line 11663) | Floating::WithinUlpsMatcher WithinULP(double target, uint64_t maxUlp...
      function WithinULP (line 11667) | Floating::WithinUlpsMatcher WithinULP(float target, uint64_t maxUlpD...
      function WithinAbs (line 11671) | Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
      function WithinRel (line 11675) | Floating::WithinRelMatcher WithinRel(double target, double eps) {
      function WithinRel (line 11679) | Floating::WithinRelMatcher WithinRel(double target) {
      function WithinRel (line 11683) | Floating::WithinRelMatcher WithinRel(float target, float eps) {
      function WithinRel (line 11687) | Floating::WithinRelMatcher WithinRel(float target) {
      type StdString (line 11711) | namespace StdString {
        type CasedString (line 3538) | struct CasedString
        type StringMatcherBase (line 3548) | struct StringMatcherBase : MatcherBase<std::string> {
        type EqualsMatcher (line 3556) | struct EqualsMatcher : StringMatcherBase {
        type ContainsMatcher (line 3560) | struct ContainsMatcher : StringMatcherBase {
        type StartsWithMatcher (line 3564) | struct StartsWithMatcher : StringMatcherBase {
        type EndsWithMatcher (line 3568) | struct EndsWithMatcher : StringMatcherBase {
        type RegexMatcher (line 3573) | struct RegexMatcher : MatcherBase<std::string> {
      function Equals (line 11786) | StdString::EqualsMatcher Equals( std::string const& str, CaseSensiti...
      function Contains (line 11789) | StdString::ContainsMatcher Contains( std::string const& str, CaseSen...
      function EndsWith (line 11792) | StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSen...
      function StartsWith (line 11795) | StdString::StartsWithMatcher StartsWith( std::string const& str, Cas...
      function Matches (line 11799) | StdString::RegexMatcher Matches(std::string const& regex, CaseSensit...
    type Matchers (line 3487) | namespace Matchers {
      type Impl (line 3237) | namespace Impl {
        type MatchAllOf (line 3239) | struct MatchAllOf
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3240) | struct MatchAnyOf
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3241) | struct MatchNotOf
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
        class MatcherUntypedBase (line 3243) | class MatcherUntypedBase {
          method MatcherUntypedBase (line 3245) | MatcherUntypedBase() = default;
          method MatcherUntypedBase (line 3246) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
          method MatcherUntypedBase (line 3247) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
        type MatcherMethod (line 3262) | struct MatcherMethod {
        type MatcherMethod<NSString*> (line 3270) | struct MatcherMethod<NSString*> {
        type MatcherBase (line 3280) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
        type MatchAllOf (line 3288) | struct MatchAllOf : MatcherBase<ArgT> {
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3321) | struct MatchAnyOf : MatcherBase<ArgT> {
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3356) | struct MatchNotOf : MatcherBase<ArgT> {
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
      type Exception (line 3397) | namespace Exception {
        class ExceptionMessageMatcher (line 3399) | class ExceptionMessageMatcher : public MatcherBase<std::exception> {
          method ExceptionMessageMatcher (line 3403) | ExceptionMessageMatcher(std::string const& message):
      type Floating (line 3425) | namespace Floating {
        type FloatingPointKind (line 3427) | enum class FloatingPointKind : uint8_t
        type WithinAbsMatcher (line 3429) | struct WithinAbsMatcher : MatcherBase<double> {
        type WithinUlpsMatcher (line 3438) | struct WithinUlpsMatcher : MatcherBase<double> {
        type WithinRelMatcher (line 3454) | struct WithinRelMatcher : MatcherBase<double> {
        type FloatingPointKind (line 11565) | enum class FloatingPointKind : uint8_t {
      type Generic (line 3488) | namespace Generic {
        type Detail (line 3490) | namespace Detail {
        class PredicateMatcher (line 3495) | class PredicateMatcher : public MatcherBase<T> {
          method PredicateMatcher (line 3500) | PredicateMatcher(std::function<bool(T const&)> const& elem, std:...
          method match (line 3505) | bool match( T const& item ) const override {
          method describe (line 3509) | std::string describe() const override {
      function Predicate (line 3521) | Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)>...
      type StdString (line 3536) | namespace StdString {
        type CasedString (line 3538) | struct CasedString
        type StringMatcherBase (line 3548) | struct StringMatcherBase : MatcherBase<std::string> {
        type EqualsMatcher (line 3556) | struct EqualsMatcher : StringMatcherBase {
        type ContainsMatcher (line 3560) | struct ContainsMatcher : StringMatcherBase {
        type StartsWithMatcher (line 3564) | struct StartsWithMatcher : StringMatcherBase {
        type EndsWithMatcher (line 3568) | struct EndsWithMatcher : StringMatcherBase {
        type RegexMatcher (line 3573) | struct RegexMatcher : MatcherBase<std::string> {
      type Vector (line 3605) | namespace Vector {
        type ContainsElementMatcher (line 3607) | struct ContainsElementMatcher : MatcherBase<std::vector<T, Alloc>> {
          method ContainsElementMatcher (line 3609) | ContainsElementMatcher(T const &comparator) : m_comparator( comp...
          method match (line 3611) | bool match(std::vector<T, Alloc> const &v) const override {
          method describe (line 3620) | std::string describe() const override {
        type ContainsMatcher (line 3628) | struct ContainsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method ContainsMatcher (line 3630) | ContainsMatcher(std::vector<T, AllocComp> const &comparator) : m...
          method match (line 3632) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3650) | std::string describe() const override {
        type EqualsMatcher (line 3658) | struct EqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method EqualsMatcher (line 3660) | EqualsMatcher(std::vector<T, AllocComp> const &comparator) : m_c...
          method match (line 3662) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3674) | std::string describe() const override {
        type ApproxMatcher (line 3681) | struct ApproxMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method ApproxMatcher (line 3683) | ApproxMatcher(std::vector<T, AllocComp> const& comparator) : m_c...
          method match (line 3685) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3693) | std::string describe() const override {
          method ApproxMatcher (line 3697) | ApproxMatcher& epsilon( T const& newEpsilon ) {
          method ApproxMatcher (line 3702) | ApproxMatcher& margin( T const& newMargin ) {
          method ApproxMatcher (line 3707) | ApproxMatcher& scale( T const& newScale ) {
        type UnorderedEqualsMatcher (line 3717) | struct UnorderedEqualsMatcher : MatcherBase<std::vector<T, AllocMa...
          method UnorderedEqualsMatcher (line 3718) | UnorderedEqualsMatcher(std::vector<T, AllocComp> const& target) ...
          method match (line 3719) | bool match(std::vector<T, AllocMatch> const& vec) const override {
          method describe (line 3726) | std::string describe() const override {
      function Contains (line 3739) | Vector::ContainsMatcher<T, AllocComp, AllocMatch> Contains( std::vec...
      function VectorContains (line 3744) | Vector::ContainsElementMatcher<T, Alloc> VectorContains( T const& co...
      function Equals (line 3749) | Vector::EqualsMatcher<T, AllocComp, AllocMatch> Equals( std::vector<...
      function Approx (line 3754) | Vector::ApproxMatcher<T, AllocComp, AllocMatch> Approx( std::vector<...
      function UnorderedEquals (line 3759) | Vector::UnorderedEqualsMatcher<T, AllocComp, AllocMatch> UnorderedEq...
      type Impl (line 11406) | namespace Impl {
        type MatchAllOf (line 3239) | struct MatchAllOf
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3240) | struct MatchAnyOf
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3241) | struct MatchNotOf
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
        class MatcherUntypedBase (line 3243) | class MatcherUntypedBase {
          method MatcherUntypedBase (line 3245) | MatcherUntypedBase() = default;
          method MatcherUntypedBase (line 3246) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
          method MatcherUntypedBase (line 3247) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
        type MatcherMethod (line 3262) | struct MatcherMethod {
        type MatcherMethod<NSString*> (line 3270) | struct MatcherMethod<NSString*> {
        type MatcherBase (line 3280) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
        type MatchAllOf (line 3288) | struct MatchAllOf : MatcherBase<ArgT> {
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3321) | struct MatchAnyOf : MatcherBase<ArgT> {
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3356) | struct MatchNotOf : MatcherBase<ArgT> {
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
      type Exception (line 11428) | namespace Exception {
        class ExceptionMessageMatcher (line 3399) | class ExceptionMessageMatcher : public MatcherBase<std::exception> {
          method ExceptionMessageMatcher (line 3403) | ExceptionMessageMatcher(std::string const& message):
      function Message (line 11439) | Exception::ExceptionMessageMatcher Message(std::string const& messag...
      type Floating (line 11563) | namespace Floating {
        type FloatingPointKind (line 3427) | enum class FloatingPointKind : uint8_t
        type WithinAbsMatcher (line 3429) | struct WithinAbsMatcher : MatcherBase<double> {
        type WithinUlpsMatcher (line 3438) | struct WithinUlpsMatcher : MatcherBase<double> {
        type WithinRelMatcher (line 3454) | struct WithinRelMatcher : MatcherBase<double> {
        type FloatingPointKind (line 11565) | enum class FloatingPointKind : uint8_t {
      function WithinULP (line 11663) | Floating::WithinUlpsMatcher WithinULP(double target, uint64_t maxUlp...
      function WithinULP (line 11667) | Floating::WithinUlpsMatcher WithinULP(float target, uint64_t maxUlpD...
      function WithinAbs (line 11671) | Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
      function WithinRel (line 11675) | Floating::WithinRelMatcher WithinRel(double target, double eps) {
      function WithinRel (line 11679) | Floating::WithinRelMatcher WithinRel(double target) {
      function WithinRel (line 11683) | Floating::WithinRelMatcher WithinRel(float target, float eps) {
      function WithinRel (line 11687) | Floating::WithinRelMatcher WithinRel(float target) {
      type StdString (line 11711) | namespace StdString {
        type CasedString (line 3538) | struct CasedString
        type StringMatcherBase (line 3548) | struct StringMatcherBase : MatcherBase<std::string> {
        type EqualsMatcher (line 3556) | struct EqualsMatcher : StringMatcherBase {
        type ContainsMatcher (line 3560) | struct ContainsMatcher : StringMatcherBase {
        type StartsWithMatcher (line 3564) | struct StartsWithMatcher : StringMatcherBase {
        type EndsWithMatcher (line 3568) | struct EndsWithMatcher : StringMatcherBase {
        type RegexMatcher (line 3573) | struct RegexMatcher : MatcherBase<std::string> {
      function Equals (line 11786) | StdString::EqualsMatcher Equals( std::string const& str, CaseSensiti...
      function Contains (line 11789) | StdString::ContainsMatcher Contains( std::string const& str, CaseSen...
      function EndsWith (line 11792) | StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSen...
      function StartsWith (line 11795) | StdString::StartsWithMatcher StartsWith( std::string const& str, Cas...
      function Matches (line 11799) | StdString::RegexMatcher Matches(std::string const& regex, CaseSensit...
    type Matchers (line 3534) | namespace Matchers {
      type Impl (line 3237) | namespace Impl {
        type MatchAllOf (line 3239) | struct MatchAllOf
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3240) | struct MatchAnyOf
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3241) | struct MatchNotOf
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
        class MatcherUntypedBase (line 3243) | class MatcherUntypedBase {
          method MatcherUntypedBase (line 3245) | MatcherUntypedBase() = default;
          method MatcherUntypedBase (line 3246) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
          method MatcherUntypedBase (line 3247) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
        type MatcherMethod (line 3262) | struct MatcherMethod {
        type MatcherMethod<NSString*> (line 3270) | struct MatcherMethod<NSString*> {
        type MatcherBase (line 3280) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
        type MatchAllOf (line 3288) | struct MatchAllOf : MatcherBase<ArgT> {
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3321) | struct MatchAnyOf : MatcherBase<ArgT> {
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3356) | struct MatchNotOf : MatcherBase<ArgT> {
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
      type Exception (line 3397) | namespace Exception {
        class ExceptionMessageMatcher (line 3399) | class ExceptionMessageMatcher : public MatcherBase<std::exception> {
          method ExceptionMessageMatcher (line 3403) | ExceptionMessageMatcher(std::string const& message):
      type Floating (line 3425) | namespace Floating {
        type FloatingPointKind (line 3427) | enum class FloatingPointKind : uint8_t
        type WithinAbsMatcher (line 3429) | struct WithinAbsMatcher : MatcherBase<double> {
        type WithinUlpsMatcher (line 3438) | struct WithinUlpsMatcher : MatcherBase<double> {
        type WithinRelMatcher (line 3454) | struct WithinRelMatcher : MatcherBase<double> {
        type FloatingPointKind (line 11565) | enum class FloatingPointKind : uint8_t {
      type Generic (line 3488) | namespace Generic {
        type Detail (line 3490) | namespace Detail {
        class PredicateMatcher (line 3495) | class PredicateMatcher : public MatcherBase<T> {
          method PredicateMatcher (line 3500) | PredicateMatcher(std::function<bool(T const&)> const& elem, std:...
          method match (line 3505) | bool match( T const& item ) const override {
          method describe (line 3509) | std::string describe() const override {
      function Predicate (line 3521) | Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)>...
      type StdString (line 3536) | namespace StdString {
        type CasedString (line 3538) | struct CasedString
        type StringMatcherBase (line 3548) | struct StringMatcherBase : MatcherBase<std::string> {
        type EqualsMatcher (line 3556) | struct EqualsMatcher : StringMatcherBase {
        type ContainsMatcher (line 3560) | struct ContainsMatcher : StringMatcherBase {
        type StartsWithMatcher (line 3564) | struct StartsWithMatcher : StringMatcherBase {
        type EndsWithMatcher (line 3568) | struct EndsWithMatcher : StringMatcherBase {
        type RegexMatcher (line 3573) | struct RegexMatcher : MatcherBase<std::string> {
      type Vector (line 3605) | namespace Vector {
        type ContainsElementMatcher (line 3607) | struct ContainsElementMatcher : MatcherBase<std::vector<T, Alloc>> {
          method ContainsElementMatcher (line 3609) | ContainsElementMatcher(T const &comparator) : m_comparator( comp...
          method match (line 3611) | bool match(std::vector<T, Alloc> const &v) const override {
          method describe (line 3620) | std::string describe() const override {
        type ContainsMatcher (line 3628) | struct ContainsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method ContainsMatcher (line 3630) | ContainsMatcher(std::vector<T, AllocComp> const &comparator) : m...
          method match (line 3632) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3650) | std::string describe() const override {
        type EqualsMatcher (line 3658) | struct EqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method EqualsMatcher (line 3660) | EqualsMatcher(std::vector<T, AllocComp> const &comparator) : m_c...
          method match (line 3662) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3674) | std::string describe() const override {
        type ApproxMatcher (line 3681) | struct ApproxMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method ApproxMatcher (line 3683) | ApproxMatcher(std::vector<T, AllocComp> const& comparator) : m_c...
          method match (line 3685) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3693) | std::string describe() const override {
          method ApproxMatcher (line 3697) | ApproxMatcher& epsilon( T const& newEpsilon ) {
          method ApproxMatcher (line 3702) | ApproxMatcher& margin( T const& newMargin ) {
          method ApproxMatcher (line 3707) | ApproxMatcher& scale( T const& newScale ) {
        type UnorderedEqualsMatcher (line 3717) | struct UnorderedEqualsMatcher : MatcherBase<std::vector<T, AllocMa...
          method UnorderedEqualsMatcher (line 3718) | UnorderedEqualsMatcher(std::vector<T, AllocComp> const& target) ...
          method match (line 3719) | bool match(std::vector<T, AllocMatch> const& vec) const override {
          method describe (line 3726) | std::string describe() const override {
      function Contains (line 3739) | Vector::ContainsMatcher<T, AllocComp, AllocMatch> Contains( std::vec...
      function VectorContains (line 3744) | Vector::ContainsElementMatcher<T, Alloc> VectorContains( T const& co...
      function Equals (line 3749) | Vector::EqualsMatcher<T, AllocComp, AllocMatch> Equals( std::vector<...
      function Approx (line 3754) | Vector::ApproxMatcher<T, AllocComp, AllocMatch> Approx( std::vector<...
      function UnorderedEquals (line 3759) | Vector::UnorderedEqualsMatcher<T, AllocComp, AllocMatch> UnorderedEq...
      type Impl (line 11406) | namespace Impl {
        type MatchAllOf (line 3239) | struct MatchAllOf
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3240) | struct MatchAnyOf
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3241) | struct MatchNotOf
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
        class MatcherUntypedBase (line 3243) | class MatcherUntypedBase {
          method MatcherUntypedBase (line 3245) | MatcherUntypedBase() = default;
          method MatcherUntypedBase (line 3246) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
          method MatcherUntypedBase (line 3247) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
        type MatcherMethod (line 3262) | struct MatcherMethod {
        type MatcherMethod<NSString*> (line 3270) | struct MatcherMethod<NSString*> {
        type MatcherBase (line 3280) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
        type MatchAllOf (line 3288) | struct MatchAllOf : MatcherBase<ArgT> {
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3321) | struct MatchAnyOf : MatcherBase<ArgT> {
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3356) | struct MatchNotOf : MatcherBase<ArgT> {
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
      type Exception (line 11428) | namespace Exception {
        class ExceptionMessageMatcher (line 3399) | class ExceptionMessageMatcher : public MatcherBase<std::exception> {
          method ExceptionMessageMatcher (line 3403) | ExceptionMessageMatcher(std::string const& message):
      function Message (line 11439) | Exception::ExceptionMessageMatcher Message(std::string const& messag...
      type Floating (line 11563) | namespace Floating {
        type FloatingPointKind (line 3427) | enum class FloatingPointKind : uint8_t
        type WithinAbsMatcher (line 3429) | struct WithinAbsMatcher : MatcherBase<double> {
        type WithinUlpsMatcher (line 3438) | struct WithinUlpsMatcher : MatcherBase<double> {
        type WithinRelMatcher (line 3454) | struct WithinRelMatcher : MatcherBase<double> {
        type FloatingPointKind (line 11565) | enum class FloatingPointKind : uint8_t {
      function WithinULP (line 11663) | Floating::WithinUlpsMatcher WithinULP(double target, uint64_t maxUlp...
      function WithinULP (line 11667) | Floating::WithinUlpsMatcher WithinULP(float target, uint64_t maxUlpD...
      function WithinAbs (line 11671) | Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
      function WithinRel (line 11675) | Floating::WithinRelMatcher WithinRel(double target, double eps) {
      function WithinRel (line 11679) | Floating::WithinRelMatcher WithinRel(double target) {
      function WithinRel (line 11683) | Floating::WithinRelMatcher WithinRel(float target, float eps) {
      function WithinRel (line 11687) | Floating::WithinRelMatcher WithinRel(float target) {
      type StdString (line 11711) | namespace StdString {
        type CasedString (line 3538) | struct CasedString
        type StringMatcherBase (line 3548) | struct StringMatcherBase : MatcherBase<std::string> {
        type EqualsMatcher (line 3556) | struct EqualsMatcher : StringMatcherBase {
        type ContainsMatcher (line 3560) | struct ContainsMatcher : StringMatcherBase {
        type StartsWithMatcher (line 3564) | struct StartsWithMatcher : StringMatcherBase {
        type EndsWithMatcher (line 3568) | struct EndsWithMatcher : StringMatcherBase {
        type RegexMatcher (line 3573) | struct RegexMatcher : MatcherBase<std::string> {
      function Equals (line 11786) | StdString::EqualsMatcher Equals( std::string const& str, CaseSensiti...
      function Contains (line 11789) | StdString::ContainsMatcher Contains( std::string const& str, CaseSen...
      function EndsWith (line 11792) | StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSen...
      function StartsWith (line 11795) | StdString::StartsWithMatcher StartsWith( std::string const& str, Cas...
      function Matches (line 11799) | StdString::RegexMatcher Matches(std::string const& regex, CaseSensit...
    type Matchers (line 3603) | namespace Matchers {
      type Impl (line 3237) | namespace Impl {
        type MatchAllOf (line 3239) | struct MatchAllOf
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3240) | struct MatchAnyOf
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3241) | struct MatchNotOf
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
        class MatcherUntypedBase (line 3243) | class MatcherUntypedBase {
          method MatcherUntypedBase (line 3245) | MatcherUntypedBase() = default;
          method MatcherUntypedBase (line 3246) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
          method MatcherUntypedBase (line 3247) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
        type MatcherMethod (line 3262) | struct MatcherMethod {
        type MatcherMethod<NSString*> (line 3270) | struct MatcherMethod<NSString*> {
        type MatcherBase (line 3280) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
        type MatchAllOf (line 3288) | struct MatchAllOf : MatcherBase<ArgT> {
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3321) | struct MatchAnyOf : MatcherBase<ArgT> {
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3356) | struct MatchNotOf : MatcherBase<ArgT> {
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
      type Exception (line 3397) | namespace Exception {
        class ExceptionMessageMatcher (line 3399) | class ExceptionMessageMatcher : public MatcherBase<std::exception> {
          method ExceptionMessageMatcher (line 3403) | ExceptionMessageMatcher(std::string const& message):
      type Floating (line 3425) | namespace Floating {
        type FloatingPointKind (line 3427) | enum class FloatingPointKind : uint8_t
        type WithinAbsMatcher (line 3429) | struct WithinAbsMatcher : MatcherBase<double> {
        type WithinUlpsMatcher (line 3438) | struct WithinUlpsMatcher : MatcherBase<double> {
        type WithinRelMatcher (line 3454) | struct WithinRelMatcher : MatcherBase<double> {
        type FloatingPointKind (line 11565) | enum class FloatingPointKind : uint8_t {
      type Generic (line 3488) | namespace Generic {
        type Detail (line 3490) | namespace Detail {
        class PredicateMatcher (line 3495) | class PredicateMatcher : public MatcherBase<T> {
          method PredicateMatcher (line 3500) | PredicateMatcher(std::function<bool(T const&)> const& elem, std:...
          method match (line 3505) | bool match( T const& item ) const override {
          method describe (line 3509) | std::string describe() const override {
      function Predicate (line 3521) | Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)>...
      type StdString (line 3536) | namespace StdString {
        type CasedString (line 3538) | struct CasedString
        type StringMatcherBase (line 3548) | struct StringMatcherBase : MatcherBase<std::string> {
        type EqualsMatcher (line 3556) | struct EqualsMatcher : StringMatcherBase {
        type ContainsMatcher (line 3560) | struct ContainsMatcher : StringMatcherBase {
        type StartsWithMatcher (line 3564) | struct StartsWithMatcher : StringMatcherBase {
        type EndsWithMatcher (line 3568) | struct EndsWithMatcher : StringMatcherBase {
        type RegexMatcher (line 3573) | struct RegexMatcher : MatcherBase<std::string> {
      type Vector (line 3605) | namespace Vector {
        type ContainsElementMatcher (line 3607) | struct ContainsElementMatcher : MatcherBase<std::vector<T, Alloc>> {
          method ContainsElementMatcher (line 3609) | ContainsElementMatcher(T const &comparator) : m_comparator( comp...
          method match (line 3611) | bool match(std::vector<T, Alloc> const &v) const override {
          method describe (line 3620) | std::string describe() const override {
        type ContainsMatcher (line 3628) | struct ContainsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method ContainsMatcher (line 3630) | ContainsMatcher(std::vector<T, AllocComp> const &comparator) : m...
          method match (line 3632) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3650) | std::string describe() const override {
        type EqualsMatcher (line 3658) | struct EqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method EqualsMatcher (line 3660) | EqualsMatcher(std::vector<T, AllocComp> const &comparator) : m_c...
          method match (line 3662) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3674) | std::string describe() const override {
        type ApproxMatcher (line 3681) | struct ApproxMatcher : MatcherBase<std::vector<T, AllocMatch>> {
          method ApproxMatcher (line 3683) | ApproxMatcher(std::vector<T, AllocComp> const& comparator) : m_c...
          method match (line 3685) | bool match(std::vector<T, AllocMatch> const &v) const override {
          method describe (line 3693) | std::string describe() const override {
          method ApproxMatcher (line 3697) | ApproxMatcher& epsilon( T const& newEpsilon ) {
          method ApproxMatcher (line 3702) | ApproxMatcher& margin( T const& newMargin ) {
          method ApproxMatcher (line 3707) | ApproxMatcher& scale( T const& newScale ) {
        type UnorderedEqualsMatcher (line 3717) | struct UnorderedEqualsMatcher : MatcherBase<std::vector<T, AllocMa...
          method UnorderedEqualsMatcher (line 3718) | UnorderedEqualsMatcher(std::vector<T, AllocComp> const& target) ...
          method match (line 3719) | bool match(std::vector<T, AllocMatch> const& vec) const override {
          method describe (line 3726) | std::string describe() const override {
      function Contains (line 3739) | Vector::ContainsMatcher<T, AllocComp, AllocMatch> Contains( std::vec...
      function VectorContains (line 3744) | Vector::ContainsElementMatcher<T, Alloc> VectorContains( T const& co...
      function Equals (line 3749) | Vector::EqualsMatcher<T, AllocComp, AllocMatch> Equals( std::vector<...
      function Approx (line 3754) | Vector::ApproxMatcher<T, AllocComp, AllocMatch> Approx( std::vector<...
      function UnorderedEquals (line 3759) | Vector::UnorderedEqualsMatcher<T, AllocComp, AllocMatch> UnorderedEq...
      type Impl (line 11406) | namespace Impl {
        type MatchAllOf (line 3239) | struct MatchAllOf
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3240) | struct MatchAnyOf
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3241) | struct MatchNotOf
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
        class MatcherUntypedBase (line 3243) | class MatcherUntypedBase {
          method MatcherUntypedBase (line 3245) | MatcherUntypedBase() = default;
          method MatcherUntypedBase (line 3246) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
          method MatcherUntypedBase (line 3247) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
        type MatcherMethod (line 3262) | struct MatcherMethod {
        type MatcherMethod<NSString*> (line 3270) | struct MatcherMethod<NSString*> {
        type MatcherBase (line 3280) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
        type MatchAllOf (line 3288) | struct MatchAllOf : MatcherBase<ArgT> {
          method match (line 3289) | bool match( ArgT const& arg ) const override {
          method describe (line 3296) | std::string describe() const override {
        type MatchAnyOf (line 3321) | struct MatchAnyOf : MatcherBase<ArgT> {
          method match (line 3323) | bool match( ArgT const& arg ) const override {
          method describe (line 3330) | std::string describe() const override {
        type MatchNotOf (line 3356) | struct MatchNotOf : MatcherBase<ArgT> {
          method MatchNotOf (line 3358) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
          method match (line 3360) | bool match( ArgT const& arg ) const override {
          method describe (line 3364) | std::string describe() const override {
      type Exception (line 11428) | namespace Exception {
        class ExceptionMessageMatcher (line 3399) | class ExceptionMessageMatcher : public MatcherBase<std::exception> {
          method ExceptionMessageMatcher (line 3403) | ExceptionMessageMatcher(std::string const& message):
      function Message (line 11439) | Exception::ExceptionMessageMatcher Message(std::string const& messag...
      type Floating (line 11563) | namespace Floating {
        type FloatingPointKind (line 3427) | enum class FloatingPointKind : uint8_t
        type WithinAbsMatcher (line 3429) | struct WithinAbsMatcher : MatcherBase<double> {
        type WithinUlpsMatcher (line 3438) | struct WithinUlpsMatcher : MatcherBase<double> {
        type WithinRelMatcher (line 3454) | struct WithinRelMatcher : MatcherBase<double> {
        type FloatingPointKind (line 11565) | enum class FloatingPointKind : uint8_t {
      function WithinULP (line 11663) | Floating::WithinUlpsMatcher WithinULP(double target, uint64_t maxUlp...
      function WithinULP (line 11667) | Floating::WithinUlpsMatcher WithinULP(float target, uint64_t maxUlpD...
      function WithinAbs (line 11671) | Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
      function WithinRel (line 11675) | Floating::WithinRelMatcher WithinRel(double target, double eps) {
      function WithinRel (line 11679) | Floating::WithinRelMatcher WithinRel(double target) {
      function WithinRel (line 11683) | Floating::WithinRelMatcher WithinRel(float target, float eps) {
      function WithinRel (line 11687) | Floating::WithinRelMatcher WithinRel(float target) {
      type StdString (line 11711) | namespace StdString {
        type CasedString (line 3538) | struct CasedString
        type StringMatcherBase (line 3548) | struct StringMatcherBase : MatcherBase<std::string> {
        type EqualsMatcher (line 3556) | struct EqualsMatcher : StringMatcherBase {
        type ContainsMatcher (line 3560) | struct ContainsMatcher : StringMatcherBase {
        type StartsWithMatcher (line 3564) | struct StartsWithMatcher : StringMatcherBase {
        type EndsWithMatcher (line 3568) | struct EndsWithMatcher : StringMatcherBase {
        type RegexMatcher (line 3573) | struct RegexMatcher : MatcherBase<std::string> {
      function Equals (line 11786) | StdString::EqualsMatcher Equals( std::string const& str, CaseSensiti...
      function Contains (line 11789) | StdString::ContainsMatcher Contains( std::string const& str, CaseSen...
      function EndsWith (line 11792) | StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSen...
      function StartsWith (line 11795) | StdString::StartsWithMatcher StartsWith( std::string const& str, Cas...
      function Matches (line 11799) | StdString::RegexMatcher Matches(std::string const& regex, CaseSensit...
    class MatchExpr (line 3770) | class MatchExpr : public ITransientExpression {
      method MatchExpr (line 3775) | MatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef const...
      method streamReconstructedExpression (line 3782) | void streamReconstructedExpression( std::ostream &os ) const override {
    function makeMatchExpr (line 3797) | auto makeMatchExpr( ArgT const& arg, MatcherT const& matcher, StringRe...
    type Generators (line 3844) | namespace Generators {
      class GeneratorUntypedBase (line 3845) | class GeneratorUntypedBase {
        method GeneratorUntypedBase (line 3847) | GeneratorUntypedBase() = default;
      type pf (line 3933) | namespace pf{
        function make_unique (line 3935) | std::unique_ptr<T> make_unique( Args&&... args ) {
      type IGenerator (line 3941) | struct IGenerator : GeneratorUntypedBase {
      class SingleValueGenerator (line 3953) | class SingleValueGenerator final : public IGenerator<T> {
        method SingleValueGenerator (line 3956) | SingleValueGenerator(T&& value) : m_value(std::move(value)) {}
        method T (line 3958) | T const& get() const override {
        method next (line 3961) | bool next() override {
      class FixedValuesGenerator (line 3967) | class FixedValuesGenerator final : public IGenerator<T> {
        method FixedValuesGenerator (line 3974) | FixedValuesGenerator( std::initializer_list<T> values ) : m_values...
        method T (line 3976) | T const& get() const override {
        method next (line 3979) | bool next() override {
      class GeneratorWrapper (line 3986) | class GeneratorWrapper final {
        method GeneratorWrapper (line 3989) | GeneratorWrapper(std::unique_ptr<IGenerator<T>> generator):
        method T (line 3992) | T const& get() const {
        method next (line 3995) | bool next() {
      function value (line 4001) | GeneratorWrapper<T> value(T&& value) {
      function values (line 4005) | GeneratorWrapper<T> values(std::initializer_list<T> values) {
      class Generators (line 4010) | class Generators : public IGenerator<T> {
        method populate (line 4014) | void populate(GeneratorWrapper<T>&& generator) {
        method populate (line 4017) | void populate(T&& val) {
        method populate (line 4021) | void populate(U&& val) {
        method populate (line 4025) | void populate(U&& valueOrGenerator, Gs &&... moreGenerators) {
        method Generators (line 4032) | Generators(Gs &&... moreGenerators) {
        method T (line 4037) | T const& get() const override {
        method next (line 4041) | bool next() override {
      function table (line 4054) | GeneratorWrapper<std::tuple<Ts...>> table( std::initializer_list<std...
      type as (line 4060) | struct as {}
      function makeGenerators (line 4063) | auto makeGenerators( GeneratorWrapper<T>&& generator, Gs &&... moreG...
      function makeGenerators (line 4067) | auto makeGenerators( GeneratorWrapper<T>&& generator ) -> Generators...
      function makeGenerators (line 4071) | auto makeGenerators( T&& val, Gs &&... moreGenerators ) -> Generator...
      function makeGenerators (line 4075) | auto makeGenerators( as<T>, U&& val, Gs &&... moreGenerators ) -> Ge...
      function generate (line 4085) | auto generate( StringRef generatorName, SourceLineInfo const& lineIn...
      class TakeGenerator (line 4120) | class TakeGenerator : public IGenerator<T> {
        method TakeGenerator (line 4125) | TakeGenerator(size_t target, GeneratorWrapper<T>&& generator):
        method T (line 4131) | T const& get() const override {
        method next (line 4134) | bool next() override {
      function take (line 4151) | GeneratorWrapper<T> take(size_t target, GeneratorWrapper<T>&& genera...
      class FilterGenerator (line 4156) | class FilterGenerator : public IGenerator<T> {
        method FilterGenerator (line 4161) | FilterGenerator(P&& pred, GeneratorWrapper<T>&& generator):
        method T (line 4175) | T const& get() const override {
        method next (line 4179) | bool next() override {
        method nextImpl (line 4184) | bool nextImpl() {
      function filter (line 4195) | GeneratorWrapper<T> filter(Predicate&& pred, GeneratorWrapper<T>&& g...
      class RepeatGenerator (line 4200) | class RepeatGenerator : public IGenerator<T> {
        method RepeatGenerator (line 4210) | RepeatGenerator(size_t repeats, GeneratorWrapper<T>&& generator):
        method T (line 4217) | T const& get() const override {
        method next (line 4225) | bool next() override {
      function repeat (line 4251) | GeneratorWrapper<T> repeat(size_t repeats, GeneratorWrapper<T>&& gen...
      class MapGenerator (line 4256) | class MapGenerator : public IGenerator<T> {
        method MapGenerator (line 4264) | MapGenerator(F2&& function, GeneratorWrapper<U>&& generator) :
        method T (line 4270) | T const& get() const override {
        method next (line 4273) | bool next() override {
      function map (line 4283) | GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& gener...
      function map (line 4290) | GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& gener...
      class ChunkGenerator (line 4297) | class ChunkGenerator final : public IGenerator<std::vector<T>> {
        method ChunkGenerator (line 4303) | ChunkGenerator(size_t size, GeneratorWrapper<T> generator) :
        method next (line 4320) | bool next() override {
      function chunk (line 4333) | GeneratorWrapper<std::vector<T>> chunk(size_t size, GeneratorWrapper...
      class RandomFloatingGenerator (line 4603) | class RandomFloatingGenerator final : public IGenerator<Float> {
        method RandomFloatingGenerator (line 4609) | RandomFloatingGenerator(Float a, Float b):
        method Float (line 4615) | Float const& get() const override {
        method next (line 4618) | bool next() override {
      class RandomIntegerGenerator (line 4625) | class RandomIntegerGenerator final : public IGenerator<Integer> {
        method RandomIntegerGenerator (line 4631) | RandomIntegerGenerator(Integer a, Integer b):
        method Integer (line 4637) | Integer const& get() const override {
        method next (line 4640) | bool next() override {
      function random (line 4649) | typename std::enable_if<std::is_integral<T>::value && !std::is_same<...
      function random (line 4658) | typename std::enable_if<std::is_floating_point<T>::value,
      class RangeGenerator (line 4667) | class RangeGenerator final : public IGenerator<T> {
        method RangeGenerator (line 4674) | RangeGenerator(T const& start, T const& end, T const& step):
        method RangeGenerator (line 4685) | RangeGenerator(T const& start, T const& end):
        method T (line 4689) | T const& get() const override {
        method next (line 4693) | bool next() override {
      function range (line 4700) | GeneratorWrapper<T> range(T const& start, T const& end, T const& ste...
      function range (line 4706) | GeneratorWrapper<T> range(T const& start, T const& end) {
      class IteratorGenerator (line 4712) | class IteratorGenerator final : public IGenerator<T> {
        method IteratorGenerator (line 4721) | IteratorGenerator(InputIterator first, InputSentinel last):m_elems...
        method T (line 4727) | T const& get() const override {
        method next (line 4731) | bool next() override {
      function from_range (line 4740) | GeneratorWrapper<ResultType> from_range(InputIterator from, InputSen...
      function from_range (line 4746) | GeneratorWrapper<ResultType> from_range(Container const& cnt) {
      function acquireGeneratorTracker (line 10982) | auto acquireGeneratorTracker( StringRef generatorName, SourceLineInf...
      type GeneratorTracker (line 12588) | struct GeneratorTracker : TestCaseTracking::TrackerBase, IGeneratorT...
        method GeneratorTracker (line 12591) | GeneratorTracker( TestCaseTracking::NameAndLocation const& nameAnd...
        method GeneratorTracker (line 12596) | static GeneratorTracker& acquire( TrackerContext& ctx, TestCaseTra...
        method isGeneratorTracker (line 12633) | bool isGeneratorTracker() const override { return true; }
        method hasGenerator (line 12634) | auto hasGenerator() const -> bool override {
        method close (line 12637) | void close() override {
        method getGenerator (line 12707) | auto getGenerator() const -> GeneratorBasePtr const& override {
        method setGenerator (line 12710) | void setGenerator( GeneratorBasePtr&& generator ) override {
    type IGeneratorTracker (line 3859) | struct IGeneratorTracker {
    function throw_exception (line 3876) | [[noreturn]]
    class GeneratorException (line 3919) | class GeneratorException : public std::exception {
      method GeneratorException (line 3923) | GeneratorException(const char* msg):
    type Generators (line 3930) | namespace Generators {
      class GeneratorUntypedBase (line 3845) | class GeneratorUntypedBase {
        method GeneratorUntypedBase (line 3847) | GeneratorUntypedBase() = default;
      type pf (line 3933) | namespace pf{
        function make_unique (line 3935) | std::unique_ptr<T> make_unique( Args&&... args ) {
      type IGenerator (line 3941) | struct IGenerator : GeneratorUntypedBase {
      class SingleValueGenerator (line 3953) | class SingleValueGenerator final : public IGenerator<T> {
        method SingleValueGenerator (line 3956) | SingleValueGenerator(T&& value) : m_value(std::move(value)) {}
        method T (line 3958) | T const& get() const override {
        method next (line 3961) | bool next() override {
      class FixedValuesGenerator (line 3967) | class FixedValuesGenerator final : public IGenerator<T> {
        method FixedValuesGenerator (line 3974) | FixedValuesGenerator( std::initializer_list<T> values ) : m_values...
        method T (line 3976) | T const& get() const override {
        method next (line 3979) | bool next() override {
      class GeneratorWrapper (line 3986) | class GeneratorWrapper final {
        method GeneratorWrapper (line 3989) | GeneratorWrapper(std::unique_ptr<IGenerator<T>> generator):
        method T (line 3992) | T const& get() const {
        method next (line 3995) | bool next() {
      function value (line 4001) | GeneratorWrapper<T> value(T&& value) {
      function values (line 4005) | GeneratorWrapper<T> values(std::initializer_list<T> values) {
      class Generators (line 4010) | class Generators : public IGenerator<T> {
        method populate (line 4014) | void populate(GeneratorWrapper<T>&& generator) {
        method populate (line 4017) | void populate(T&& val) {
        method populate (line 4021) | void populate(U&& val) {
        method populate (line 4025) | void populate(U&& valueOrGenerator, Gs &&... moreGenerators) {
        method Generators (line 4032) | Generators(Gs &&... moreGenerators) {
        method T (line 4037) | T const& get() const override {
        method next (line 4041) | bool next() override {
      function table (line 4054) | GeneratorWrapper<std::tuple<Ts...>> table( std::initializer_list<std...
      type as (line 4060) | struct as {}
      function makeGenerators (line 4063) | auto makeGenerators( GeneratorWrapper<T>&& generator, Gs &&... moreG...
      function makeGenerators (line 4067) | auto makeGenerators( GeneratorWrapper<T>&& generator ) -> Generators...
      function makeGenerators (line 4071) | auto makeGenerators( T&& val, Gs &&... moreGenerators ) -> Generator...
      function makeGenerators (line 4075) | auto makeGenerators( as<T>, U&& val, Gs &&... moreGenerators ) -> Ge...
      function generate (line 4085) | auto generate( StringRef generatorName, SourceLineInfo const& lineIn...
      class TakeGenerator (line 4120) | class TakeGenerator : public IGenerator<T> {
        method TakeGenerator (line 4125) | TakeGenerator(size_t target, GeneratorWrapper<T>&& generator):
        method T (line 4131) | T const& get() const override {
        method next (line 4134) | bool next() override {
      function take (line 4151) | GeneratorWrapper<T> take(size_t target, GeneratorWrapper<T>&& genera...
      class FilterGenerator (line 4156) | class FilterGenerator : public IGenerator<T> {
        method FilterGenerator (line 4161) | FilterGenerator(P&& pred, GeneratorWrapper<T>&& generator):
        method T (line 4175) | T const& get() const override {
        method next (line 4179) | bool next() override {
        method nextImpl (line 4184) | bool nextImpl() {
      function filter (line 4195) | GeneratorWrapper<T> filter(Predicate&& pred, GeneratorWrapper<T>&& g...
      class RepeatGenerator (line 4200) | class RepeatGenerator : public IGenerator<T> {
        method RepeatGenerator (line 4210) | RepeatGenerator(size_t repeats, GeneratorWrapper<T>&& generator):
        method T (line 4217) | T const& get() const override {
        method next (line 4225) | bool next() override {
      function repeat (line 4251) | GeneratorWrapper<T> repeat(size_t repeats, GeneratorWrapper<T>&& gen...
      class MapGenerator (line 4256) | class MapGenerator : public IGenerator<T> {
        method MapGenerator (line 4264) | MapGenerator(F2&& function, GeneratorWrapper<U>&& generator) :
        method T (line 4270) | T const& get() const override {
        method next (line 4273) | bool next() override {
      function map (line 4283) | GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& gener...
      function map (line 4290) | GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& gener...
      class ChunkGenerator (line 4297) | class ChunkGenerator final : public IGenerator<std::vector<T>> {
        method ChunkGenerator (line 4303) | ChunkGenerator(size_t size, GeneratorWrapper<T> generator) :
        method next (line 4320) | bool next() override {
      function chunk (line 4333) | GeneratorWrapper<std::vector<T>> chunk(size_t size, GeneratorWrapper...
      class RandomFloatingGenerator (line 4603) | class RandomFloatingGenerator final : public IGenerator<Float> {
        method RandomFloatingGenerator (line 4609) | RandomFloatingGenerator(Float a, Float b):
        method Float (line 4615) | Float const& get() const override {
        method next (line 4618) | bool next() override {
      class RandomIntegerGenerator (line 4625) | class RandomIntegerGenerator final : public IGenerator<Integer> {
        method RandomIntegerGenerator (line 4631) | RandomIntegerGenerator(Integer a, Integer b):
        method Integer (line 4637) | Integer const& get() const override {
        method next (line 4640) | bool next() override {
      function random (line 4649) | typename std::enable_if<std::is_integral<T>::value && !std::is_same<...
      function random (line 4658) | typename std::enable_if<std::is_floating_point<T>::value,
      class RangeGenerator (line 4667) | class RangeGenerator final : public IGenerator<T> {
        method RangeGenerator (line 4674) | RangeGenerator(T const& start, T const& end, T const& step):
        method RangeGenerator (line 4685) | RangeGenerator(T const& start, T const& end):
        method T (line 4689) | T const& get() const override {
        method next (line 4693) | bool next() override {
      function range (line 4700) | GeneratorWrapper<T> range(T const& start, T const& end, T const& ste...
      function range (line 4706) | GeneratorWrapper<T> range(T const& start, T const& end) {
      class IteratorGenerator (line 4712) | class IteratorGenerator final : public IGenerator<T> {
        method IteratorGenerator (line 4721) | IteratorGenerator(InputIterator first, InputSentinel last):m_elems...
        method T (line 4727) | T const& get() const override {
        method next (line 4731) | bool next() override {
      function from_range (line 4740) | GeneratorWrapper<ResultType> from_range(InputIterator from, InputSen...
      function from_range (line 4746) | GeneratorWrapper<ResultType> from_range(Container const& cnt) {
      function acquireGeneratorTracker (line 10982) | auto acquireGeneratorTracker( StringRef generatorName, SourceLineInf...
      type GeneratorTracker (line 12588) | struct GeneratorTracker : TestCaseTracking::TrackerBase, IGeneratorT...
        method GeneratorTracker (line 12591) | GeneratorTracker( TestCaseTracking::NameAndLocation const& nameAnd...
        method GeneratorTracker (line 12596) | static GeneratorTracker& acquire( TrackerContext& ctx, TestCaseTra...
        method isGeneratorTracker (line 12633) | bool isGeneratorTracker() const override { return true; }
        method hasGenerator (line 12634) | auto hasGenerator() const -> bool override {
        method close (line 12637) | void close() override {
        method getGenerator (line 12707) | auto getGenerator() const -> GeneratorBasePtr const& override {
        method setGenerator (line 12710) | void setGenerator( GeneratorBasePtr&& generator ) override {
    type Generators (line 4117) | namespace Generators {
      class GeneratorUntypedBase (line 3845) | class GeneratorUntypedBase {
        method GeneratorUntypedBase (line 3847) | GeneratorUntypedBase() = default;
      type pf (line 3933) | namespace pf{
        function make_unique (line 3935) | std::unique_ptr<T> make_unique( Args&&... args ) {
      type IGenerator (line 3941) | struct IGenerator : GeneratorUntypedBase {
      class SingleValueGenerator (line 3953) | class SingleValueGenerator final : public IGenerator<T> {
        method SingleValueGenerator (line 3956) | SingleValueGenerator(T&& value) : m_value(std::move(value)) {}
        method T (line 3958) | T const& get() const override {
        method next (line 3961) | bool next() override {
      class FixedValuesGenerator (line 3967) | class FixedValuesGenerator final : public IGenerator<T> {
        method FixedValuesGenerator (line 3974) | FixedValuesGenerator( std::initializer_list<T> values ) : m_values...
        method T (line 3976) | T const& get() const override {
        method next (line 3979) | bool next() override {
      class GeneratorWrapper (line 3986) | class GeneratorWrapper final {
        method GeneratorWrapper (line 3989) | GeneratorWrapper(std::unique_ptr<IGenerator<T>> generator):
        method T (line 3992) | T const& get() const {
        method next (line 3995) | bool next() {
      function value (line 4001) | GeneratorWrapper<T> value(T&& value) {
      function values (line 4005) | GeneratorWrapper<T> values(std::initializer_list<T> values) {
      class Generators (line 4010) | class Generators : public IGenerator<T> {
        method populate (line 4014) | void populate(GeneratorWrapper<T>&& generator) {
        method populate (line 4017) | void populate(T&& val) {
        method populate (line 4021) | void populate(U&& val) {
        method populate (line 4025) | void populate(U&& valueOrGenerator, Gs &&... moreGenerators) {
        method Generators (line 4032) | Generators(Gs &&... moreGenerators) {
        method T (line 4037) | T const& get() const override {
        method next (line 4041) | bool next() override {
      function table (line 4054) | GeneratorWrapper<std::tuple<Ts...>> table( std::initializer_list<std...
      type as (line 4060) | struct as {}
      function makeGenerators (line 4063) | auto makeGenerators( GeneratorWrapper<T>&& generator, Gs &&... moreG...
      function makeGenerators (line 4067) | auto makeGenerators( GeneratorWrapper<T>&& generator ) -> Generators...
      function makeGenerators (line 4071) | auto makeGenerators( T&& val, Gs &&... moreGenerators ) -> Generator...
      function makeGenerators (line 4075) | auto makeGenerators( as<T>, U&& val, Gs &&... moreGenerators ) -> Ge...
      function generate (line 4085) | auto generate( StringRef generatorName, SourceLineInfo const& lineIn...
      class TakeGenerator (line 4120) | class TakeGenerator : public IGenerator<T> {
        method TakeGenerator (line 4125) | TakeGenerator(size_t target, GeneratorWrapper<T>&& generator):
        method T (line 4131) | T const& get() const override {
        method next (line 4134) | bool next() override {
      function take (line 4151) | GeneratorWrapper<T> take(size_t target, GeneratorWrapper<T>&& genera...
      class Filte
Condensed preview — 850 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,112K chars).
[
  {
    "path": ".clang-tidy",
    "chars": 4914,
    "preview": "# Disabled checks:\n# - bugprone-easily-swappable-parameters\n#     Not needed\n# - bugprone-suspicious-include\n#     Too m"
  },
  {
    "path": ".editorconfig",
    "chars": 1299,
    "preview": "# EditorConfig file (https://editorconfig.org) for the SmuView project\n\nroot = true\n\n[*]\nend_of_line = lf\ntrim_trailing_"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 765,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 11024,
    "preview": "name: SmuView Build\n\non:\n  push:\n    paths-ignore:\n      - \"doxy/**\"\n      - \"manual/**\"\n      - \"stuff/**\"\n  pull_reque"
  },
  {
    "path": ".github/workflows/documentation.yml",
    "chars": 5921,
    "preview": "name: SmuView Documentation\n\non:\n  push:\n    branches:\n      - master\n    paths:\n      - \"manual/**\"\n      - \"src/python"
  },
  {
    "path": ".gitignore",
    "chars": 897,
    "preview": "# Unwanted smuview files\nTOASK\ndoc/linuxgpib_build.txt\ndoc/parameter.txt\ndoc/pps-wiki.txt\ndoc/relays/\ntesting/\n\n# CMake\n"
  },
  {
    "path": "CMake/CheckSigrokFeatures.cmake",
    "chars": 1556,
    "preview": "##\n## This file is part of the SmuView project.\n##\n## Copyright (C) 2021 Frank Stettner <frank-stettner@gmx.net>\n##\n## T"
  },
  {
    "path": "CMake/FindQwt.cmake",
    "chars": 1714,
    "preview": "# Find Qwt\n# ~~~~~~~~\n# Copyright (c) 2010, Tim Sutton <tim at linfiniti.com>\n# Redistribution and use is allowed accord"
  },
  {
    "path": "CMake/GetGitRevisionDescription.cmake",
    "chars": 4118,
    "preview": "# - Returns a version string from Git\n#\n# These functions force a re-configure on each git commit so that you can\n# trus"
  },
  {
    "path": "CMake/GetGitRevisionDescription.cmake.in",
    "chars": 1283,
    "preview": "#\n# Internal file for GetGitRevisionDescription.cmake\n#\n# Requires CMake 2.6 or newer (uses the 'function' command)\n#\n# "
  },
  {
    "path": "CMake/memaccess.cmake",
    "chars": 1276,
    "preview": "##\n## This file is part of the SmuView project.\n##\n## Copyright (C) 2014 Marcus Comstedt <marcus@mc.pp.se>\n##\n## This pr"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 19296,
    "preview": "##\n## This file is part of the SmuView project.\n##\n## Copyright (C) 2012 Joel Holdsworth <joel@airwebreathe.org.uk>\n## C"
  },
  {
    "path": "COPYING",
    "chars": 35148,
    "preview": "\n                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free"
  },
  {
    "path": "Doxyfile",
    "chars": 7386,
    "preview": "# Doxyfile 1.8.6\n\n#---------------------------------------------------------------------------\n# Project related configu"
  },
  {
    "path": "INSTALL",
    "chars": 1257,
    "preview": "-------------------------------------------------------------------------------\nINSTALL\n--------------------------------"
  },
  {
    "path": "NEWS",
    "chars": 4633,
    "preview": "0.0.5 (2021-01-09)\n------------------\n\nFor a detailed list of changes, please see the git commit history.\n\n * Save and r"
  },
  {
    "path": "README",
    "chars": 1849,
    "preview": "-------------------------------------------------------------------------------\nREADME\n---------------------------------"
  },
  {
    "path": "TODO",
    "chars": 12969,
    "preview": "SmuView\n=======\n\nToDo clang-tidy\n---------------\n\n- Unify readability-implicit-bool-conversion (AllowPointerConditions) "
  },
  {
    "path": "appimagecraft.yml",
    "chars": 2968,
    "preview": "version: 1\n\nproject:\n  name: com.github.knarfs.smuview\n  #version_command: git describe --tags\n\nbuild:\n  cmake:\n    extr"
  },
  {
    "path": "config.h.in",
    "chars": 1519,
    "preview": "/*\n * This file is part of the SmuView project.\n *\n * Copyright (C) 2012 Alexandru Gagniuc <mr.nuke.me@gmail.com>\n * Cop"
  },
  {
    "path": "contrib/config_version.sh.in",
    "chars": 1331,
    "preview": "#!/bin/sh\n##\n## This file is part of the SmuView project.\n##\n## Copyright (C) 2021 Frank Stettner <frank-stettner@gmx.ne"
  },
  {
    "path": "contrib/org.sigrok.SmuView.appdata.xml",
    "chars": 1210,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- Creative Commons CC0 1.0 Universal (CC0-1.0, Public Domain Dedication). -->\n"
  },
  {
    "path": "contrib/org.sigrok.SmuView.desktop",
    "chars": 323,
    "preview": "[Desktop Entry]\n# Creative Commons CC0 1.0 Universal (CC0-1.0, Public Domain Dedication).\nName=SmuView\nGenericName=A sig"
  },
  {
    "path": "contrib/smuview.spec",
    "chars": 1587,
    "preview": "# .SPEC-file to package RPMs for Fedora\n\n# download and build like this\n# (you need an rpmbuild dir, can be created with"
  },
  {
    "path": "contrib/smuview_cross.nsi.in",
    "chars": 10929,
    "preview": "##\n## This file is part of the SmuView project.\n##\n## Copyright (C) 2013-2014 Uwe Hermann <uwe@hermann-uwe.de>\n## Copyri"
  },
  {
    "path": "cppcheck-suppressions.xml",
    "chars": 1121,
    "preview": "<?xml version=\"1.0\"?>\n<suppressions>\n\n\t<!-- Exclude Paths -->\n\t<suppress>\n\t\t<id>*</id>\n\t\t<fileName>*/build/*</fileName>\n"
  },
  {
    "path": "doc/smuview.1",
    "chars": 2082,
    "preview": ".TH SMUVIEW 1 \"Januray 6, 2021\"\n.SH \"NAME\"\nSmuView \\- Qt-based source measure unit GUI for sigrok\n.SH \"SYNOPSIS\"\n.B smuv"
  },
  {
    "path": "doc/smuview_python_bindings.html",
    "chars": 146363,
    "preview": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initia"
  },
  {
    "path": "doc/smuview_python_bindings.txt",
    "chars": 76659,
    "preview": "Help on built-in module smuview:\n\nNAME\n    smuview - The SmuView 0.0.5-git-64e7b9d Python bindings.\n\nDESCRIPTION\n    The"
  },
  {
    "path": "extdef.h",
    "chars": 969,
    "preview": "/*\n * This file is part of the SmuView project.\n *\n * Copyright (C) 2012 Joel Holdsworth <joel@airwebreathe.org.uk>\n *\n "
  },
  {
    "path": "external/.clang-tidy",
    "chars": 71,
    "preview": "---\nChecks: 'nocheck-*'\nWarningsAsErrors: ''\nHeaderFilterRegex: ''\n...\n"
  },
  {
    "path": "external/QCodeEditor/.clang-format",
    "chars": 3665,
    "preview": "---\nLanguage:        Cpp\n# BasedOnStyle:  Microsoft\nAccessModifierOffset: -2\nAlignAfterOpenBracket: Align\nAlignConsecuti"
  },
  {
    "path": "external/QCodeEditor/.editorconfig",
    "chars": 485,
    "preview": "# EditorConfig file (https://editorconfig.org) for the QCodeEditor project\n\nroot = true\n\n[*]\nend_of_line = lf\ntrim_trail"
  },
  {
    "path": "external/QCodeEditor/.gitignore",
    "chars": 83,
    "preview": "build/\ncmake-build-debug/\ncmake-build-release/\n.idea/\n.kdev4/\nQCodeEditor.kdev4\n*~\n"
  },
  {
    "path": "external/QCodeEditor/CMakeLists.txt",
    "chars": 3064,
    "preview": "cmake_minimum_required(VERSION 3.6)\nproject(QCodeEditor)\n\nset(CMAKE_CXX_STANDARD 17)\n\noption(BUILD_EXAMPLE \"Example buil"
  },
  {
    "path": "external/QCodeEditor/LICENSE.MIT",
    "chars": 1069,
    "preview": "MIT License\n\nCopyright (c) 2013-2019 Megaxela\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "external/QCodeEditor/README.md",
    "chars": 2915,
    "preview": "# Qt Code Editor Widget\n\n[![GitHub Workflow Status](https://github.com/cpeditor/QCodeEditor/workflows/CI:%20Build%20Test"
  },
  {
    "path": "external/QCodeEditor/include/QCXXHighlighter",
    "chars": 53,
    "preview": "#pragma once\n\n#include <internal/QCXXHighlighter.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QCodeEditor",
    "chars": 49,
    "preview": "#pragma once\n\n#include <internal/QCodeEditor.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QGLSLCompleter",
    "chars": 52,
    "preview": "#pragma once\n\n#include <internal/QGLSLCompleter.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QGLSLHighlighter",
    "chars": 54,
    "preview": "#pragma once\n\n#include <internal/QGLSLHighlighter.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QHighlightBlockRule",
    "chars": 57,
    "preview": "#pragma once\n\n#include <internal/QHighlightBlockRule.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QHighlightRule",
    "chars": 52,
    "preview": "#pragma once\n\n#include <internal/QHighlightRule.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QJSHighlighter",
    "chars": 52,
    "preview": "#pragma once\n\n#include <internal/QJSHighlighter.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QJSONHighlighter",
    "chars": 54,
    "preview": "#pragma once\n\n#include <internal/QJSONHighlighter.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QJavaHighlighter",
    "chars": 55,
    "preview": "#pragma once\n\n#include <internal/QJavaHighlighter.hpp>\n"
  },
  {
    "path": "external/QCodeEditor/include/QLanguage",
    "chars": 47,
    "preview": "#pragma once\n\n#include <internal/QLanguage.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QLineNumberArea",
    "chars": 53,
    "preview": "#pragma once\n\n#include <internal/QLineNumberArea.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QLuaCompleter",
    "chars": 51,
    "preview": "#pragma once\n\n#include <internal/QLuaCompleter.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QLuaHighlighter",
    "chars": 54,
    "preview": "#pragma once\n\n#include <internal/QLuaHighlighter.hpp>\n"
  },
  {
    "path": "external/QCodeEditor/include/QPythonCompleter",
    "chars": 54,
    "preview": "#pragma once\n\n#include <internal/QPythonCompleter.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QPythonHighlighter",
    "chars": 56,
    "preview": "#pragma once\n\n#include <internal/QPythonHighlighter.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QStyleSyntaxHighlighter",
    "chars": 61,
    "preview": "#pragma once\n\n#include <internal/QStyleSyntaxHighlighter.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QSyntaxStyle",
    "chars": 50,
    "preview": "#pragma once\n\n#include <internal/QSyntaxStyle.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/QXMLHighlighter",
    "chars": 53,
    "preview": "#pragma once\n\n#include <internal/QXMLHighlighter.hpp>"
  },
  {
    "path": "external/QCodeEditor/include/internal/QCXXHighlighter.hpp",
    "chars": 839,
    "preview": "#pragma once\n\n// QCodeEditor\n#include <QHighlightRule>\n#include <QStyleSyntaxHighlighter> // Required for inheritance\n\n/"
  },
  {
    "path": "external/QCodeEditor/include/internal/QCodeEditor.hpp",
    "chars": 9876,
    "preview": "#pragma once\n\n// Qt\n#include <QTextEdit> // Required for inheritance\n\nclass QCompleter;\nclass QLineNumberArea;\nclass QSy"
  },
  {
    "path": "external/QCodeEditor/include/internal/QGLSLCompleter.hpp",
    "chars": 381,
    "preview": "#pragma once\n\n// Qt\n#include <QCompleter> // Required for inheritance\n\n/**\n * @brief Class, that describes completer wit"
  },
  {
    "path": "external/QCodeEditor/include/internal/QGLSLHighlighter.hpp",
    "chars": 842,
    "preview": "#pragma once\n\n// QCodeEditor\n#include <QHighlightRule>\n#include <QStyleSyntaxHighlighter> // Required for inheritance\n\n/"
  },
  {
    "path": "external/QCodeEditor/include/internal/QHighlightBlockRule.hpp",
    "chars": 485,
    "preview": "#pragma once\n\n// Qt\n#include <QRegularExpression>\n#include <QString>\n\nstruct QHighlightBlockRule\n{\n    QHighlightBlockRu"
  },
  {
    "path": "external/QCodeEditor/include/internal/QHighlightRule.hpp",
    "chars": 327,
    "preview": "#pragma once\n\n// Qt\n#include <QRegularExpression>\n#include <QString>\n\nstruct QHighlightRule\n{\n    QHighlightRule() : pat"
  },
  {
    "path": "external/QCodeEditor/include/internal/QJSHighlighter.hpp",
    "chars": 798,
    "preview": "#pragma once\n\n#include <QHighlightRule>\n#include <QStyleSyntaxHighlighter> // Required for inheritance\n\n// Qt\n#include <"
  },
  {
    "path": "external/QCodeEditor/include/internal/QJSONHighlighter.hpp",
    "chars": 610,
    "preview": "#pragma once\n\n// QCodeEditor\n#include <QHighlightRule>\n#include <QStyleSyntaxHighlighter> // Required for inheritance\n\n/"
  },
  {
    "path": "external/QCodeEditor/include/internal/QJavaHighlighter.hpp",
    "chars": 935,
    "preview": "#pragma once\n\n// QCodeEditor\n#include <QHighlightRule>\n#include <QStyleSyntaxHighlighter> // Required for inheritance\n\n/"
  },
  {
    "path": "external/QCodeEditor/include/internal/QLanguage.hpp",
    "chars": 979,
    "preview": "#pragma once\n\n// Qt\n#include <QMap>\n#include <QObject> // Required for inheritance\n#include <QString>\n\nclass QIODevice;\n"
  },
  {
    "path": "external/QCodeEditor/include/internal/QLineNumberArea.hpp",
    "chars": 1277,
    "preview": "#pragma once\n\n// Qt\n#include <QWidget> // Required for inheritance\n\n#include <QCodeEditor>\n\nclass QSyntaxStyle;\n\n/**\n * "
  },
  {
    "path": "external/QCodeEditor/include/internal/QLuaCompleter.hpp",
    "chars": 379,
    "preview": "#pragma once\n\n// Qt\n#include <QCompleter> // Required for inheritance\n\n/**\n * @brief Class, that describes completer wit"
  },
  {
    "path": "external/QCodeEditor/include/internal/QLuaHighlighter.hpp",
    "chars": 851,
    "preview": "#pragma once\n\n// QCodeEditor\n#include <QHighlightBlockRule>\n#include <QHighlightRule>\n#include <QStyleSyntaxHighlighter>"
  },
  {
    "path": "external/QCodeEditor/include/internal/QPythonCompleter.hpp",
    "chars": 385,
    "preview": "#pragma once\n\n// Qt\n#include <QCompleter> // Required for inheritance\n\n/**\n * @brief Class, that describes completer wit"
  },
  {
    "path": "external/QCodeEditor/include/internal/QPythonHighlighter.hpp",
    "chars": 842,
    "preview": "#pragma once\n\n// QCodeEditor\n#include <QHighlightBlockRule>\n#include <QHighlightRule>\n#include <QStyleSyntaxHighlighter>"
  },
  {
    "path": "external/QCodeEditor/include/internal/QStyleSyntaxHighlighter.hpp",
    "chars": 2945,
    "preview": "#pragma once\n\n// Qt\n#include <QSyntaxHighlighter> // Required for inheritance\n\nclass QSyntaxStyle;\n\n/**\n * @brief Class,"
  },
  {
    "path": "external/QCodeEditor/include/internal/QSyntaxStyle.hpp",
    "chars": 1268,
    "preview": "#pragma once\n\n// Qt\n#include <QMap>\n#include <QObject> // Required for inheritance\n#include <QString>\n#include <QTextCha"
  },
  {
    "path": "external/QCodeEditor/include/internal/QXMLHighlighter.hpp",
    "chars": 914,
    "preview": "#pragma once\n\n// QCodeEditor\n#include <QStyleSyntaxHighlighter> // Required for inheritance\n\n// Qt\n#include <QRegularExp"
  },
  {
    "path": "external/QCodeEditor/resources/default_style.xml",
    "chars": 4017,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<style-scheme version=\"1.0\" name=\"Default\">\n    <style name=\"Text\" foreground=\"#0"
  },
  {
    "path": "external/QCodeEditor/resources/languages/cpp.xml",
    "chars": 2888,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<root>\n    <section name=\"Keyword\">\n        <name>alignas</name>\n        <name>a"
  },
  {
    "path": "external/QCodeEditor/resources/languages/glsl.xml",
    "chars": 11140,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<root>\n    <section name=\"Keyword\">\n        <name>attribute</name>\n        <name"
  },
  {
    "path": "external/QCodeEditor/resources/languages/java.xml",
    "chars": 1619,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<root>\n    <section name=\"Keyword\">\n        <name>abstract</name>\n        <name>"
  },
  {
    "path": "external/QCodeEditor/resources/languages/js.xml",
    "chars": 1018,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<root>\n    <section name=\"Keyword\">\n        <name>break</name>\n        <name>cas"
  },
  {
    "path": "external/QCodeEditor/resources/languages/lua.xml",
    "chars": 1255,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<root>\n    <section name=\"Keyword\">\n        <name>break</name>\n        <name>do<"
  },
  {
    "path": "external/QCodeEditor/resources/languages/python.xml",
    "chars": 975,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<root>\n    <section name=\"Keyword\">\n        <name>break</name>\n        <name>con"
  },
  {
    "path": "external/QCodeEditor/resources/qcodeeditor_resources.qrc",
    "chars": 334,
    "preview": "<RCC>\n    <qresource prefix=\"/\">\n        <file>default_style.xml</file>\n        <file>languages/glsl.xml</file>\n        "
  },
  {
    "path": "external/QCodeEditor/src/internal/QCXXHighlighter.cpp",
    "chars": 4588,
    "preview": "// QCodeEditor\n#include <QCXXHighlighter>\n#include <QLanguage>\n#include <QSyntaxStyle>\n\n// Qt\n#include <QFile>\n\nQCXXHigh"
  },
  {
    "path": "external/QCodeEditor/src/internal/QCodeEditor.cpp",
    "chars": 37409,
    "preview": "// QCodeEditor\n#include <QCXXHighlighter>\n#include <QCodeEditor>\n#include <QJSHighlighter>\n#include <QJavaHighlighter>\n#"
  },
  {
    "path": "external/QCodeEditor/src/internal/QGLSLCompleter.cpp",
    "chars": 831,
    "preview": "// QCodeEditor\n#include <QGLSLCompleter>\n#include <QLanguage>\n\n// Qt\n#include <QFile>\n#include <QStringListModel>\n\nQGLSL"
  },
  {
    "path": "external/QCodeEditor/src/internal/QGLSLHighlighter.cpp",
    "chars": 3754,
    "preview": "// QCodeEditor\n#include <QGLSLHighlighter>\n#include <QLanguage>\n#include <QSyntaxStyle>\n\n// Qt\n#include <QDebug>\n#includ"
  },
  {
    "path": "external/QCodeEditor/src/internal/QJSHighlighter.cpp",
    "chars": 2964,
    "preview": "// QCodeEditor\n#include <QJSHighlighter>\n#include <QLanguage>\n#include <QSyntaxStyle>\n\n// Qt\n#include <QFile>\n\nQJSHighli"
  },
  {
    "path": "external/QCodeEditor/src/internal/QJSONHighlighter.cpp",
    "chars": 1406,
    "preview": "// QCodeEditor\n#include <QJSONHighlighter>\n#include <QSyntaxStyle>\n\nQJSONHighlighter::QJSONHighlighter(QTextDocument *do"
  },
  {
    "path": "external/QCodeEditor/src/internal/QJavaHighlighter.cpp",
    "chars": 2774,
    "preview": "// QCodeEditor\n#include <QJavaHighlighter>\n#include <QLanguage>\n#include <QSyntaxStyle>\n\n// Qt\n#include <QFile>\n\nQJavaHi"
  },
  {
    "path": "external/QCodeEditor/src/internal/QLanguage.cpp",
    "chars": 1505,
    "preview": "// QCodeEditor\n#include <QLanguage>\n\n// Qt\n#include <QIODevice>\n#include <QXmlStreamReader>\n\nQLanguage::QLanguage(QIODev"
  },
  {
    "path": "external/QCodeEditor/src/internal/QLineNumberArea.cpp",
    "chars": 4079,
    "preview": "// QCodeEditor\n#include <QCodeEditor>\n#include <QLineNumberArea>\n#include <QSyntaxStyle>\n\n// Qt\n#include <QAbstractTextD"
  },
  {
    "path": "external/QCodeEditor/src/internal/QLuaCompleter.cpp",
    "chars": 827,
    "preview": "// QCodeEditor\n#include <QLanguage>\n#include <QLuaCompleter>\n\n// Qt\n#include <QFile>\n#include <QStringListModel>\n\nQLuaCo"
  },
  {
    "path": "external/QCodeEditor/src/internal/QLuaHighlighter.cpp",
    "chars": 4670,
    "preview": "// QCodeEditor\n#include <QLanguage>\n#include <QLuaHighlighter>\n#include <QSyntaxStyle>\n\n// Qt\n#include <QFile>\n\nQLuaHigh"
  },
  {
    "path": "external/QCodeEditor/src/internal/QPythonCompleter.cpp",
    "chars": 841,
    "preview": "// QCodeEditor\n#include <QLanguage>\n#include <QPythonCompleter>\n\n// Qt\n#include <QFile>\n#include <QStringListModel>\n\nQPy"
  },
  {
    "path": "external/QCodeEditor/src/internal/QPythonHighlighter.cpp",
    "chars": 4046,
    "preview": "// QCodeEditor\n#include <QLanguage>\n#include <QPythonHighlighter>\n#include <QSyntaxStyle>\n\n// Qt\n#include <QDebug>\n#incl"
  },
  {
    "path": "external/QCodeEditor/src/internal/QStyleSyntaxHighlighter.cpp",
    "chars": 1256,
    "preview": "// QCodeEditor\n#include <QStyleSyntaxHighlighter>\n\nQStyleSyntaxHighlighter::QStyleSyntaxHighlighter(QTextDocument *docum"
  },
  {
    "path": "external/QCodeEditor/src/internal/QSyntaxStyle.cpp",
    "chars": 4448,
    "preview": "// QCodeEditor\n#include <QSyntaxStyle>\n\n// Qt\n#include <QDebug>\n#include <QFile>\n#include <QXmlStreamReader>\n\nQSyntaxSty"
  },
  {
    "path": "external/QCodeEditor/src/internal/QXMLHighlighter.cpp",
    "chars": 2754,
    "preview": "// QCodeEditor\n#include <QSyntaxStyle>\n#include <QXMLHighlighter>\n\nQXMLHighlighter::QXMLHighlighter(QTextDocument *docum"
  },
  {
    "path": "external/QtFindReplaceDialog/.editorconfig",
    "chars": 380,
    "preview": "# EditorConfig file (https://editorconfig.org) for the QCodeEditor project\n\nroot = true\n\n[*]\nend_of_line = lf\ntrim_trail"
  },
  {
    "path": "external/QtFindReplaceDialog/.gitignore",
    "chars": 57,
    "preview": "*.pro.user*\n*~\nbuild*\n*.log\n*.tar.gz\n\n# KDEvelop\n.kdev4/\n"
  },
  {
    "path": "external/QtFindReplaceDialog/COPYING",
    "chars": 26530,
    "preview": "                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 19"
  },
  {
    "path": "external/QtFindReplaceDialog/README.txt",
    "chars": 928,
    "preview": "QtFindReplaceDialog is an implementation of a Find/Replace Qt dialog\nto be used in qt text edit based applications.\nA si"
  },
  {
    "path": "external/QtFindReplaceDialog/TODO",
    "chars": 142,
    "preview": "history of searched text\n\nexample with embedding of the forms in a dock?\n\non-the-fly search (highlight all occurrences)\n"
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/CMakeLists.txt",
    "chars": 1513,
    "preview": "cmake_minimum_required(VERSION 3.1)\nset(CMAKE_CXX_STANDARD 17)\n\nset(CMAKE_INCLUDE_CURRENT_DIR ON)\n\n# -------------------"
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/dialogs.pro",
    "chars": 516,
    "preview": "# -------------------------------------------------\r\n# Project created by QtCreator 2009-11-07T11:39:43\r\n# -------------"
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/finddialog.cpp",
    "chars": 661,
    "preview": "/*\n * Copyright (C) 2009  Lorenzo Bettini <http://www.lorenzobettini.it>\n * See COPYING file that comes with this distri"
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/finddialog.h",
    "chars": 1059,
    "preview": "/*\n * Copyright (C) 2009  Lorenzo Bettini <http://www.lorenzobettini.it>\n * See COPYING file that comes with this distri"
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/findform.cpp",
    "chars": 844,
    "preview": "/*\n * Copyright (C) 2009  Lorenzo Bettini <http://www.lorenzobettini.it>\n * See COPYING file that comes with this distri"
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/findform.h",
    "chars": 1125,
    "preview": "/*\n * Copyright (C) 2009  Lorenzo Bettini <http://www.lorenzobettini.it>\n * See COPYING file that comes with this distri"
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/findreplace_global.h",
    "chars": 455,
    "preview": "/*\r\n * Copyright (C) 2009  Lorenzo Bettini <http://www.lorenzobettini.it>\r\n * See COPYING file that comes with this dist"
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/findreplacedialog.cpp",
    "chars": 1573,
    "preview": "/*\n * Copyright (C) 2009  Lorenzo Bettini <http://www.lorenzobettini.it>\n * See COPYING file that comes with this distri"
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/findreplacedialog.h",
    "chars": 1914,
    "preview": "/*\n * Copyright (C) 2009  Lorenzo Bettini <http://www.lorenzobettini.it>\n * See COPYING file that comes with this distri"
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/findreplacedialog.ui",
    "chars": 833,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<ui version=\"4.0\">\r\n <class>FindReplaceDialog</class>\r\n <widget class=\"QDialog\" "
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/findreplaceform.cpp",
    "chars": 9398,
    "preview": "/*\n * Copyright (C) 2009  Lorenzo Bettini <http://www.lorenzobettini.it>\n * See COPYING file that comes with this distri"
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/findreplaceform.h",
    "chars": 4393,
    "preview": "/*\n * Copyright (C) 2009  Lorenzo Bettini <http://www.lorenzobettini.it>\n * See COPYING file that comes with this distri"
  },
  {
    "path": "external/QtFindReplaceDialog/dialogs/findreplaceform.ui",
    "chars": 6564,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<ui version=\"4.0\">\r\n <class>FindReplaceForm</class>\r\n <widget class=\"QWidget\" na"
  },
  {
    "path": "external/QtFindReplaceDialog/doc/.gitignore",
    "chars": 34,
    "preview": "*.pro.user\n*~\nbuild*\n*.log\noutput\n"
  },
  {
    "path": "external/QtFindReplaceDialog/doc/Doxyfile",
    "chars": 63933,
    "preview": "# Doxyfile 1.5.8\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) "
  },
  {
    "path": "external/QtFindReplaceDialog/doc/README.txt",
    "chars": 175,
    "preview": "If you get the sources from the git repository\nyou'll have to build the documentation yourself, using\ndoxygen http://www"
  },
  {
    "path": "external/QtFindReplaceDialog/doc/doc.pro",
    "chars": 249,
    "preview": "# for installing documentation\n\nHTMLDIR=$$PWD/output/html\n\nhtml_docs.files = $$HTMLDIR/*\nhtml_docs.path = /share/doc/qtf"
  },
  {
    "path": "external/QtFindReplaceDialog/doc/qtfindreplacedialog.dox",
    "chars": 2723,
    "preview": "/* -*- mode: C++ ; c-file-style: \"stroustrup\" -*- *****************************\n * QtFindReplaceDialog\n * Copyright (C) "
  },
  {
    "path": "external/QtFindReplaceDialog/make-dist.sh",
    "chars": 485,
    "preview": "#!/bin/bash\n\n# a script to make a .tar.gz (with version in the name)\n# the archive will contain a directory $PACKAGE-$VE"
  },
  {
    "path": "external/QtFindReplaceDialog/qtfindreplacedialog.pri",
    "chars": 851,
    "preview": "!contains( included_modules, QtFindReplaceDialog/qtfindreplacedialog.pri) {\n\t\tincluded_modules += QtFindReplaceDialog/qt"
  },
  {
    "path": "external/QtFindReplaceDialog/qtfindreplacedialog.pro",
    "chars": 302,
    "preview": "#-------------------------------------------------\n#\n# Project created by QtCreator 2009-11-07T11:36:25\n#\n#-------------"
  },
  {
    "path": "external/pybind11_2.11_dev1/.appveyor.yml",
    "chars": 1271,
    "preview": "version: 1.0.{build}\nimage:\n- Visual Studio 2017\ntest: off\nskip_branch_with_pr: true\nbuild:\n  parallel: true\nplatform:\n-"
  },
  {
    "path": "external/pybind11_2.11_dev1/.clang-format",
    "chars": 996,
    "preview": "---\n# See all possible options and defaults with:\n# clang-format --style=llvm --dump-config\nBasedOnStyle: LLVM\nAccessMod"
  },
  {
    "path": "external/pybind11_2.11_dev1/.clang-tidy",
    "chars": 2605,
    "preview": "FormatStyle: file\n\nChecks: |\n  *bugprone*,\n  *performance*,\n  clang-analyzer-optin.cplusplus.VirtualCall,\n  clang-analyz"
  },
  {
    "path": "external/pybind11_2.11_dev1/.cmake-format.yaml",
    "chars": 2196,
    "preview": "parse:\n  additional_commands:\n    pybind11_add_module:\n      flags:\n        - THIN_LTO\n        - MODULE\n        - SHARED"
  },
  {
    "path": "external/pybind11_2.11_dev1/.codespell-ignore-lines",
    "chars": 1308,
    "preview": "template <op_id id, op_type ot, typename L = undefined_t, typename R = undefined_t>\n    template <typename ThisT>\n      "
  },
  {
    "path": "external/pybind11_2.11_dev1/.gitignore",
    "chars": 502,
    "preview": "CMakeCache.txt\nCMakeFiles\nMakefile\ncmake_install.cmake\ncmake_uninstall.cmake\n.DS_Store\n*.so\n*.pyd\n*.dll\n*.sln\n*.sdf\n*.op"
  },
  {
    "path": "external/pybind11_2.11_dev1/.readthedocs.yml",
    "chars": 62,
    "preview": "python:\n  version: 3\nrequirements_file: docs/requirements.txt\n"
  },
  {
    "path": "external/pybind11_2.11_dev1/CMakeLists.txt",
    "chars": 11983,
    "preview": "# CMakeLists.txt -- Build system for the pybind11 modules\n#\n# Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>\n#\n# A"
  },
  {
    "path": "external/pybind11_2.11_dev1/LICENSE",
    "chars": 1684,
    "preview": "Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>, All rights reserved.\n\nRedistribution and use in source and binar"
  },
  {
    "path": "external/pybind11_2.11_dev1/MANIFEST.in",
    "chars": 223,
    "preview": "recursive-include pybind11/include/pybind11 *.h\nrecursive-include pybind11 *.py\nrecursive-include pybind11 py.typed\nincl"
  },
  {
    "path": "external/pybind11_2.11_dev1/README.rst",
    "chars": 7673,
    "preview": ".. figure:: https://github.com/pybind/pybind11/raw/master/docs/pybind11-logo.png\n   :alt: pybind11 logo\n\n**pybind11 — Se"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/attr.h",
    "chars": 23979,
    "preview": "/*\n    pybind11/attr.h: Infrastructure for processing custom\n    type and function attributes\n\n    Copyright (c) 2016 We"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/buffer_info.h",
    "chars": 7069,
    "preview": "/*\n    pybind11/buffer_info.h: Python buffer object interface\n\n    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/cast.h",
    "chars": 65638,
    "preview": "/*\n    pybind11/cast.h: Partial template specializations to cast between\n    C++ and Python types\n\n    Copyright (c) 201"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/chrono.h",
    "chars": 8458,
    "preview": "/*\n    pybind11/chrono.h: Transparent conversion between std::chrono and python's datetime\n\n    Copyright (c) 2016 Trent"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/common.h",
    "chars": 120,
    "preview": "#include \"detail/common.h\"\n#warning \"Including 'common.h' is deprecated. It will be removed in v3.0. Use 'pybind11.h'.\"\n"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/complex.h",
    "chars": 2096,
    "preview": "/*\n    pybind11/complex.h: Complex number support\n\n    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>\n\n    All r"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/detail/class.h",
    "chars": 28251,
    "preview": "/*\n    pybind11/detail/class.h: Python C API implementation details for py::class_\n\n    Copyright (c) 2017 Wenzel Jakob "
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/detail/common.h",
    "chars": 49973,
    "preview": "/*\n    pybind11/detail/common.h -- Basic macros\n\n    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>\n\n    All rig"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/detail/descr.h",
    "chars": 5491,
    "preview": "/*\n    pybind11/detail/descr.h: Helper type for concatenating type signatures at compile time\n\n    Copyright (c) 2016 We"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/detail/init.h",
    "chars": 17981,
    "preview": "/*\n    pybind11/detail/init.h: init factory function implementation and support code.\n\n    Copyright (c) 2017 Jason Rhin"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/detail/internals.h",
    "chars": 26305,
    "preview": "/*\n    pybind11/detail/internals.h: Internal data structure and related functions\n\n    Copyright (c) 2017 Wenzel Jakob <"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/detail/type_caster_base.h",
    "chars": 42266,
    "preview": "/*\n    pybind11/detail/type_caster_base.h (originally first part of pybind11/cast.h)\n\n    Copyright (c) 2016 Wenzel Jako"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/detail/typeid.h",
    "chars": 1625,
    "preview": "/*\n    pybind11/detail/typeid.h: Compiler-independent access to type identifiers\n\n    Copyright (c) 2016 Wenzel Jakob <w"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/eigen/matrix.h",
    "chars": 32161,
    "preview": "/*\n    pybind11/eigen/matrix.h: Transparent conversion for dense and sparse Eigen matrices\n\n    Copyright (c) 2016 Wenze"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/eigen/tensor.h",
    "chars": 18422,
    "preview": "/*\n    pybind11/eigen/tensor.h: Transparent conversion for Eigen tensors\n\n    All rights reserved. Use of this source co"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/eigen.h",
    "chars": 316,
    "preview": "/*\n    pybind11/eigen.h: Transparent conversion for dense and sparse Eigen matrices\n\n    Copyright (c) 2016 Wenzel Jakob"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/embed.h",
    "chars": 11889,
    "preview": "/*\n    pybind11/embed.h: Support for embedding the interpreter\n\n    Copyright (c) 2017 Wenzel Jakob <wenzel.jakob@epfl.c"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/eval.h",
    "chars": 4731,
    "preview": "/*\n    pybind11/eval.h: Support for evaluating Python expressions and statements\n    from strings and files\n\n    Copyrig"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/functional.h",
    "chars": 5002,
    "preview": "/*\n    pybind11/functional.h: std::function<> support\n\n    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>\n\n    A"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/gil.h",
    "chars": 8262,
    "preview": "/*\n    pybind11/gil.h: RAII helpers for managing the GIL\n\n    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>\n\n  "
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/iostream.h",
    "chars": 8862,
    "preview": "/*\n    pybind11/iostream.h -- Tools to assist with redirecting cout and cerr to Python\n\n    Copyright (c) 2017 Henry F. "
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/numpy.h",
    "chars": 79524,
    "preview": "/*\n    pybind11/numpy.h: Basic NumPy support, vectorize() wrapper\n\n    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epf"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/operators.h",
    "chars": 9103,
    "preview": "/*\n    pybind11/operator.h: Metatemplates for operator overloading\n\n    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@ep"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/options.h",
    "chars": 2682,
    "preview": "/*\n    pybind11/options.h: global settings that are configurable at runtime.\n\n    Copyright (c) 2016 Wenzel Jakob <wenze"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/pybind11.h",
    "chars": 126737,
    "preview": "/*\n    pybind11/pybind11.h: Main header file of the C++11 python\n    binding generator library\n\n    Copyright (c) 2016 W"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/pytypes.h",
    "chars": 93558,
    "preview": "/*\n    pybind11/pytypes.h: Convenience wrapper classes for basic Python types\n\n    Copyright (c) 2016 Wenzel Jakob <wenz"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/stl/filesystem.h",
    "chars": 4185,
    "preview": "// Copyright (c) 2021 The Pybind Development Team.\n// All rights reserved. Use of this source code is governed by a\n// B"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/stl.h",
    "chars": 15337,
    "preview": "/*\n    pybind11/stl.h: Transparent conversion for STL data types\n\n    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl"
  },
  {
    "path": "external/pybind11_2.11_dev1/include/pybind11/stl_bind.h",
    "chars": 27013,
    "preview": "/*\n    pybind11/std_bind.h: Binding generators for STL data types\n\n    Copyright (c) 2016 Sergey Lyskov and Wenzel Jakob"
  },
  {
    "path": "external/pybind11_2.11_dev1/noxfile.py",
    "chars": 2765,
    "preview": "import os\n\nimport nox\n\nnox.needs_version = \">=2022.1.7\"\nnox.options.sessions = [\"lint\", \"tests\", \"tests_packaging\"]\n\nPYT"
  },
  {
    "path": "external/pybind11_2.11_dev1/pybind11/__init__.py",
    "chars": 414,
    "preview": "import sys\n\nif sys.version_info < (3, 6):\n    msg = \"pybind11 does not support Python < 3.6. 2.9 was the last release su"
  },
  {
    "path": "external/pybind11_2.11_dev1/pybind11/__main__.py",
    "chars": 1360,
    "preview": "# pylint: disable=missing-function-docstring\n\nimport argparse\nimport sys\nimport sysconfig\n\nfrom .commands import get_cma"
  },
  {
    "path": "external/pybind11_2.11_dev1/pybind11/_version.py",
    "chars": 233,
    "preview": "from typing import Union\n\n\ndef _to_int(s: str) -> Union[int, str]:\n    try:\n        return int(s)\n    except ValueError:"
  },
  {
    "path": "external/pybind11_2.11_dev1/pybind11/commands.py",
    "chars": 1226,
    "preview": "import os\n\nDIR = os.path.abspath(os.path.dirname(__file__))\n\n\ndef get_include(user: bool = False) -> str:  # pylint: dis"
  },
  {
    "path": "external/pybind11_2.11_dev1/pybind11/py.typed",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "external/pybind11_2.11_dev1/pybind11/setup_helpers.py",
    "chars": 17609,
    "preview": "\"\"\"\nThis module provides helpers for C++11+ projects using pybind11.\n\nLICENSE:\n\nCopyright (c) 2016 Wenzel Jakob <wenzel."
  },
  {
    "path": "external/pybind11_2.11_dev1/pyproject.toml",
    "chars": 1261,
    "preview": "[build-system]\nrequires = [\"setuptools>=42\", \"cmake>=3.18\", \"ninja\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[tool.chec"
  },
  {
    "path": "external/pybind11_2.11_dev1/setup.cfg",
    "chars": 1622,
    "preview": "[metadata]\nlong_description = file: README.rst\nlong_description_content_type = text/x-rst\ndescription = Seamless operabi"
  },
  {
    "path": "external/pybind11_2.11_dev1/setup.py",
    "chars": 4877,
    "preview": "#!/usr/bin/env python3\n\n# Setup script for PyPI; use CMakeFile.txt to build extension modules\n\nimport contextlib\nimport "
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/CMakeLists.txt",
    "chars": 21990,
    "preview": "# CMakeLists.txt -- Build system for the pybind11 test suite\n#\n# Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>\n#\n"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/catch/catch.hpp",
    "chars": 657276,
    "preview": "/*\n *  Catch v2.13.9\n *  Generated: 2022-04-12 22:37:23.260201\n *  -----------------------------------------------------"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/conftest.py",
    "chars": 5639,
    "preview": "\"\"\"pytest configuration\n\nExtends output capture as needed by pybind11: ignore constructors, optional unordered lines.\nAd"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/constructor_stats.h",
    "chars": 11736,
    "preview": "#pragma once\n/*\n    tests/constructor_stats.h -- framework for printing and tracking object\n    instance lifetimes in ex"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/cross_module_gil_utils.cpp",
    "chars": 3578,
    "preview": "/*\n    tests/cross_module_gil_utils.cpp -- tools for acquiring GIL from a different module\n\n    Copyright (c) 2019 Googl"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/cross_module_interleaved_error_already_set.cpp",
    "chars": 1776,
    "preview": "/*\n    Copyright (c) 2022 Google LLC\n\n    All rights reserved. Use of this source code is governed by a\n    BSD-style li"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/env.py",
    "chars": 940,
    "preview": "import platform\nimport sys\n\nimport pytest\n\nLINUX = sys.platform.startswith(\"linux\")\nMACOS = sys.platform.startswith(\"dar"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/extra_python_package/pytest.ini",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/extra_python_package/test_files.py",
    "chars": 8296,
    "preview": "import contextlib\nimport os\nimport string\nimport subprocess\nimport sys\nimport tarfile\nimport zipfile\n\n# These tests must"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/extra_setuptools/pytest.ini",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/extra_setuptools/test_setuphelper.py",
    "chars": 4153,
    "preview": "import os\nimport subprocess\nimport sys\nfrom textwrap import dedent\n\nimport pytest\n\nDIR = os.path.abspath(os.path.dirname"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/local_bindings.h",
    "chars": 2847,
    "preview": "#pragma once\n#include \"pybind11_tests.h\"\n\n#include <utility>\n\n/// Simple class used to test py::local:\ntemplate <int>\ncl"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/object.h",
    "chars": 5743,
    "preview": "#if !defined(__OBJECT_H)\n#    define __OBJECT_H\n\n#    include \"constructor_stats.h\"\n\n#    include <atomic>\n\n/// Referenc"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/pybind11_cross_module_tests.cpp",
    "chars": 6264,
    "preview": "/*\n    tests/pybind11_cross_module_tests.cpp -- contains tests that require multiple modules\n\n    Copyright (c) 2017 Jas"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/pybind11_tests.cpp",
    "chars": 4517,
    "preview": "/*\n    tests/pybind11_tests.cpp -- pybind example plugin\n\n    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>\n\n  "
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/pybind11_tests.h",
    "chars": 2685,
    "preview": "#pragma once\n\n#include <pybind11/eval.h>\n#include <pybind11/pybind11.h>\n\nnamespace py = pybind11;\nusing namespace pybind"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/pytest.ini",
    "chars": 768,
    "preview": "[pytest]\nminversion = 3.10\nnorecursedirs = test_* extra_*\nxfail_strict = True\naddopts =\n    # show summary of tests\n    "
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/requirements.txt",
    "chars": 600,
    "preview": "build==0.8.0\nnumpy==1.21.5; platform_python_implementation==\"PyPy\" and sys_platform==\"linux\" and python_version==\"3.7\"\nn"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/test_async.cpp",
    "chars": 855,
    "preview": "/*\n    tests/test_async.cpp -- __await__ support\n\n    Copyright (c) 2019 Google Inc.\n\n    All rights reserved. Use of th"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/test_async.py",
    "chars": 534,
    "preview": "import pytest\n\nasyncio = pytest.importorskip(\"asyncio\")\nm = pytest.importorskip(\"pybind11_tests.async_module\")\n\n\n@pytest"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/test_buffers.cpp",
    "chars": 8567,
    "preview": "/*\n    tests/test_buffers.cpp -- supporting Pythons' buffer protocol\n\n    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/test_buffers.py",
    "chars": 4841,
    "preview": "import ctypes\nimport io\nimport struct\n\nimport pytest\n\nimport env\nfrom pybind11_tests import ConstructorStats\nfrom pybind"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/test_builtin_casters.cpp",
    "chars": 15932,
    "preview": "/*\n    tests/test_builtin_casters.cpp -- Casters available without any additional headers\n\n    Copyright (c) 2017 Wenzel"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/test_builtin_casters.py",
    "chars": 17074,
    "preview": "import sys\n\nimport pytest\n\nimport env\nfrom pybind11_tests import IncType, UserType\nfrom pybind11_tests import builtin_ca"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/test_call_policies.cpp",
    "chars": 4118,
    "preview": "/*\n    tests/test_call_policies.cpp -- keep_alive and call_guard\n\n    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/test_call_policies.py",
    "chars": 6549,
    "preview": "import pytest\n\nimport env  # noqa: F401\nfrom pybind11_tests import ConstructorStats\nfrom pybind11_tests import call_poli"
  },
  {
    "path": "external/pybind11_2.11_dev1/tests/test_callbacks.cpp",
    "chars": 10858,
    "preview": "/*\n    tests/test_callbacks.cpp -- callbacks\n\n    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>\n\n    All rights"
  }
]

// ... and 650 more files (download for full content)

About this extraction

This page contains the full source code of the knarfS/smuview GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 850 files (6.5 MB), approximately 1.7M tokens, and a symbol index with 8486 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!