data-structure-typed 2.4.0 → 2.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/README.md +2 -3
- package/README_CN.md +0 -1
- package/dist/cjs/index.cjs +85 -30
- package/dist/cjs-legacy/index.cjs +85 -30
- package/dist/esm/index.mjs +85 -30
- package/dist/esm-legacy/index.mjs +85 -30
- package/dist/types/data-structures/binary-tree/tree-map.d.ts +17 -6
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +13 -5
- package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +12 -5
- package/dist/types/data-structures/binary-tree/tree-set.d.ts +15 -4
- package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +6 -1
- package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +6 -1
- package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +6 -1
- package/dist/umd/data-structure-typed.js +85 -29
- package/dist/umd/data-structure-typed.min.js +4 -4
- package/package.json +11 -5
- package/src/data-structures/binary-tree/tree-map.ts +35 -13
- package/src/data-structures/binary-tree/tree-multi-map.ts +41 -20
- package/src/data-structures/binary-tree/tree-multi-set.ts +17 -6
- package/src/data-structures/binary-tree/tree-set.ts +19 -6
- package/src/data-structures/trie/trie.ts +6 -8
- package/src/types/data-structures/binary-tree/tree-map.ts +7 -1
- package/src/types/data-structures/binary-tree/tree-multi-set.ts +7 -1
- package/src/types/data-structures/binary-tree/tree-set.ts +7 -1
- package/CMakeLists.txt +0 -52
- package/benchmark/report.html +0 -143
- package/benchmark/report.json +0 -1972
- package/build/CMakeCache.txt +0 -603
- package/build/CMakeFiles/4.0.3/CMakeCXXCompiler.cmake +0 -104
- package/build/CMakeFiles/4.0.3/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/build/CMakeFiles/4.0.3/CMakeSystem.cmake +0 -15
- package/build/CMakeFiles/4.0.3/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -920
- package/build/CMakeFiles/4.0.3/CompilerIdCXX/a.out +0 -0
- package/build/CMakeFiles/4.0.3/CompilerIdCXX/apple-sdk.cpp +0 -1
- package/build/CMakeFiles/CMakeConfigureLog.yaml +0 -2146
- package/build/CMakeFiles/CMakeDirectoryInformation.cmake +0 -16
- package/build/CMakeFiles/InstallScripts.json +0 -9
- package/build/CMakeFiles/Makefile.cmake +0 -100
- package/build/CMakeFiles/Makefile2 +0 -720
- package/build/CMakeFiles/TargetDirectories.txt +0 -23
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/compiler_depend.internal +0 -839
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/compiler_depend.make +0 -2506
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/test/performance/data-structures/binary-tree/avl-rb-range-search.test.cpp.o +0 -0
- package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/test/performance/data-structures/binary-tree/avl-rb-range-search.test.cpp.o.d +0 -835
- package/build/CMakeFiles/avl-tree-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/avl-tree-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/avl-tree-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/avl-tree-benchmark.dir/compiler_depend.internal +0 -839
- package/build/CMakeFiles/avl-tree-benchmark.dir/compiler_depend.make +0 -2506
- package/build/CMakeFiles/avl-tree-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/avl-tree-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/avl-tree-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/avl-tree-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/avl-tree-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/avl-tree-benchmark.dir/test/performance/data-structures/binary-tree/avl-tree.test.cpp.o +0 -0
- package/build/CMakeFiles/avl-tree-benchmark.dir/test/performance/data-structures/binary-tree/avl-tree.test.cpp.o.d +0 -835
- package/build/CMakeFiles/cmake.check_cache +0 -1
- package/build/CMakeFiles/deque-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/deque-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/deque-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/deque-benchmark.dir/compiler_depend.internal +0 -791
- package/build/CMakeFiles/deque-benchmark.dir/compiler_depend.make +0 -2362
- package/build/CMakeFiles/deque-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/deque-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/deque-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/deque-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/deque-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/deque-benchmark.dir/test/performance/data-structures/queue/deque.test.cpp.o +0 -0
- package/build/CMakeFiles/deque-benchmark.dir/test/performance/data-structures/queue/deque.test.cpp.o.d +0 -787
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/compiler_depend.internal +0 -790
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/compiler_depend.make +0 -2359
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/test/performance/data-structures/linked-list/doubly-linked-list.test.cpp.o +0 -0
- package/build/CMakeFiles/doubly-linked-list-benchmark.dir/test/performance/data-structures/linked-list/doubly-linked-list.test.cpp.o.d +0 -786
- package/build/CMakeFiles/hash-map-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/hash-map-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/hash-map-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/hash-map-benchmark.dir/compiler_depend.internal +0 -790
- package/build/CMakeFiles/hash-map-benchmark.dir/compiler_depend.make +0 -2359
- package/build/CMakeFiles/hash-map-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/hash-map-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/hash-map-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/hash-map-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/hash-map-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/hash-map-benchmark.dir/test/performance/data-structures/hash/hash-map.test.cpp.o +0 -0
- package/build/CMakeFiles/hash-map-benchmark.dir/test/performance/data-structures/hash/hash-map.test.cpp.o.d +0 -786
- package/build/CMakeFiles/heap-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/heap-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/heap-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/heap-benchmark.dir/compiler_depend.internal +0 -843
- package/build/CMakeFiles/heap-benchmark.dir/compiler_depend.make +0 -2518
- package/build/CMakeFiles/heap-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/heap-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/heap-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/heap-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/heap-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/heap-benchmark.dir/test/performance/data-structures/heap/heap.test.cpp.o +0 -0
- package/build/CMakeFiles/heap-benchmark.dir/test/performance/data-structures/heap/heap.test.cpp.o.d +0 -839
- package/build/CMakeFiles/priority-queue-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/priority-queue-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/priority-queue-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/priority-queue-benchmark.dir/compiler_depend.internal +0 -793
- package/build/CMakeFiles/priority-queue-benchmark.dir/compiler_depend.make +0 -2368
- package/build/CMakeFiles/priority-queue-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/priority-queue-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/priority-queue-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/priority-queue-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/priority-queue-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/priority-queue-benchmark.dir/test/performance/data-structures/priority-queue/priority-queue.test.cpp.o +0 -0
- package/build/CMakeFiles/priority-queue-benchmark.dir/test/performance/data-structures/priority-queue/priority-queue.test.cpp.o.d +0 -789
- package/build/CMakeFiles/progress.marks +0 -1
- package/build/CMakeFiles/queue-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/queue-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/queue-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/queue-benchmark.dir/compiler_depend.internal +0 -793
- package/build/CMakeFiles/queue-benchmark.dir/compiler_depend.make +0 -2368
- package/build/CMakeFiles/queue-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/queue-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/queue-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/queue-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/queue-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/queue-benchmark.dir/test/performance/data-structures/queue/queue.test.cpp.o +0 -0
- package/build/CMakeFiles/queue-benchmark.dir/test/performance/data-structures/queue/queue.test.cpp.o.d +0 -789
- package/build/CMakeFiles/red-black-tree-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/red-black-tree-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/red-black-tree-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/red-black-tree-benchmark.dir/compiler_depend.internal +0 -839
- package/build/CMakeFiles/red-black-tree-benchmark.dir/compiler_depend.make +0 -2506
- package/build/CMakeFiles/red-black-tree-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/red-black-tree-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/red-black-tree-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/red-black-tree-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/red-black-tree-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/red-black-tree-benchmark.dir/test/performance/data-structures/binary-tree/red-black-tree.test.cpp.o +0 -0
- package/build/CMakeFiles/red-black-tree-benchmark.dir/test/performance/data-structures/binary-tree/red-black-tree.test.cpp.o.d +0 -835
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/compiler_depend.internal +0 -790
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/compiler_depend.make +0 -2359
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/test/performance/data-structures/linked-list/singly-linked-list.test.cpp.o +0 -0
- package/build/CMakeFiles/singly-linked-list-benchmark.dir/test/performance/data-structures/linked-list/singly-linked-list.test.cpp.o.d +0 -786
- package/build/CMakeFiles/stack-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/stack-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/stack-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/stack-benchmark.dir/compiler_depend.internal +0 -793
- package/build/CMakeFiles/stack-benchmark.dir/compiler_depend.make +0 -2368
- package/build/CMakeFiles/stack-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/stack-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/stack-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/stack-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/stack-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/stack-benchmark.dir/test/performance/data-structures/stack/stack.test.cpp.o +0 -0
- package/build/CMakeFiles/stack-benchmark.dir/test/performance/data-structures/stack/stack.test.cpp.o.d +0 -789
- package/build/CMakeFiles/tree-map-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/tree-map-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/tree-map-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/tree-map-benchmark.dir/compiler_depend.internal +0 -839
- package/build/CMakeFiles/tree-map-benchmark.dir/compiler_depend.make +0 -2506
- package/build/CMakeFiles/tree-map-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/tree-map-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/tree-map-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/tree-map-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/tree-map-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/tree-map-benchmark.dir/test/performance/data-structures/binary-tree/tree-map.test.cpp.o +0 -0
- package/build/CMakeFiles/tree-map-benchmark.dir/test/performance/data-structures/binary-tree/tree-map.test.cpp.o.d +0 -835
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/compiler_depend.internal +0 -839
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/compiler_depend.make +0 -2506
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/test/performance/data-structures/binary-tree/tree-multi-map.test.cpp.o +0 -0
- package/build/CMakeFiles/tree-multi-map-benchmark.dir/test/performance/data-structures/binary-tree/tree-multi-map.test.cpp.o.d +0 -835
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/compiler_depend.internal +0 -839
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/compiler_depend.make +0 -2506
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/test/performance/data-structures/binary-tree/tree-multi-set.test.cpp.o +0 -0
- package/build/CMakeFiles/tree-multi-set-benchmark.dir/test/performance/data-structures/binary-tree/tree-multi-set.test.cpp.o.d +0 -835
- package/build/CMakeFiles/tree-set-benchmark.dir/DependInfo.cmake +0 -23
- package/build/CMakeFiles/tree-set-benchmark.dir/build.make +0 -114
- package/build/CMakeFiles/tree-set-benchmark.dir/cmake_clean.cmake +0 -11
- package/build/CMakeFiles/tree-set-benchmark.dir/compiler_depend.internal +0 -839
- package/build/CMakeFiles/tree-set-benchmark.dir/compiler_depend.make +0 -2506
- package/build/CMakeFiles/tree-set-benchmark.dir/compiler_depend.ts +0 -2
- package/build/CMakeFiles/tree-set-benchmark.dir/depend.make +0 -2
- package/build/CMakeFiles/tree-set-benchmark.dir/flags.make +0 -10
- package/build/CMakeFiles/tree-set-benchmark.dir/link.txt +0 -1
- package/build/CMakeFiles/tree-set-benchmark.dir/progress.make +0 -3
- package/build/CMakeFiles/tree-set-benchmark.dir/test/performance/data-structures/binary-tree/tree-set.test.cpp.o +0 -0
- package/build/CMakeFiles/tree-set-benchmark.dir/test/performance/data-structures/binary-tree/tree-set.test.cpp.o.d +0 -835
- package/build/Makefile +0 -783
- package/build/_deps/benchmark-build/CMakeFiles/CMakeDirectoryInformation.cmake +0 -16
- package/build/_deps/benchmark-build/CMakeFiles/progress.marks +0 -1
- package/build/_deps/benchmark-build/Makefile +0 -140
- package/build/_deps/benchmark-build/benchmark.pc +0 -12
- package/build/_deps/benchmark-build/benchmarkConfig.cmake +0 -14
- package/build/_deps/benchmark-build/benchmarkConfigVersion.cmake +0 -65
- package/build/_deps/benchmark-build/benchmarkTargets.cmake +0 -84
- package/build/_deps/benchmark-build/cmake_install.cmake +0 -50
- package/build/_deps/benchmark-build/src/CMakeFiles/CMakeDirectoryInformation.cmake +0 -16
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/DependInfo.cmake +0 -41
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark.cc.o.d +0 -875
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_api_internal.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_api_internal.cc.o.d +0 -802
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_name.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_name.cc.o.d +0 -772
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_register.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_register.cc.o.d +0 -841
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_runner.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_runner.cc.o.d +0 -833
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/build.make +0 -402
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/check.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/check.cc.o.d +0 -784
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/cmake_clean.cmake +0 -47
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/cmake_clean_target.cmake +0 -3
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/colorprint.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/colorprint.cc.o.d +0 -791
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/commandlineflags.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/commandlineflags.cc.o.d +0 -795
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/compiler_depend.internal +0 -15519
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/compiler_depend.make +0 -17500
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/compiler_depend.ts +0 -2
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/complexity.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/complexity.cc.o.d +0 -793
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/console_reporter.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/console_reporter.cc.o.d +0 -802
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/counter.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/counter.cc.o.d +0 -773
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/csv_reporter.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/csv_reporter.cc.o.d +0 -799
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/depend.make +0 -2
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/flags.make +0 -10
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/json_reporter.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/json_reporter.cc.o.d +0 -800
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/link.txt +0 -2
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/perf_counters.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/perf_counters.cc.o.d +0 -807
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/progress.make +0 -21
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/reporter.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/reporter.cc.o.d +0 -798
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/statistics.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/statistics.cc.o.d +0 -800
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/string_util.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/string_util.cc.o.d +0 -795
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/sysinfo.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/sysinfo.cc.o.d +0 -933
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/timers.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/timers.cc.o.d +0 -904
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/DependInfo.cmake +0 -23
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/benchmark_main.cc.o +0 -0
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/benchmark_main.cc.o.d +0 -772
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/build.make +0 -114
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/cmake_clean.cmake +0 -11
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/cmake_clean_target.cmake +0 -3
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/compiler_depend.internal +0 -776
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/compiler_depend.make +0 -2317
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/compiler_depend.ts +0 -2
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/depend.make +0 -2
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/flags.make +0 -10
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/link.txt +0 -2
- package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/progress.make +0 -3
- package/build/_deps/benchmark-build/src/CMakeFiles/progress.marks +0 -1
- package/build/_deps/benchmark-build/src/Makefile +0 -710
- package/build/_deps/benchmark-build/src/cmake_install.cmake +0 -45
- package/build/_deps/benchmark-build/src/libbenchmark.a +0 -0
- package/build/_deps/benchmark-build/src/libbenchmark_main.a +0 -0
- package/build/_deps/benchmark-src/.clang-format +0 -5
- package/build/_deps/benchmark-src/.clang-tidy +0 -7
- package/build/_deps/benchmark-src/.github/ISSUE_TEMPLATE/bug_report.md +0 -32
- package/build/_deps/benchmark-src/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/build/_deps/benchmark-src/.github/install_bazel.sh +0 -13
- package/build/_deps/benchmark-src/.github/libcxx-setup.sh +0 -26
- package/build/_deps/benchmark-src/.github/workflows/bazel.yml +0 -35
- package/build/_deps/benchmark-src/.github/workflows/build-and-test-min-cmake.yml +0 -46
- package/build/_deps/benchmark-src/.github/workflows/build-and-test-perfcounters.yml +0 -51
- package/build/_deps/benchmark-src/.github/workflows/build-and-test.yml +0 -114
- package/build/_deps/benchmark-src/.github/workflows/clang-format-lint.yml +0 -17
- package/build/_deps/benchmark-src/.github/workflows/clang-tidy.yml +0 -38
- package/build/_deps/benchmark-src/.github/workflows/doxygen.yml +0 -28
- package/build/_deps/benchmark-src/.github/workflows/pylint.yml +0 -28
- package/build/_deps/benchmark-src/.github/workflows/sanitizer.yml +0 -96
- package/build/_deps/benchmark-src/.github/workflows/test_bindings.yml +0 -29
- package/build/_deps/benchmark-src/.github/workflows/wheels.yml +0 -79
- package/build/_deps/benchmark-src/.travis.yml +0 -208
- package/build/_deps/benchmark-src/.ycm_extra_conf.py +0 -115
- package/build/_deps/benchmark-src/AUTHORS +0 -71
- package/build/_deps/benchmark-src/BUILD.bazel +0 -87
- package/build/_deps/benchmark-src/CMakeLists.txt +0 -340
- package/build/_deps/benchmark-src/CONTRIBUTING.md +0 -58
- package/build/_deps/benchmark-src/CONTRIBUTORS +0 -95
- package/build/_deps/benchmark-src/LICENSE +0 -202
- package/build/_deps/benchmark-src/MODULE.bazel +0 -24
- package/build/_deps/benchmark-src/README.md +0 -223
- package/build/_deps/benchmark-src/WORKSPACE +0 -22
- package/build/_deps/benchmark-src/WORKSPACE.bzlmod +0 -2
- package/build/_deps/benchmark-src/_config.yml +0 -2
- package/build/_deps/benchmark-src/appveyor.yml +0 -50
- package/build/_deps/benchmark-src/bazel/benchmark_deps.bzl +0 -65
- package/build/_deps/benchmark-src/bindings/python/BUILD +0 -3
- package/build/_deps/benchmark-src/bindings/python/build_defs.bzl +0 -25
- package/build/_deps/benchmark-src/bindings/python/google_benchmark/BUILD +0 -40
- package/build/_deps/benchmark-src/bindings/python/google_benchmark/__init__.py +0 -162
- package/build/_deps/benchmark-src/bindings/python/google_benchmark/benchmark.cc +0 -184
- package/build/_deps/benchmark-src/bindings/python/google_benchmark/example.py +0 -136
- package/build/_deps/benchmark-src/bindings/python/nanobind.BUILD +0 -17
- package/build/_deps/benchmark-src/bindings/python/python_headers.BUILD +0 -6
- package/build/_deps/benchmark-src/cmake/AddCXXCompilerFlag.cmake +0 -78
- package/build/_deps/benchmark-src/cmake/CXXFeatureCheck.cmake +0 -82
- package/build/_deps/benchmark-src/cmake/Config.cmake.in +0 -7
- package/build/_deps/benchmark-src/cmake/GetGitVersion.cmake +0 -58
- package/build/_deps/benchmark-src/cmake/GoogleTest.cmake +0 -58
- package/build/_deps/benchmark-src/cmake/GoogleTest.cmake.in +0 -59
- package/build/_deps/benchmark-src/cmake/benchmark.pc.in +0 -12
- package/build/_deps/benchmark-src/cmake/gnu_posix_regex.cpp +0 -12
- package/build/_deps/benchmark-src/cmake/llvm-toolchain.cmake +0 -8
- package/build/_deps/benchmark-src/cmake/posix_regex.cpp +0 -14
- package/build/_deps/benchmark-src/cmake/pthread_affinity.cpp +0 -16
- package/build/_deps/benchmark-src/cmake/split_list.cmake +0 -3
- package/build/_deps/benchmark-src/cmake/std_regex.cpp +0 -10
- package/build/_deps/benchmark-src/cmake/steady_clock.cpp +0 -7
- package/build/_deps/benchmark-src/cmake/thread_safety_attributes.cpp +0 -4
- package/build/_deps/benchmark-src/docs/AssemblyTests.md +0 -149
- package/build/_deps/benchmark-src/docs/_config.yml +0 -3
- package/build/_deps/benchmark-src/docs/assets/images/icon.png +0 -0
- package/build/_deps/benchmark-src/docs/assets/images/icon.xcf +0 -0
- package/build/_deps/benchmark-src/docs/assets/images/icon_black.png +0 -0
- package/build/_deps/benchmark-src/docs/assets/images/icon_black.xcf +0 -0
- package/build/_deps/benchmark-src/docs/dependencies.md +0 -13
- package/build/_deps/benchmark-src/docs/index.md +0 -12
- package/build/_deps/benchmark-src/docs/perf_counters.md +0 -35
- package/build/_deps/benchmark-src/docs/platform_specific_build_instructions.md +0 -48
- package/build/_deps/benchmark-src/docs/python_bindings.md +0 -34
- package/build/_deps/benchmark-src/docs/random_interleaving.md +0 -13
- package/build/_deps/benchmark-src/docs/reducing_variance.md +0 -100
- package/build/_deps/benchmark-src/docs/releasing.md +0 -41
- package/build/_deps/benchmark-src/docs/tools.md +0 -343
- package/build/_deps/benchmark-src/docs/user_guide.md +0 -1266
- package/build/_deps/benchmark-src/include/benchmark/benchmark.h +0 -1991
- package/build/_deps/benchmark-src/include/benchmark/export.h +0 -47
- package/build/_deps/benchmark-src/pyproject.toml +0 -50
- package/build/_deps/benchmark-src/setup.py +0 -113
- package/build/_deps/benchmark-src/src/CMakeLists.txt +0 -170
- package/build/_deps/benchmark-src/src/arraysize.h +0 -33
- package/build/_deps/benchmark-src/src/benchmark.cc +0 -779
- package/build/_deps/benchmark-src/src/benchmark_api_internal.cc +0 -118
- package/build/_deps/benchmark-src/src/benchmark_api_internal.h +0 -87
- package/build/_deps/benchmark-src/src/benchmark_main.cc +0 -18
- package/build/_deps/benchmark-src/src/benchmark_name.cc +0 -59
- package/build/_deps/benchmark-src/src/benchmark_register.cc +0 -520
- package/build/_deps/benchmark-src/src/benchmark_register.h +0 -109
- package/build/_deps/benchmark-src/src/benchmark_runner.cc +0 -497
- package/build/_deps/benchmark-src/src/benchmark_runner.h +0 -131
- package/build/_deps/benchmark-src/src/check.cc +0 -11
- package/build/_deps/benchmark-src/src/check.h +0 -106
- package/build/_deps/benchmark-src/src/colorprint.cc +0 -200
- package/build/_deps/benchmark-src/src/colorprint.h +0 -33
- package/build/_deps/benchmark-src/src/commandlineflags.cc +0 -298
- package/build/_deps/benchmark-src/src/commandlineflags.h +0 -133
- package/build/_deps/benchmark-src/src/complexity.cc +0 -244
- package/build/_deps/benchmark-src/src/complexity.h +0 -55
- package/build/_deps/benchmark-src/src/console_reporter.cc +0 -206
- package/build/_deps/benchmark-src/src/counter.cc +0 -80
- package/build/_deps/benchmark-src/src/counter.h +0 -32
- package/build/_deps/benchmark-src/src/csv_reporter.cc +0 -161
- package/build/_deps/benchmark-src/src/cycleclock.h +0 -230
- package/build/_deps/benchmark-src/src/internal_macros.h +0 -115
- package/build/_deps/benchmark-src/src/json_reporter.cc +0 -320
- package/build/_deps/benchmark-src/src/log.h +0 -88
- package/build/_deps/benchmark-src/src/mutex.h +0 -155
- package/build/_deps/benchmark-src/src/perf_counters.cc +0 -282
- package/build/_deps/benchmark-src/src/perf_counters.h +0 -200
- package/build/_deps/benchmark-src/src/re.h +0 -158
- package/build/_deps/benchmark-src/src/reporter.cc +0 -118
- package/build/_deps/benchmark-src/src/statistics.cc +0 -209
- package/build/_deps/benchmark-src/src/statistics.h +0 -44
- package/build/_deps/benchmark-src/src/string_util.cc +0 -254
- package/build/_deps/benchmark-src/src/string_util.h +0 -70
- package/build/_deps/benchmark-src/src/sysinfo.cc +0 -855
- package/build/_deps/benchmark-src/src/thread_manager.h +0 -63
- package/build/_deps/benchmark-src/src/thread_timer.h +0 -86
- package/build/_deps/benchmark-src/src/timers.cc +0 -272
- package/build/_deps/benchmark-src/src/timers.h +0 -48
- package/build/_deps/benchmark-src/test/AssemblyTests.cmake +0 -67
- package/build/_deps/benchmark-src/test/BUILD +0 -127
- package/build/_deps/benchmark-src/test/CMakeLists.txt +0 -309
- package/build/_deps/benchmark-src/test/args_product_test.cc +0 -77
- package/build/_deps/benchmark-src/test/basic_test.cc +0 -180
- package/build/_deps/benchmark-src/test/benchmark_gtest.cc +0 -169
- package/build/_deps/benchmark-src/test/benchmark_min_time_flag_iters_test.cc +0 -66
- package/build/_deps/benchmark-src/test/benchmark_min_time_flag_time_test.cc +0 -90
- package/build/_deps/benchmark-src/test/benchmark_name_gtest.cc +0 -82
- package/build/_deps/benchmark-src/test/benchmark_random_interleaving_gtest.cc +0 -126
- package/build/_deps/benchmark-src/test/benchmark_setup_teardown_test.cc +0 -157
- package/build/_deps/benchmark-src/test/benchmark_test.cc +0 -274
- package/build/_deps/benchmark-src/test/clobber_memory_assembly_test.cc +0 -64
- package/build/_deps/benchmark-src/test/commandlineflags_gtest.cc +0 -228
- package/build/_deps/benchmark-src/test/complexity_test.cc +0 -228
- package/build/_deps/benchmark-src/test/cxx03_test.cc +0 -62
- package/build/_deps/benchmark-src/test/diagnostics_test.cc +0 -91
- package/build/_deps/benchmark-src/test/display_aggregates_only_test.cc +0 -45
- package/build/_deps/benchmark-src/test/donotoptimize_assembly_test.cc +0 -201
- package/build/_deps/benchmark-src/test/donotoptimize_test.cc +0 -69
- package/build/_deps/benchmark-src/test/filter_test.cc +0 -117
- package/build/_deps/benchmark-src/test/fixture_test.cc +0 -51
- package/build/_deps/benchmark-src/test/internal_threading_test.cc +0 -185
- package/build/_deps/benchmark-src/test/link_main_test.cc +0 -9
- package/build/_deps/benchmark-src/test/map_test.cc +0 -59
- package/build/_deps/benchmark-src/test/memory_manager_test.cc +0 -47
- package/build/_deps/benchmark-src/test/min_time_parse_gtest.cc +0 -30
- package/build/_deps/benchmark-src/test/multiple_ranges_test.cc +0 -96
- package/build/_deps/benchmark-src/test/options_test.cc +0 -77
- package/build/_deps/benchmark-src/test/output_test.h +0 -211
- package/build/_deps/benchmark-src/test/output_test_helper.cc +0 -519
- package/build/_deps/benchmark-src/test/perf_counters_gtest.cc +0 -307
- package/build/_deps/benchmark-src/test/perf_counters_test.cc +0 -92
- package/build/_deps/benchmark-src/test/register_benchmark_test.cc +0 -196
- package/build/_deps/benchmark-src/test/repetitions_test.cc +0 -214
- package/build/_deps/benchmark-src/test/report_aggregates_only_test.cc +0 -41
- package/build/_deps/benchmark-src/test/reporter_output_test.cc +0 -1130
- package/build/_deps/benchmark-src/test/skip_with_error_test.cc +0 -199
- package/build/_deps/benchmark-src/test/spec_arg_test.cc +0 -105
- package/build/_deps/benchmark-src/test/spec_arg_verbosity_test.cc +0 -43
- package/build/_deps/benchmark-src/test/state_assembly_test.cc +0 -68
- package/build/_deps/benchmark-src/test/statistics_gtest.cc +0 -35
- package/build/_deps/benchmark-src/test/string_util_gtest.cc +0 -199
- package/build/_deps/benchmark-src/test/templated_fixture_test.cc +0 -28
- package/build/_deps/benchmark-src/test/time_unit_gtest.cc +0 -37
- package/build/_deps/benchmark-src/test/user_counters_tabular_test.cc +0 -558
- package/build/_deps/benchmark-src/test/user_counters_test.cc +0 -561
- package/build/_deps/benchmark-src/test/user_counters_thousands_test.cc +0 -186
- package/build/_deps/benchmark-src/tools/BUILD.bazel +0 -19
- package/build/_deps/benchmark-src/tools/compare.py +0 -432
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test1_run1.json +0 -127
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test1_run2.json +0 -127
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test2_run.json +0 -81
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test3_run0.json +0 -65
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test3_run1.json +0 -65
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test4_run.json +0 -96
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test4_run0.json +0 -21
- package/build/_deps/benchmark-src/tools/gbench/Inputs/test4_run1.json +0 -21
- package/build/_deps/benchmark-src/tools/gbench/__init__.py +0 -8
- package/build/_deps/benchmark-src/tools/gbench/report.py +0 -1201
- package/build/_deps/benchmark-src/tools/gbench/util.py +0 -203
- package/build/_deps/benchmark-src/tools/libpfm.BUILD.bazel +0 -22
- package/build/_deps/benchmark-src/tools/requirements.txt +0 -2
- package/build/_deps/benchmark-src/tools/strip_asm.py +0 -151
- package/build/_deps/benchmark-subbuild/CMakeCache.txt +0 -133
- package/build/_deps/benchmark-subbuild/CMakeFiles/4.0.3/CMakeSystem.cmake +0 -15
- package/build/_deps/benchmark-subbuild/CMakeFiles/CMakeConfigureLog.yaml +0 -11
- package/build/_deps/benchmark-subbuild/CMakeFiles/CMakeDirectoryInformation.cmake +0 -16
- package/build/_deps/benchmark-subbuild/CMakeFiles/CMakeRuleHashes.txt +0 -11
- package/build/_deps/benchmark-subbuild/CMakeFiles/InstallScripts.json +0 -7
- package/build/_deps/benchmark-subbuild/CMakeFiles/Makefile.cmake +0 -52
- package/build/_deps/benchmark-subbuild/CMakeFiles/Makefile2 +0 -122
- package/build/_deps/benchmark-subbuild/CMakeFiles/TargetDirectories.txt +0 -3
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate-complete +0 -0
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/DependInfo.cmake +0 -22
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/Labels.json +0 -46
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/Labels.txt +0 -14
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/build.make +0 -162
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/cmake_clean.cmake +0 -17
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/compiler_depend.make +0 -2
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/compiler_depend.ts +0 -2
- package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/progress.make +0 -10
- package/build/_deps/benchmark-subbuild/CMakeFiles/cmake.check_cache +0 -1
- package/build/_deps/benchmark-subbuild/CMakeFiles/progress.marks +0 -1
- package/build/_deps/benchmark-subbuild/CMakeLists.txt +0 -42
- package/build/_deps/benchmark-subbuild/Makefile +0 -162
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-build +0 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-configure +0 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-done +0 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-download +0 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-gitclone-lastrun.txt +0 -15
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-gitinfo.txt +0 -15
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-install +0 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-mkdir +0 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-patch +0 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-patch-info.txt +0 -6
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-test +0 -0
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-update-info.txt +0 -7
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/tmp/benchmark-populate-cfgcmd.txt +0 -1
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/tmp/benchmark-populate-gitclone.cmake +0 -87
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/tmp/benchmark-populate-gitupdate.cmake +0 -317
- package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/tmp/benchmark-populate-mkdirs.cmake +0 -27
- package/build/_deps/benchmark-subbuild/cmake_install.cmake +0 -56
- package/build/bin/avl-rb-range-search-benchmark +0 -0
- package/build/bin/avl-tree-benchmark +0 -0
- package/build/bin/deque-benchmark +0 -0
- package/build/bin/doubly-linked-list-benchmark +0 -0
- package/build/bin/hash-map-benchmark +0 -0
- package/build/bin/heap-benchmark +0 -0
- package/build/bin/priority-queue-benchmark +0 -0
- package/build/bin/queue-benchmark +0 -0
- package/build/bin/red-black-tree-benchmark +0 -0
- package/build/bin/singly-linked-list-benchmark +0 -0
- package/build/bin/stack-benchmark +0 -0
- package/build/bin/tree-map-benchmark +0 -0
- package/build/bin/tree-multi-map-benchmark +0 -0
- package/build/bin/tree-multi-set-benchmark +0 -0
- package/build/bin/tree-set-benchmark +0 -0
- package/build/cmake_install.cmake +0 -66
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs-legacy/index.cjs.map +0 -1
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm-legacy/index.mjs.map +0 -1
- package/dist/umd/data-structure-typed.js.map +0 -1
- package/dist/umd/data-structure-typed.min.js.map +0 -1
- package/eslint.config.mjs +0 -73
- package/test/config.ts +0 -4
- package/test/integration/all-in-one.test.ts +0 -110
- package/test/integration/avl-tree.test.ts +0 -127
- package/test/integration/bst.test.ts +0 -385
- package/test/integration/compile.test.mjs +0 -159
- package/test/integration/compile.test.ts +0 -176
- package/test/integration/heap.test.js +0 -21
- package/test/integration/index.html +0 -462
- package/test/performance/benchmark-runner-enhanced.mjs +0 -818
- package/test/performance/cmake-benchmark-runner.mjs +0 -234
- package/test/performance/data-structures/binary-tree/avl-rb-range-search.test.cpp +0 -112
- package/test/performance/data-structures/binary-tree/avl-rb-range-search.test.mjs +0 -51
- package/test/performance/data-structures/binary-tree/avl-tree.test.cpp +0 -181
- package/test/performance/data-structures/binary-tree/avl-tree.test.mjs +0 -138
- package/test/performance/data-structures/binary-tree/binary-tree-overall.test.mjs +0 -85
- package/test/performance/data-structures/binary-tree/binary-tree.test.mjs +0 -100
- package/test/performance/data-structures/binary-tree/bst.test.mjs +0 -61
- package/test/performance/data-structures/binary-tree/red-black-tree-cjs.test.mjs +0 -259
- package/test/performance/data-structures/binary-tree/red-black-tree.test.cpp +0 -213
- package/test/performance/data-structures/binary-tree/red-black-tree.test.mjs +0 -275
- package/test/performance/data-structures/binary-tree/tree-map.test.cpp +0 -129
- package/test/performance/data-structures/binary-tree/tree-map.test.mjs +0 -171
- package/test/performance/data-structures/binary-tree/tree-multi-map.test.cpp +0 -205
- package/test/performance/data-structures/binary-tree/tree-multi-map.test.mjs +0 -106
- package/test/performance/data-structures/binary-tree/tree-multi-set.test.cpp +0 -217
- package/test/performance/data-structures/binary-tree/tree-multi-set.test.mjs +0 -91
- package/test/performance/data-structures/binary-tree/tree-set.test.cpp +0 -127
- package/test/performance/data-structures/binary-tree/tree-set.test.mjs +0 -174
- package/test/performance/data-structures/comparison/comparison.test.mjs +0 -99
- package/test/performance/data-structures/graph/directed-graph.test.mjs +0 -38
- package/test/performance/data-structures/hash/hash-map.test.cpp +0 -183
- package/test/performance/data-structures/hash/hash-map.test.mjs +0 -187
- package/test/performance/data-structures/heap/heap.test.cpp +0 -61
- package/test/performance/data-structures/heap/heap.test.mjs +0 -31
- package/test/performance/data-structures/linked-list/doubly-linked-list.test.cpp +0 -84
- package/test/performance/data-structures/linked-list/doubly-linked-list.test.mjs +0 -125
- package/test/performance/data-structures/linked-list/singly-linked-list.test.cpp +0 -77
- package/test/performance/data-structures/linked-list/singly-linked-list.test.mjs +0 -84
- package/test/performance/data-structures/priority-queue/max-priority-queue.test.mjs +0 -40
- package/test/performance/data-structures/priority-queue/priority-queue.test.cpp +0 -59
- package/test/performance/data-structures/priority-queue/priority-queue.test.mjs +0 -64
- package/test/performance/data-structures/queue/deque.test.cpp +0 -119
- package/test/performance/data-structures/queue/deque.test.mjs +0 -144
- package/test/performance/data-structures/queue/queue.test.cpp +0 -59
- package/test/performance/data-structures/queue/queue.test.mjs +0 -77
- package/test/performance/data-structures/stack/stack.test.cpp +0 -40
- package/test/performance/data-structures/stack/stack.test.mjs +0 -69
- package/test/performance/data-structures/trie/trie.test.mjs +0 -43
- package/test/performance/reportor-enhanced.mjs +0 -871
- package/test/performance/runner-config.json +0 -51
- package/test/types/index.ts +0 -1
- package/test/types/utils/big-o.ts +0 -1
- package/test/types/utils/index.ts +0 -2
- package/test/types/utils/json2html.ts +0 -5
- package/test/unit/data-structures/base/iterable-element-base.coverage.test.ts +0 -106
- package/test/unit/data-structures/base/iterable-element-base.more-branches.coverage.test.ts +0 -61
- package/test/unit/data-structures/base/linear-base.array.coverage.test.ts +0 -168
- package/test/unit/data-structures/base/linear-base.concat-else.coverage.test.ts +0 -82
- package/test/unit/data-structures/base/linear-base.coverage.test.ts +0 -72
- package/test/unit/data-structures/base/linear-base.more-branches.coverage.test.ts +0 -414
- package/test/unit/data-structures/binary-tree/avl-tree-node.familyPosition-root-left.coverage.test.ts +0 -17
- package/test/unit/data-structures/binary-tree/avl-tree.more-branches-2.coverage.test.ts +0 -99
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +0 -729
- package/test/unit/data-structures/binary-tree/binary-index-tree.test.ts +0 -345
- package/test/unit/data-structures/binary-tree/binary-indexed-tree.more-branches.coverage.test.ts +0 -18
- package/test/unit/data-structures/binary-tree/binary-tree.more-branches.coverage.test.ts +0 -56
- package/test/unit/data-structures/binary-tree/binary-tree.remaining-branches.coverage.test.ts +0 -232
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +0 -1912
- package/test/unit/data-structures/binary-tree/bst.bound-by-predicate.coverage.test.ts +0 -33
- package/test/unit/data-structures/binary-tree/bst.coverage.test.ts +0 -94
- package/test/unit/data-structures/binary-tree/bst.deletebykey.coverage.test.ts +0 -70
- package/test/unit/data-structures/binary-tree/bst.deletewhere.coverage.test.ts +0 -37
- package/test/unit/data-structures/binary-tree/bst.floor-lower-predicate.coverage.test.ts +0 -29
- package/test/unit/data-structures/binary-tree/bst.floor-setmany.coverage.test.ts +0 -72
- package/test/unit/data-structures/binary-tree/bst.getnode.range-ensure.coverage.test.ts +0 -22
- package/test/unit/data-structures/binary-tree/bst.misc-branches.coverage.test.ts +0 -100
- package/test/unit/data-structures/binary-tree/bst.more-branches-2.coverage.test.ts +0 -133
- package/test/unit/data-structures/binary-tree/bst.more-branches-3.coverage.test.ts +0 -45
- package/test/unit/data-structures/binary-tree/bst.more-branches-4.coverage.test.ts +0 -36
- package/test/unit/data-structures/binary-tree/bst.more-branches-5.coverage.test.ts +0 -40
- package/test/unit/data-structures/binary-tree/bst.more.coverage.test.ts +0 -39
- package/test/unit/data-structures/binary-tree/bst.node-family.coverage.test.ts +0 -29
- package/test/unit/data-structures/binary-tree/bst.range-pruning.coverage.test.ts +0 -43
- package/test/unit/data-structures/binary-tree/bst.search-fastpath.coverage.test.ts +0 -30
- package/test/unit/data-structures/binary-tree/bst.test.ts +0 -3472
- package/test/unit/data-structures/binary-tree/data/cost-of-living-by-country.ts +0 -259
- package/test/unit/data-structures/binary-tree/overall.test.ts +0 -219
- package/test/unit/data-structures/binary-tree/red-black-tree.boundary-corruption-repair.coverage.test.ts +0 -66
- package/test/unit/data-structures/binary-tree/red-black-tree.boundary-max-update.coverage.test.ts +0 -18
- package/test/unit/data-structures/binary-tree/red-black-tree.boundary-null.coverage.test.ts +0 -53
- package/test/unit/data-structures/binary-tree/red-black-tree.boundary-stale-cache.coverage.test.ts +0 -25
- package/test/unit/data-structures/binary-tree/red-black-tree.boundary-update.coverage.test.ts +0 -23
- package/test/unit/data-structures/binary-tree/red-black-tree.cache-delete.coverage.test.ts +0 -49
- package/test/unit/data-structures/binary-tree/red-black-tree.cache-edge.coverage.test.ts +0 -37
- package/test/unit/data-structures/binary-tree/red-black-tree.cache-stale-insert.coverage.test.ts +0 -39
- package/test/unit/data-structures/binary-tree/red-black-tree.coverage.test.ts +0 -334
- package/test/unit/data-structures/binary-tree/red-black-tree.delete-fixup.coverage.test.ts +0 -68
- package/test/unit/data-structures/binary-tree/red-black-tree.delete-successor.coverage.test.ts +0 -75
- package/test/unit/data-structures/binary-tree/red-black-tree.factories.coverage.test.ts +0 -26
- package/test/unit/data-structures/binary-tree/red-black-tree.hint-cache-compare-update.coverage.test.ts +0 -74
- package/test/unit/data-structures/binary-tree/red-black-tree.hint-cache-no-update.coverage.test.ts +0 -44
- package/test/unit/data-structures/binary-tree/red-black-tree.hint-cache-nullish.coverage.test.ts +0 -61
- package/test/unit/data-structures/binary-tree/red-black-tree.hint-mapmode-defined.coverage.test.ts +0 -35
- package/test/unit/data-structures/binary-tree/red-black-tree.hint-mapmode-undefined.coverage.test.ts +0 -43
- package/test/unit/data-structures/binary-tree/red-black-tree.hint-more.coverage.test.ts +0 -99
- package/test/unit/data-structures/binary-tree/red-black-tree.hint.coverage.test.ts +0 -60
- package/test/unit/data-structures/binary-tree/red-black-tree.insert-cache-nullish.coverage.test.ts +0 -29
- package/test/unit/data-structures/binary-tree/red-black-tree.insert-header-parent-nullish.coverage.test.ts +0 -17
- package/test/unit/data-structures/binary-tree/red-black-tree.internal-walk.coverage.test.ts +0 -57
- package/test/unit/data-structures/binary-tree/red-black-tree.minmax-cache.test.ts +0 -65
- package/test/unit/data-structures/binary-tree/red-black-tree.misc-inputs.coverage.test.ts +0 -17
- package/test/unit/data-structures/binary-tree/red-black-tree.more-branches-2.coverage.test.ts +0 -121
- package/test/unit/data-structures/binary-tree/red-black-tree.more-branches-3.coverage.test.ts +0 -55
- package/test/unit/data-structures/binary-tree/red-black-tree.more-branches-4.coverage.test.ts +0 -44
- package/test/unit/data-structures/binary-tree/red-black-tree.predsucc.coverage.test.ts +0 -40
- package/test/unit/data-structures/binary-tree/red-black-tree.remaining-branches.coverage.test.ts +0 -123
- package/test/unit/data-structures/binary-tree/red-black-tree.set-inputs.coverage.test.ts +0 -64
- package/test/unit/data-structures/binary-tree/red-black-tree.setkvnode-parent-cache.coverage.test.ts +0 -79
- package/test/unit/data-structures/binary-tree/red-black-tree.setkvnode-remaining.coverage.test.ts +0 -44
- package/test/unit/data-structures/binary-tree/red-black-tree.setkvnode-uncovered.coverage.test.ts +0 -74
- package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +0 -936
- package/test/unit/data-structures/binary-tree/red-black-tree.update-branches.coverage.test.ts +0 -30
- package/test/unit/data-structures/binary-tree/segment-tree.more-branches.coverage.test.ts +0 -31
- package/test/unit/data-structures/binary-tree/segment-tree.test.ts +0 -104
- package/test/unit/data-structures/binary-tree/tree-map.test.ts +0 -270
- package/test/unit/data-structures/binary-tree/tree-multi-map.coverage.test.ts +0 -245
- package/test/unit/data-structures/binary-tree/tree-multi-map.legacy.test.ts.skip +0 -1115
- package/test/unit/data-structures/binary-tree/tree-multi-map.more-branches-2.coverage.test.ts.skip +0 -59
- package/test/unit/data-structures/binary-tree/tree-multi-map.rfc.test.ts +0 -99
- package/test/unit/data-structures/binary-tree/tree-multi-map.simplified.test.ts +0 -482
- package/test/unit/data-structures/binary-tree/tree-multi-set.test.ts +0 -545
- package/test/unit/data-structures/binary-tree/tree-set.test.ts +0 -187
- package/test/unit/data-structures/graph/abstract-graph.more-branches-2.coverage.test.ts +0 -40
- package/test/unit/data-structures/graph/abstract-graph.more-branches-3.coverage.test.ts +0 -65
- package/test/unit/data-structures/graph/abstract-graph.more-branches-4.coverage.test.ts +0 -98
- package/test/unit/data-structures/graph/abstract-graph.more-branches-5.coverage.test.ts +0 -51
- package/test/unit/data-structures/graph/abstract-graph.more-branches.coverage.test.ts +0 -62
- package/test/unit/data-structures/graph/abstract-graph.test.ts +0 -117
- package/test/unit/data-structures/graph/directed-graph.more-branches-2.coverage.test.ts +0 -38
- package/test/unit/data-structures/graph/directed-graph.more-branches-3.coverage.test.ts +0 -25
- package/test/unit/data-structures/graph/directed-graph.more-branches.coverage.test.ts +0 -82
- package/test/unit/data-structures/graph/directed-graph.test.ts +0 -1185
- package/test/unit/data-structures/graph/map-graph.more-branches.coverage.test.ts +0 -22
- package/test/unit/data-structures/graph/map-graph.test.ts +0 -148
- package/test/unit/data-structures/graph/overall.test.ts +0 -49
- package/test/unit/data-structures/graph/salty-edges.json +0 -875
- package/test/unit/data-structures/graph/salty-vertexes.json +0 -200
- package/test/unit/data-structures/graph/undirected-graph.more-branches-2.coverage.test.ts +0 -35
- package/test/unit/data-structures/graph/undirected-graph.more-branches.coverage.test.ts +0 -87
- package/test/unit/data-structures/graph/undirected-graph.test.ts +0 -782
- package/test/unit/data-structures/hash/hash-map.more-branches.coverage.test.ts +0 -64
- package/test/unit/data-structures/hash/hash-map.test.ts +0 -1125
- package/test/unit/data-structures/hash/hash-map.toEntryFn-branch.coverage.test.ts +0 -9
- package/test/unit/data-structures/heap/heap.misc-branches.coverage.test.ts +0 -110
- package/test/unit/data-structures/heap/heap.remaining-branches.coverage.test.ts +0 -22
- package/test/unit/data-structures/heap/heap.test.ts +0 -760
- package/test/unit/data-structures/heap/max-heap.coverage.test.ts +0 -29
- package/test/unit/data-structures/heap/max-heap.test.ts +0 -98
- package/test/unit/data-structures/heap/min-heap.test.ts +0 -117
- package/test/unit/data-structures/linked-list/doubly-linked-list.more-branches.coverage.test.ts +0 -72
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +0 -1150
- package/test/unit/data-structures/linked-list/linked-list.test.ts +0 -8
- package/test/unit/data-structures/linked-list/linked-list.unshiftMany-else.coverage.test.ts +0 -15
- package/test/unit/data-structures/linked-list/singly-linked-list.coverage.test.ts +0 -221
- package/test/unit/data-structures/linked-list/singly-linked-list.more-branches.coverage.test.ts +0 -86
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +0 -836
- package/test/unit/data-structures/linked-list/skip-linked-list.more-branches.coverage.test.ts +0 -31
- package/test/unit/data-structures/linked-list/skip-linked-list.test.ts +0 -13
- package/test/unit/data-structures/linked-list/skip-list.test.ts +0 -86
- package/test/unit/data-structures/matrix/matrix.more-branches.coverage.test.ts +0 -81
- package/test/unit/data-structures/matrix/matrix.pivotElement-nullish.coverage.test.ts +0 -28
- package/test/unit/data-structures/matrix/matrix.test.ts +0 -377
- package/test/unit/data-structures/matrix/navigator.test.ts +0 -244
- package/test/unit/data-structures/priority-queue/max-priority-queue.more-branches.coverage.test.ts +0 -10
- package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +0 -160
- package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +0 -78
- package/test/unit/data-structures/priority-queue/priority-queue.coverage.test.ts +0 -21
- package/test/unit/data-structures/priority-queue/priority-queue.test.ts +0 -101
- package/test/unit/data-structures/queue/deque.coverage.test.ts +0 -173
- package/test/unit/data-structures/queue/deque.more-branches-2.coverage.test.ts +0 -39
- package/test/unit/data-structures/queue/deque.more-branches-3.coverage.test.ts +0 -9
- package/test/unit/data-structures/queue/deque.more-branches.coverage.test.ts +0 -95
- package/test/unit/data-structures/queue/deque.test.ts +0 -936
- package/test/unit/data-structures/queue/queue.coverage.test.ts +0 -138
- package/test/unit/data-structures/queue/queue.more-branches-2.coverage.test.ts +0 -27
- package/test/unit/data-structures/queue/queue.test.ts +0 -703
- package/test/unit/data-structures/stack/stack.coverage.test.ts +0 -112
- package/test/unit/data-structures/stack/stack.test.ts +0 -438
- package/test/unit/data-structures/tree/tree.more-branches.coverage.test.ts +0 -9
- package/test/unit/data-structures/tree/tree.test.ts +0 -58
- package/test/unit/data-structures/trie/trie.more-branches-2.coverage.test.ts +0 -51
- package/test/unit/data-structures/trie/trie.test.ts +0 -1181
- package/test/unit/unrestricted-interconversion.test.ts +0 -299
- package/test/unit/utils/utils.test.ts +0 -174
- package/test/utils/array.ts +0 -5517
- package/test/utils/big-o.ts +0 -228
- package/test/utils/console.ts +0 -31
- package/test/utils/index.ts +0 -8
- package/test/utils/is.ts +0 -56
- package/test/utils/json2html.ts +0 -164
- package/test/utils/number.ts +0 -13
- package/test/utils/patch.ts +0 -33
- package/test/utils/perf.mjs +0 -34
- package/test/utils/performanc.ts +0 -7
- package/test/utils/string.ts +0 -49
- package/tsconfig.types.json +0 -15
- package/tsup.config.js +0 -63
- package/tsup.umd.config.js +0 -29
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
// Copyright 2021 Google Inc. All rights reserved.
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
|
|
15
|
-
#include "perf_counters.h"
|
|
16
|
-
|
|
17
|
-
#include <cstring>
|
|
18
|
-
#include <memory>
|
|
19
|
-
#include <vector>
|
|
20
|
-
|
|
21
|
-
#if defined HAVE_LIBPFM
|
|
22
|
-
#include "perfmon/pfmlib.h"
|
|
23
|
-
#include "perfmon/pfmlib_perf_event.h"
|
|
24
|
-
#endif
|
|
25
|
-
|
|
26
|
-
namespace benchmark {
|
|
27
|
-
namespace internal {
|
|
28
|
-
|
|
29
|
-
constexpr size_t PerfCounterValues::kMaxCounters;
|
|
30
|
-
|
|
31
|
-
#if defined HAVE_LIBPFM
|
|
32
|
-
|
|
33
|
-
size_t PerfCounterValues::Read(const std::vector<int>& leaders) {
|
|
34
|
-
// Create a pointer for multiple reads
|
|
35
|
-
const size_t bufsize = values_.size() * sizeof(values_[0]);
|
|
36
|
-
char* ptr = reinterpret_cast<char*>(values_.data());
|
|
37
|
-
size_t size = bufsize;
|
|
38
|
-
for (int lead : leaders) {
|
|
39
|
-
auto read_bytes = ::read(lead, ptr, size);
|
|
40
|
-
if (read_bytes >= ssize_t(sizeof(uint64_t))) {
|
|
41
|
-
// Actual data bytes are all bytes minus initial padding
|
|
42
|
-
std::size_t data_bytes = read_bytes - sizeof(uint64_t);
|
|
43
|
-
// This should be very cheap since it's in hot cache
|
|
44
|
-
std::memmove(ptr, ptr + sizeof(uint64_t), data_bytes);
|
|
45
|
-
// Increment our counters
|
|
46
|
-
ptr += data_bytes;
|
|
47
|
-
size -= data_bytes;
|
|
48
|
-
} else {
|
|
49
|
-
int err = errno;
|
|
50
|
-
GetErrorLogInstance() << "Error reading lead " << lead << " errno:" << err
|
|
51
|
-
<< " " << ::strerror(err) << "\n";
|
|
52
|
-
return 0;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return (bufsize - size) / sizeof(uint64_t);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const bool PerfCounters::kSupported = true;
|
|
59
|
-
|
|
60
|
-
// Initializes libpfm only on the first call. Returns whether that single
|
|
61
|
-
// initialization was successful.
|
|
62
|
-
bool PerfCounters::Initialize() {
|
|
63
|
-
// Function-scope static gets initialized only once on first call.
|
|
64
|
-
static const bool success = []() {
|
|
65
|
-
return pfm_initialize() == PFM_SUCCESS;
|
|
66
|
-
}();
|
|
67
|
-
return success;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
bool PerfCounters::IsCounterSupported(const std::string& name) {
|
|
71
|
-
Initialize();
|
|
72
|
-
perf_event_attr_t attr;
|
|
73
|
-
std::memset(&attr, 0, sizeof(attr));
|
|
74
|
-
pfm_perf_encode_arg_t arg;
|
|
75
|
-
std::memset(&arg, 0, sizeof(arg));
|
|
76
|
-
arg.attr = &attr;
|
|
77
|
-
const int mode = PFM_PLM3; // user mode only
|
|
78
|
-
int ret = pfm_get_os_event_encoding(name.c_str(), mode, PFM_OS_PERF_EVENT_EXT,
|
|
79
|
-
&arg);
|
|
80
|
-
return (ret == PFM_SUCCESS);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
PerfCounters PerfCounters::Create(
|
|
84
|
-
const std::vector<std::string>& counter_names) {
|
|
85
|
-
if (!counter_names.empty()) {
|
|
86
|
-
Initialize();
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Valid counters will populate these arrays but we start empty
|
|
90
|
-
std::vector<std::string> valid_names;
|
|
91
|
-
std::vector<int> counter_ids;
|
|
92
|
-
std::vector<int> leader_ids;
|
|
93
|
-
|
|
94
|
-
// Resize to the maximum possible
|
|
95
|
-
valid_names.reserve(counter_names.size());
|
|
96
|
-
counter_ids.reserve(counter_names.size());
|
|
97
|
-
|
|
98
|
-
const int kCounterMode = PFM_PLM3; // user mode only
|
|
99
|
-
|
|
100
|
-
// Group leads will be assigned on demand. The idea is that once we cannot
|
|
101
|
-
// create a counter descriptor, the reason is that this group has maxed out
|
|
102
|
-
// so we set the group_id again to -1 and retry - giving the algorithm a
|
|
103
|
-
// chance to create a new group leader to hold the next set of counters.
|
|
104
|
-
int group_id = -1;
|
|
105
|
-
|
|
106
|
-
// Loop through all performance counters
|
|
107
|
-
for (size_t i = 0; i < counter_names.size(); ++i) {
|
|
108
|
-
// we are about to push into the valid names vector
|
|
109
|
-
// check if we did not reach the maximum
|
|
110
|
-
if (valid_names.size() == PerfCounterValues::kMaxCounters) {
|
|
111
|
-
// Log a message if we maxed out and stop adding
|
|
112
|
-
GetErrorLogInstance()
|
|
113
|
-
<< counter_names.size() << " counters were requested. The maximum is "
|
|
114
|
-
<< PerfCounterValues::kMaxCounters << " and " << valid_names.size()
|
|
115
|
-
<< " were already added. All remaining counters will be ignored\n";
|
|
116
|
-
// stop the loop and return what we have already
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// Check if this name is empty
|
|
121
|
-
const auto& name = counter_names[i];
|
|
122
|
-
if (name.empty()) {
|
|
123
|
-
GetErrorLogInstance()
|
|
124
|
-
<< "A performance counter name was the empty string\n";
|
|
125
|
-
continue;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Here first means first in group, ie the group leader
|
|
129
|
-
const bool is_first = (group_id < 0);
|
|
130
|
-
|
|
131
|
-
// This struct will be populated by libpfm from the counter string
|
|
132
|
-
// and then fed into the syscall perf_event_open
|
|
133
|
-
struct perf_event_attr attr {};
|
|
134
|
-
attr.size = sizeof(attr);
|
|
135
|
-
|
|
136
|
-
// This is the input struct to libpfm.
|
|
137
|
-
pfm_perf_encode_arg_t arg{};
|
|
138
|
-
arg.attr = &attr;
|
|
139
|
-
const int pfm_get = pfm_get_os_event_encoding(name.c_str(), kCounterMode,
|
|
140
|
-
PFM_OS_PERF_EVENT, &arg);
|
|
141
|
-
if (pfm_get != PFM_SUCCESS) {
|
|
142
|
-
GetErrorLogInstance()
|
|
143
|
-
<< "Unknown performance counter name: " << name << "\n";
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// We then proceed to populate the remaining fields in our attribute struct
|
|
148
|
-
// Note: the man page for perf_event_create suggests inherit = true and
|
|
149
|
-
// read_format = PERF_FORMAT_GROUP don't work together, but that's not the
|
|
150
|
-
// case.
|
|
151
|
-
attr.disabled = is_first;
|
|
152
|
-
attr.inherit = true;
|
|
153
|
-
attr.pinned = is_first;
|
|
154
|
-
attr.exclude_kernel = true;
|
|
155
|
-
attr.exclude_user = false;
|
|
156
|
-
attr.exclude_hv = true;
|
|
157
|
-
|
|
158
|
-
// Read all counters in a group in one read.
|
|
159
|
-
attr.read_format = PERF_FORMAT_GROUP;
|
|
160
|
-
|
|
161
|
-
int id = -1;
|
|
162
|
-
while (id < 0) {
|
|
163
|
-
static constexpr size_t kNrOfSyscallRetries = 5;
|
|
164
|
-
// Retry syscall as it was interrupted often (b/64774091).
|
|
165
|
-
for (size_t num_retries = 0; num_retries < kNrOfSyscallRetries;
|
|
166
|
-
++num_retries) {
|
|
167
|
-
id = perf_event_open(&attr, 0, -1, group_id, 0);
|
|
168
|
-
if (id >= 0 || errno != EINTR) {
|
|
169
|
-
break;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
if (id < 0) {
|
|
173
|
-
// If the file descriptor is negative we might have reached a limit
|
|
174
|
-
// in the current group. Set the group_id to -1 and retry
|
|
175
|
-
if (group_id >= 0) {
|
|
176
|
-
// Create a new group
|
|
177
|
-
group_id = -1;
|
|
178
|
-
} else {
|
|
179
|
-
// At this point we have already retried to set a new group id and
|
|
180
|
-
// failed. We then give up.
|
|
181
|
-
break;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// We failed to get a new file descriptor. We might have reached a hard
|
|
187
|
-
// hardware limit that cannot be resolved even with group multiplexing
|
|
188
|
-
if (id < 0) {
|
|
189
|
-
GetErrorLogInstance() << "***WARNING** Failed to get a file descriptor "
|
|
190
|
-
"for performance counter "
|
|
191
|
-
<< name << ". Ignoring\n";
|
|
192
|
-
|
|
193
|
-
// We give up on this counter but try to keep going
|
|
194
|
-
// as the others would be fine
|
|
195
|
-
continue;
|
|
196
|
-
}
|
|
197
|
-
if (group_id < 0) {
|
|
198
|
-
// This is a leader, store and assign it to the current file descriptor
|
|
199
|
-
leader_ids.push_back(id);
|
|
200
|
-
group_id = id;
|
|
201
|
-
}
|
|
202
|
-
// This is a valid counter, add it to our descriptor's list
|
|
203
|
-
counter_ids.push_back(id);
|
|
204
|
-
valid_names.push_back(name);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Loop through all group leaders activating them
|
|
208
|
-
// There is another option of starting ALL counters in a process but
|
|
209
|
-
// that would be far reaching an intrusion. If the user is using PMCs
|
|
210
|
-
// by themselves then this would have a side effect on them. It is
|
|
211
|
-
// friendlier to loop through all groups individually.
|
|
212
|
-
for (int lead : leader_ids) {
|
|
213
|
-
if (ioctl(lead, PERF_EVENT_IOC_ENABLE) != 0) {
|
|
214
|
-
// This should never happen but if it does, we give up on the
|
|
215
|
-
// entire batch as recovery would be a mess.
|
|
216
|
-
GetErrorLogInstance() << "***WARNING*** Failed to start counters. "
|
|
217
|
-
"Claring out all counters.\n";
|
|
218
|
-
|
|
219
|
-
// Close all peformance counters
|
|
220
|
-
for (int id : counter_ids) {
|
|
221
|
-
::close(id);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// Return an empty object so our internal state is still good and
|
|
225
|
-
// the process can continue normally without impact
|
|
226
|
-
return NoCounters();
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
return PerfCounters(std::move(valid_names), std::move(counter_ids),
|
|
231
|
-
std::move(leader_ids));
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
void PerfCounters::CloseCounters() const {
|
|
235
|
-
if (counter_ids_.empty()) {
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
for (int lead : leader_ids_) {
|
|
239
|
-
ioctl(lead, PERF_EVENT_IOC_DISABLE);
|
|
240
|
-
}
|
|
241
|
-
for (int fd : counter_ids_) {
|
|
242
|
-
close(fd);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
#else // defined HAVE_LIBPFM
|
|
246
|
-
size_t PerfCounterValues::Read(const std::vector<int>&) { return 0; }
|
|
247
|
-
|
|
248
|
-
const bool PerfCounters::kSupported = false;
|
|
249
|
-
|
|
250
|
-
bool PerfCounters::Initialize() { return false; }
|
|
251
|
-
|
|
252
|
-
bool PerfCounters::IsCounterSupported(const std::string&) { return false; }
|
|
253
|
-
|
|
254
|
-
PerfCounters PerfCounters::Create(
|
|
255
|
-
const std::vector<std::string>& counter_names) {
|
|
256
|
-
if (!counter_names.empty()) {
|
|
257
|
-
GetErrorLogInstance() << "Performance counters not supported.";
|
|
258
|
-
}
|
|
259
|
-
return NoCounters();
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
void PerfCounters::CloseCounters() const {}
|
|
263
|
-
#endif // defined HAVE_LIBPFM
|
|
264
|
-
|
|
265
|
-
PerfCountersMeasurement::PerfCountersMeasurement(
|
|
266
|
-
const std::vector<std::string>& counter_names)
|
|
267
|
-
: start_values_(counter_names.size()), end_values_(counter_names.size()) {
|
|
268
|
-
counters_ = PerfCounters::Create(counter_names);
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
PerfCounters& PerfCounters::operator=(PerfCounters&& other) noexcept {
|
|
272
|
-
if (this != &other) {
|
|
273
|
-
CloseCounters();
|
|
274
|
-
|
|
275
|
-
counter_ids_ = std::move(other.counter_ids_);
|
|
276
|
-
leader_ids_ = std::move(other.leader_ids_);
|
|
277
|
-
counter_names_ = std::move(other.counter_names_);
|
|
278
|
-
}
|
|
279
|
-
return *this;
|
|
280
|
-
}
|
|
281
|
-
} // namespace internal
|
|
282
|
-
} // namespace benchmark
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
// Copyright 2021 Google Inc. All rights reserved.
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
|
|
15
|
-
#ifndef BENCHMARK_PERF_COUNTERS_H
|
|
16
|
-
#define BENCHMARK_PERF_COUNTERS_H
|
|
17
|
-
|
|
18
|
-
#include <array>
|
|
19
|
-
#include <cstdint>
|
|
20
|
-
#include <cstring>
|
|
21
|
-
#include <memory>
|
|
22
|
-
#include <vector>
|
|
23
|
-
|
|
24
|
-
#include "benchmark/benchmark.h"
|
|
25
|
-
#include "check.h"
|
|
26
|
-
#include "log.h"
|
|
27
|
-
#include "mutex.h"
|
|
28
|
-
|
|
29
|
-
#ifndef BENCHMARK_OS_WINDOWS
|
|
30
|
-
#include <unistd.h>
|
|
31
|
-
#endif
|
|
32
|
-
|
|
33
|
-
#if defined(_MSC_VER)
|
|
34
|
-
#pragma warning(push)
|
|
35
|
-
// C4251: <symbol> needs to have dll-interface to be used by clients of class
|
|
36
|
-
#pragma warning(disable : 4251)
|
|
37
|
-
#endif
|
|
38
|
-
|
|
39
|
-
namespace benchmark {
|
|
40
|
-
namespace internal {
|
|
41
|
-
|
|
42
|
-
// Typically, we can only read a small number of counters. There is also a
|
|
43
|
-
// padding preceding counter values, when reading multiple counters with one
|
|
44
|
-
// syscall (which is desirable). PerfCounterValues abstracts these details.
|
|
45
|
-
// The implementation ensures the storage is inlined, and allows 0-based
|
|
46
|
-
// indexing into the counter values.
|
|
47
|
-
// The object is used in conjunction with a PerfCounters object, by passing it
|
|
48
|
-
// to Snapshot(). The Read() method relocates individual reads, discarding
|
|
49
|
-
// the initial padding from each group leader in the values buffer such that
|
|
50
|
-
// all user accesses through the [] operator are correct.
|
|
51
|
-
class BENCHMARK_EXPORT PerfCounterValues {
|
|
52
|
-
public:
|
|
53
|
-
explicit PerfCounterValues(size_t nr_counters) : nr_counters_(nr_counters) {
|
|
54
|
-
BM_CHECK_LE(nr_counters_, kMaxCounters);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// We are reading correctly now so the values don't need to skip padding
|
|
58
|
-
uint64_t operator[](size_t pos) const { return values_[pos]; }
|
|
59
|
-
|
|
60
|
-
// Increased the maximum to 32 only since the buffer
|
|
61
|
-
// is std::array<> backed
|
|
62
|
-
static constexpr size_t kMaxCounters = 32;
|
|
63
|
-
|
|
64
|
-
private:
|
|
65
|
-
friend class PerfCounters;
|
|
66
|
-
// Get the byte buffer in which perf counters can be captured.
|
|
67
|
-
// This is used by PerfCounters::Read
|
|
68
|
-
std::pair<char*, size_t> get_data_buffer() {
|
|
69
|
-
return {reinterpret_cast<char*>(values_.data()),
|
|
70
|
-
sizeof(uint64_t) * (kPadding + nr_counters_)};
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// This reading is complex and as the goal of this class is to
|
|
74
|
-
// abstract away the intrincacies of the reading process, this is
|
|
75
|
-
// a better place for it
|
|
76
|
-
size_t Read(const std::vector<int>& leaders);
|
|
77
|
-
|
|
78
|
-
// Move the padding to 2 due to the reading algorithm (1st padding plus a
|
|
79
|
-
// current read padding)
|
|
80
|
-
static constexpr size_t kPadding = 2;
|
|
81
|
-
std::array<uint64_t, kPadding + kMaxCounters> values_;
|
|
82
|
-
const size_t nr_counters_;
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
// Collect PMU counters. The object, once constructed, is ready to be used by
|
|
86
|
-
// calling read(). PMU counter collection is enabled from the time create() is
|
|
87
|
-
// called, to obtain the object, until the object's destructor is called.
|
|
88
|
-
class BENCHMARK_EXPORT PerfCounters final {
|
|
89
|
-
public:
|
|
90
|
-
// True iff this platform supports performance counters.
|
|
91
|
-
static const bool kSupported;
|
|
92
|
-
|
|
93
|
-
// Returns an empty object
|
|
94
|
-
static PerfCounters NoCounters() { return PerfCounters(); }
|
|
95
|
-
|
|
96
|
-
~PerfCounters() { CloseCounters(); }
|
|
97
|
-
PerfCounters() = default;
|
|
98
|
-
PerfCounters(PerfCounters&&) = default;
|
|
99
|
-
PerfCounters(const PerfCounters&) = delete;
|
|
100
|
-
PerfCounters& operator=(PerfCounters&&) noexcept;
|
|
101
|
-
PerfCounters& operator=(const PerfCounters&) = delete;
|
|
102
|
-
|
|
103
|
-
// Platform-specific implementations may choose to do some library
|
|
104
|
-
// initialization here.
|
|
105
|
-
static bool Initialize();
|
|
106
|
-
|
|
107
|
-
// Check if the given counter is supported, if the app wants to
|
|
108
|
-
// check before passing
|
|
109
|
-
static bool IsCounterSupported(const std::string& name);
|
|
110
|
-
|
|
111
|
-
// Return a PerfCounters object ready to read the counters with the names
|
|
112
|
-
// specified. The values are user-mode only. The counter name format is
|
|
113
|
-
// implementation and OS specific.
|
|
114
|
-
// In case of failure, this method will in the worst case return an
|
|
115
|
-
// empty object whose state will still be valid.
|
|
116
|
-
static PerfCounters Create(const std::vector<std::string>& counter_names);
|
|
117
|
-
|
|
118
|
-
// Take a snapshot of the current value of the counters into the provided
|
|
119
|
-
// valid PerfCounterValues storage. The values are populated such that:
|
|
120
|
-
// names()[i]'s value is (*values)[i]
|
|
121
|
-
BENCHMARK_ALWAYS_INLINE bool Snapshot(PerfCounterValues* values) const {
|
|
122
|
-
#ifndef BENCHMARK_OS_WINDOWS
|
|
123
|
-
assert(values != nullptr);
|
|
124
|
-
return values->Read(leader_ids_) == counter_ids_.size();
|
|
125
|
-
#else
|
|
126
|
-
(void)values;
|
|
127
|
-
return false;
|
|
128
|
-
#endif
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
const std::vector<std::string>& names() const { return counter_names_; }
|
|
132
|
-
size_t num_counters() const { return counter_names_.size(); }
|
|
133
|
-
|
|
134
|
-
private:
|
|
135
|
-
PerfCounters(const std::vector<std::string>& counter_names,
|
|
136
|
-
std::vector<int>&& counter_ids, std::vector<int>&& leader_ids)
|
|
137
|
-
: counter_ids_(std::move(counter_ids)),
|
|
138
|
-
leader_ids_(std::move(leader_ids)),
|
|
139
|
-
counter_names_(counter_names) {}
|
|
140
|
-
|
|
141
|
-
void CloseCounters() const;
|
|
142
|
-
|
|
143
|
-
std::vector<int> counter_ids_;
|
|
144
|
-
std::vector<int> leader_ids_;
|
|
145
|
-
std::vector<std::string> counter_names_;
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
// Typical usage of the above primitives.
|
|
149
|
-
class BENCHMARK_EXPORT PerfCountersMeasurement final {
|
|
150
|
-
public:
|
|
151
|
-
PerfCountersMeasurement(const std::vector<std::string>& counter_names);
|
|
152
|
-
|
|
153
|
-
size_t num_counters() const { return counters_.num_counters(); }
|
|
154
|
-
|
|
155
|
-
std::vector<std::string> names() const { return counters_.names(); }
|
|
156
|
-
|
|
157
|
-
BENCHMARK_ALWAYS_INLINE bool Start() {
|
|
158
|
-
if (num_counters() == 0) return true;
|
|
159
|
-
// Tell the compiler to not move instructions above/below where we take
|
|
160
|
-
// the snapshot.
|
|
161
|
-
ClobberMemory();
|
|
162
|
-
valid_read_ &= counters_.Snapshot(&start_values_);
|
|
163
|
-
ClobberMemory();
|
|
164
|
-
|
|
165
|
-
return valid_read_;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
BENCHMARK_ALWAYS_INLINE bool Stop(
|
|
169
|
-
std::vector<std::pair<std::string, double>>& measurements) {
|
|
170
|
-
if (num_counters() == 0) return true;
|
|
171
|
-
// Tell the compiler to not move instructions above/below where we take
|
|
172
|
-
// the snapshot.
|
|
173
|
-
ClobberMemory();
|
|
174
|
-
valid_read_ &= counters_.Snapshot(&end_values_);
|
|
175
|
-
ClobberMemory();
|
|
176
|
-
|
|
177
|
-
for (size_t i = 0; i < counters_.names().size(); ++i) {
|
|
178
|
-
double measurement = static_cast<double>(end_values_[i]) -
|
|
179
|
-
static_cast<double>(start_values_[i]);
|
|
180
|
-
measurements.push_back({counters_.names()[i], measurement});
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
return valid_read_;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
private:
|
|
187
|
-
PerfCounters counters_;
|
|
188
|
-
bool valid_read_ = true;
|
|
189
|
-
PerfCounterValues start_values_;
|
|
190
|
-
PerfCounterValues end_values_;
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
} // namespace internal
|
|
194
|
-
} // namespace benchmark
|
|
195
|
-
|
|
196
|
-
#if defined(_MSC_VER)
|
|
197
|
-
#pragma warning(pop)
|
|
198
|
-
#endif
|
|
199
|
-
|
|
200
|
-
#endif // BENCHMARK_PERF_COUNTERS_H
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
// Copyright 2015 Google Inc. All rights reserved.
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
|
|
15
|
-
#ifndef BENCHMARK_RE_H_
|
|
16
|
-
#define BENCHMARK_RE_H_
|
|
17
|
-
|
|
18
|
-
#include "internal_macros.h"
|
|
19
|
-
|
|
20
|
-
// clang-format off
|
|
21
|
-
|
|
22
|
-
#if !defined(HAVE_STD_REGEX) && \
|
|
23
|
-
!defined(HAVE_GNU_POSIX_REGEX) && \
|
|
24
|
-
!defined(HAVE_POSIX_REGEX)
|
|
25
|
-
// No explicit regex selection; detect based on builtin hints.
|
|
26
|
-
#if defined(BENCHMARK_OS_LINUX) || defined(BENCHMARK_OS_APPLE)
|
|
27
|
-
#define HAVE_POSIX_REGEX 1
|
|
28
|
-
#elif __cplusplus >= 199711L
|
|
29
|
-
#define HAVE_STD_REGEX 1
|
|
30
|
-
#endif
|
|
31
|
-
#endif
|
|
32
|
-
|
|
33
|
-
// Prefer C regex libraries when compiling w/o exceptions so that we can
|
|
34
|
-
// correctly report errors.
|
|
35
|
-
#if defined(BENCHMARK_HAS_NO_EXCEPTIONS) && \
|
|
36
|
-
defined(HAVE_STD_REGEX) && \
|
|
37
|
-
(defined(HAVE_GNU_POSIX_REGEX) || defined(HAVE_POSIX_REGEX))
|
|
38
|
-
#undef HAVE_STD_REGEX
|
|
39
|
-
#endif
|
|
40
|
-
|
|
41
|
-
#if defined(HAVE_STD_REGEX)
|
|
42
|
-
#include <regex>
|
|
43
|
-
#elif defined(HAVE_GNU_POSIX_REGEX)
|
|
44
|
-
#include <gnuregex.h>
|
|
45
|
-
#elif defined(HAVE_POSIX_REGEX)
|
|
46
|
-
#include <regex.h>
|
|
47
|
-
#else
|
|
48
|
-
#error No regular expression backend was found!
|
|
49
|
-
#endif
|
|
50
|
-
|
|
51
|
-
// clang-format on
|
|
52
|
-
|
|
53
|
-
#include <string>
|
|
54
|
-
|
|
55
|
-
#include "check.h"
|
|
56
|
-
|
|
57
|
-
namespace benchmark {
|
|
58
|
-
|
|
59
|
-
// A wrapper around the POSIX regular expression API that provides automatic
|
|
60
|
-
// cleanup
|
|
61
|
-
class Regex {
|
|
62
|
-
public:
|
|
63
|
-
Regex() : init_(false) {}
|
|
64
|
-
|
|
65
|
-
~Regex();
|
|
66
|
-
|
|
67
|
-
// Compile a regular expression matcher from spec. Returns true on success.
|
|
68
|
-
//
|
|
69
|
-
// On failure (and if error is not nullptr), error is populated with a human
|
|
70
|
-
// readable error message if an error occurs.
|
|
71
|
-
bool Init(const std::string& spec, std::string* error);
|
|
72
|
-
|
|
73
|
-
// Returns whether str matches the compiled regular expression.
|
|
74
|
-
bool Match(const std::string& str);
|
|
75
|
-
|
|
76
|
-
private:
|
|
77
|
-
bool init_;
|
|
78
|
-
// Underlying regular expression object
|
|
79
|
-
#if defined(HAVE_STD_REGEX)
|
|
80
|
-
std::regex re_;
|
|
81
|
-
#elif defined(HAVE_POSIX_REGEX) || defined(HAVE_GNU_POSIX_REGEX)
|
|
82
|
-
regex_t re_;
|
|
83
|
-
#else
|
|
84
|
-
#error No regular expression backend implementation available
|
|
85
|
-
#endif
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
#if defined(HAVE_STD_REGEX)
|
|
89
|
-
|
|
90
|
-
inline bool Regex::Init(const std::string& spec, std::string* error) {
|
|
91
|
-
#ifdef BENCHMARK_HAS_NO_EXCEPTIONS
|
|
92
|
-
((void)error); // suppress unused warning
|
|
93
|
-
#else
|
|
94
|
-
try {
|
|
95
|
-
#endif
|
|
96
|
-
re_ = std::regex(spec, std::regex_constants::extended);
|
|
97
|
-
init_ = true;
|
|
98
|
-
#ifndef BENCHMARK_HAS_NO_EXCEPTIONS
|
|
99
|
-
}
|
|
100
|
-
catch (const std::regex_error& e) {
|
|
101
|
-
if (error) {
|
|
102
|
-
*error = e.what();
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
#endif
|
|
106
|
-
return init_;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
inline Regex::~Regex() {}
|
|
110
|
-
|
|
111
|
-
inline bool Regex::Match(const std::string& str) {
|
|
112
|
-
if (!init_) {
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
115
|
-
return std::regex_search(str, re_);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
#else
|
|
119
|
-
inline bool Regex::Init(const std::string& spec, std::string* error) {
|
|
120
|
-
int ec = regcomp(&re_, spec.c_str(), REG_EXTENDED | REG_NOSUB);
|
|
121
|
-
if (ec != 0) {
|
|
122
|
-
if (error) {
|
|
123
|
-
size_t needed = regerror(ec, &re_, nullptr, 0);
|
|
124
|
-
char* errbuf = new char[needed];
|
|
125
|
-
regerror(ec, &re_, errbuf, needed);
|
|
126
|
-
|
|
127
|
-
// regerror returns the number of bytes necessary to null terminate
|
|
128
|
-
// the string, so we move that when assigning to error.
|
|
129
|
-
BM_CHECK_NE(needed, 0);
|
|
130
|
-
error->assign(errbuf, needed - 1);
|
|
131
|
-
|
|
132
|
-
delete[] errbuf;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
init_ = true;
|
|
139
|
-
return true;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
inline Regex::~Regex() {
|
|
143
|
-
if (init_) {
|
|
144
|
-
regfree(&re_);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
inline bool Regex::Match(const std::string& str) {
|
|
149
|
-
if (!init_) {
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
return regexec(&re_, str.c_str(), 0, nullptr, 0) == 0;
|
|
153
|
-
}
|
|
154
|
-
#endif
|
|
155
|
-
|
|
156
|
-
} // end namespace benchmark
|
|
157
|
-
|
|
158
|
-
#endif // BENCHMARK_RE_H_
|