@ladybugmem/icebug 0.1.0
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/README.md +14 -0
- package/binding.gyp +54 -0
- package/build/Release/.deps/Release/icebug.node.d +1 -0
- package/build/Release/.deps/Release/obj.target/icebug/src/addon.o.d +291 -0
- package/build/Release/icebug.node +0 -0
- package/build/Release/obj.target/icebug/src/addon.o +0 -0
- package/lib/index.d.ts +361 -0
- package/lib/index.js +102 -0
- package/package.json +42 -0
- package/src/addon.cpp +1253 -0
- package/vendor/include/networkit/GlobalState.hpp +86 -0
- package/vendor/include/networkit/Globals.hpp +41 -0
- package/vendor/include/networkit/algebraic/AlgebraicGlobals.hpp +27 -0
- package/vendor/include/networkit/algebraic/CSRGeneralMatrix.hpp +1292 -0
- package/vendor/include/networkit/algebraic/CSRMatrix.hpp +11 -0
- package/vendor/include/networkit/algebraic/DenseMatrix.hpp +537 -0
- package/vendor/include/networkit/algebraic/DynamicMatrix.hpp +514 -0
- package/vendor/include/networkit/algebraic/GraphBLAS.hpp +323 -0
- package/vendor/include/networkit/algebraic/MatrixTools.hpp +156 -0
- package/vendor/include/networkit/algebraic/Semirings.hpp +171 -0
- package/vendor/include/networkit/algebraic/SparseAccumulator.hpp +111 -0
- package/vendor/include/networkit/algebraic/Vector.hpp +371 -0
- package/vendor/include/networkit/algebraic/algorithms/AlgebraicBFS.hpp +72 -0
- package/vendor/include/networkit/algebraic/algorithms/AlgebraicBellmanFord.hpp +88 -0
- package/vendor/include/networkit/algebraic/algorithms/AlgebraicMatchingCoarsening.hpp +96 -0
- package/vendor/include/networkit/algebraic/algorithms/AlgebraicPageRank.hpp +145 -0
- package/vendor/include/networkit/algebraic/algorithms/AlgebraicSpanningEdgeCentrality.hpp +122 -0
- package/vendor/include/networkit/algebraic/algorithms/AlgebraicTriangleCounting.hpp +76 -0
- package/vendor/include/networkit/auxiliary/AlignedAllocator.hpp +113 -0
- package/vendor/include/networkit/auxiliary/ArrayTools.hpp +85 -0
- package/vendor/include/networkit/auxiliary/BloomFilter.hpp +70 -0
- package/vendor/include/networkit/auxiliary/BucketPQ.hpp +142 -0
- package/vendor/include/networkit/auxiliary/Enforce.hpp +117 -0
- package/vendor/include/networkit/auxiliary/FunctionTraits.hpp +74 -0
- package/vendor/include/networkit/auxiliary/HashUtils.hpp +28 -0
- package/vendor/include/networkit/auxiliary/IncrementalUniformRandomSelector.hpp +52 -0
- package/vendor/include/networkit/auxiliary/Log.hpp +119 -0
- package/vendor/include/networkit/auxiliary/MissingMath.hpp +48 -0
- package/vendor/include/networkit/auxiliary/Multiprecision.hpp +17 -0
- package/vendor/include/networkit/auxiliary/NumberParsing.hpp +307 -0
- package/vendor/include/networkit/auxiliary/NumericTools.hpp +57 -0
- package/vendor/include/networkit/auxiliary/Parallel.hpp +56 -0
- package/vendor/include/networkit/auxiliary/Parallelism.hpp +33 -0
- package/vendor/include/networkit/auxiliary/PrioQueue.hpp +252 -0
- package/vendor/include/networkit/auxiliary/Random.hpp +122 -0
- package/vendor/include/networkit/auxiliary/SetIntersector.hpp +72 -0
- package/vendor/include/networkit/auxiliary/SignalHandling.hpp +39 -0
- package/vendor/include/networkit/auxiliary/SortedList.hpp +128 -0
- package/vendor/include/networkit/auxiliary/SparseVector.hpp +215 -0
- package/vendor/include/networkit/auxiliary/SpinLock.hpp +23 -0
- package/vendor/include/networkit/auxiliary/StringBuilder.hpp +322 -0
- package/vendor/include/networkit/auxiliary/StringTools.hpp +76 -0
- package/vendor/include/networkit/auxiliary/TemplateUtils.hpp +76 -0
- package/vendor/include/networkit/auxiliary/Timer.hpp +145 -0
- package/vendor/include/networkit/auxiliary/VectorComparator.hpp +32 -0
- package/vendor/include/networkit/base/Algorithm.hpp +41 -0
- package/vendor/include/networkit/base/DynAlgorithm.hpp +31 -0
- package/vendor/include/networkit/centrality/ApproxBetweenness.hpp +62 -0
- package/vendor/include/networkit/centrality/ApproxCloseness.hpp +136 -0
- package/vendor/include/networkit/centrality/ApproxElectricalCloseness.hpp +156 -0
- package/vendor/include/networkit/centrality/ApproxGroupBetweenness.hpp +124 -0
- package/vendor/include/networkit/centrality/ApproxSpanningEdge.hpp +84 -0
- package/vendor/include/networkit/centrality/Betweenness.hpp +47 -0
- package/vendor/include/networkit/centrality/Centrality.hpp +98 -0
- package/vendor/include/networkit/centrality/Closeness.hpp +107 -0
- package/vendor/include/networkit/centrality/ComplexPaths.hpp +113 -0
- package/vendor/include/networkit/centrality/CoreDecomposition.hpp +161 -0
- package/vendor/include/networkit/centrality/DegreeCentrality.hpp +55 -0
- package/vendor/include/networkit/centrality/DynApproxBetweenness.hpp +95 -0
- package/vendor/include/networkit/centrality/DynBetweenness.hpp +99 -0
- package/vendor/include/networkit/centrality/DynBetweennessOneNode.hpp +98 -0
- package/vendor/include/networkit/centrality/DynKatzCentrality.hpp +115 -0
- package/vendor/include/networkit/centrality/DynTopHarmonicCloseness.hpp +223 -0
- package/vendor/include/networkit/centrality/EigenvectorCentrality.hpp +41 -0
- package/vendor/include/networkit/centrality/EstimateBetweenness.hpp +51 -0
- package/vendor/include/networkit/centrality/ForestCentrality.hpp +112 -0
- package/vendor/include/networkit/centrality/GedWalk.hpp +225 -0
- package/vendor/include/networkit/centrality/GroupCloseness.hpp +115 -0
- package/vendor/include/networkit/centrality/GroupClosenessGrowShrink.hpp +78 -0
- package/vendor/include/networkit/centrality/GroupClosenessLocalSearch.hpp +77 -0
- package/vendor/include/networkit/centrality/GroupClosenessLocalSwaps.hpp +106 -0
- package/vendor/include/networkit/centrality/GroupDegree.hpp +155 -0
- package/vendor/include/networkit/centrality/GroupHarmonicCloseness.hpp +83 -0
- package/vendor/include/networkit/centrality/HarmonicCloseness.hpp +48 -0
- package/vendor/include/networkit/centrality/KPathCentrality.hpp +52 -0
- package/vendor/include/networkit/centrality/KadabraBetweenness.hpp +242 -0
- package/vendor/include/networkit/centrality/KatzCentrality.hpp +62 -0
- package/vendor/include/networkit/centrality/LaplacianCentrality.hpp +44 -0
- package/vendor/include/networkit/centrality/LocalClusteringCoefficient.hpp +60 -0
- package/vendor/include/networkit/centrality/LocalPartitionCoverage.hpp +43 -0
- package/vendor/include/networkit/centrality/LocalSquareClusteringCoefficient.hpp +42 -0
- package/vendor/include/networkit/centrality/PageRank.hpp +101 -0
- package/vendor/include/networkit/centrality/PermanenceCentrality.hpp +48 -0
- package/vendor/include/networkit/centrality/Sfigality.hpp +45 -0
- package/vendor/include/networkit/centrality/SpanningEdgeCentrality.hpp +86 -0
- package/vendor/include/networkit/centrality/TopCloseness.hpp +136 -0
- package/vendor/include/networkit/centrality/TopHarmonicCloseness.hpp +151 -0
- package/vendor/include/networkit/clique/MaximalCliques.hpp +83 -0
- package/vendor/include/networkit/coarsening/ClusteringProjector.hpp +59 -0
- package/vendor/include/networkit/coarsening/CoarsenedGraphView.hpp +156 -0
- package/vendor/include/networkit/coarsening/GraphCoarsening.hpp +57 -0
- package/vendor/include/networkit/coarsening/MatchingCoarsening.hpp +43 -0
- package/vendor/include/networkit/coarsening/ParallelPartitionCoarsening.hpp +33 -0
- package/vendor/include/networkit/coarsening/ParallelPartitionCoarseningView.hpp +62 -0
- package/vendor/include/networkit/community/AdjustedRandMeasure.hpp +31 -0
- package/vendor/include/networkit/community/ClusteringGenerator.hpp +75 -0
- package/vendor/include/networkit/community/CommunityDetectionAlgorithm.hpp +58 -0
- package/vendor/include/networkit/community/Conductance.hpp +32 -0
- package/vendor/include/networkit/community/CoverF1Similarity.hpp +53 -0
- package/vendor/include/networkit/community/CoverHubDominance.hpp +38 -0
- package/vendor/include/networkit/community/Coverage.hpp +25 -0
- package/vendor/include/networkit/community/CutClustering.hpp +62 -0
- package/vendor/include/networkit/community/DissimilarityMeasure.hpp +31 -0
- package/vendor/include/networkit/community/DynamicNMIDistance.hpp +44 -0
- package/vendor/include/networkit/community/EdgeCut.hpp +24 -0
- package/vendor/include/networkit/community/GraphClusteringTools.hpp +103 -0
- package/vendor/include/networkit/community/GraphStructuralRandMeasure.hpp +28 -0
- package/vendor/include/networkit/community/HubDominance.hpp +46 -0
- package/vendor/include/networkit/community/IntrapartitionDensity.hpp +44 -0
- package/vendor/include/networkit/community/IsolatedInterpartitionConductance.hpp +40 -0
- package/vendor/include/networkit/community/IsolatedInterpartitionExpansion.hpp +40 -0
- package/vendor/include/networkit/community/JaccardMeasure.hpp +25 -0
- package/vendor/include/networkit/community/LFM.hpp +49 -0
- package/vendor/include/networkit/community/LPDegreeOrdered.hpp +48 -0
- package/vendor/include/networkit/community/LocalCommunityEvaluation.hpp +100 -0
- package/vendor/include/networkit/community/LocalCoverEvaluation.hpp +31 -0
- package/vendor/include/networkit/community/LocalPartitionEvaluation.hpp +31 -0
- package/vendor/include/networkit/community/LouvainMapEquation.hpp +135 -0
- package/vendor/include/networkit/community/Modularity.hpp +54 -0
- package/vendor/include/networkit/community/NMIDistance.hpp +28 -0
- package/vendor/include/networkit/community/NodeStructuralRandMeasure.hpp +27 -0
- package/vendor/include/networkit/community/OverlappingCommunityDetectionAlgorithm.hpp +51 -0
- package/vendor/include/networkit/community/OverlappingNMIDistance.hpp +175 -0
- package/vendor/include/networkit/community/PLM.hpp +89 -0
- package/vendor/include/networkit/community/PLP.hpp +83 -0
- package/vendor/include/networkit/community/ParallelAgglomerativeClusterer.hpp +37 -0
- package/vendor/include/networkit/community/ParallelLeiden.hpp +96 -0
- package/vendor/include/networkit/community/ParallelLeidenView.hpp +138 -0
- package/vendor/include/networkit/community/PartitionFragmentation.hpp +30 -0
- package/vendor/include/networkit/community/PartitionHubDominance.hpp +37 -0
- package/vendor/include/networkit/community/PartitionIntersection.hpp +25 -0
- package/vendor/include/networkit/community/QualityMeasure.hpp +27 -0
- package/vendor/include/networkit/community/SampledGraphStructuralRandMeasure.hpp +40 -0
- package/vendor/include/networkit/community/SampledNodeStructuralRandMeasure.hpp +40 -0
- package/vendor/include/networkit/community/StablePartitionNodes.hpp +48 -0
- package/vendor/include/networkit/components/BiconnectedComponents.hpp +116 -0
- package/vendor/include/networkit/components/ComponentDecomposition.hpp +72 -0
- package/vendor/include/networkit/components/ConnectedComponents.hpp +55 -0
- package/vendor/include/networkit/components/DynConnectedComponents.hpp +71 -0
- package/vendor/include/networkit/components/DynWeaklyConnectedComponents.hpp +73 -0
- package/vendor/include/networkit/components/ParallelConnectedComponents.hpp +44 -0
- package/vendor/include/networkit/components/RandomSpanningForest.hpp +36 -0
- package/vendor/include/networkit/components/StronglyConnectedComponents.hpp +50 -0
- package/vendor/include/networkit/components/WeaklyConnectedComponents.hpp +59 -0
- package/vendor/include/networkit/correlation/Assortativity.hpp +64 -0
- package/vendor/include/networkit/distance/APSP.hpp +70 -0
- package/vendor/include/networkit/distance/AStar.hpp +68 -0
- package/vendor/include/networkit/distance/AStarGeneral.hpp +110 -0
- package/vendor/include/networkit/distance/AdamicAdarDistance.hpp +52 -0
- package/vendor/include/networkit/distance/AffectedNodes.hpp +130 -0
- package/vendor/include/networkit/distance/AlgebraicDistance.hpp +63 -0
- package/vendor/include/networkit/distance/BFS.hpp +43 -0
- package/vendor/include/networkit/distance/BidirectionalBFS.hpp +51 -0
- package/vendor/include/networkit/distance/BidirectionalDijkstra.hpp +69 -0
- package/vendor/include/networkit/distance/CommuteTimeDistance.hpp +89 -0
- package/vendor/include/networkit/distance/Diameter.hpp +97 -0
- package/vendor/include/networkit/distance/Dijkstra.hpp +50 -0
- package/vendor/include/networkit/distance/DynAPSP.hpp +67 -0
- package/vendor/include/networkit/distance/DynBFS.hpp +56 -0
- package/vendor/include/networkit/distance/DynDijkstra.hpp +57 -0
- package/vendor/include/networkit/distance/DynPrunedLandmarkLabeling.hpp +67 -0
- package/vendor/include/networkit/distance/DynSSSP.hpp +87 -0
- package/vendor/include/networkit/distance/Eccentricity.hpp +32 -0
- package/vendor/include/networkit/distance/EffectiveDiameter.hpp +47 -0
- package/vendor/include/networkit/distance/EffectiveDiameterApproximation.hpp +57 -0
- package/vendor/include/networkit/distance/FloydWarshall.hpp +93 -0
- package/vendor/include/networkit/distance/GraphDistance.hpp +49 -0
- package/vendor/include/networkit/distance/HopPlotApproximation.hpp +62 -0
- package/vendor/include/networkit/distance/IncompleteDijkstra.hpp +66 -0
- package/vendor/include/networkit/distance/IncompleteSSSP.hpp +41 -0
- package/vendor/include/networkit/distance/JaccardDistance.hpp +57 -0
- package/vendor/include/networkit/distance/MultiTargetBFS.hpp +32 -0
- package/vendor/include/networkit/distance/MultiTargetDijkstra.hpp +40 -0
- package/vendor/include/networkit/distance/NeighborhoodFunction.hpp +47 -0
- package/vendor/include/networkit/distance/NeighborhoodFunctionApproximation.hpp +56 -0
- package/vendor/include/networkit/distance/NeighborhoodFunctionHeuristic.hpp +56 -0
- package/vendor/include/networkit/distance/NodeDistance.hpp +54 -0
- package/vendor/include/networkit/distance/PrunedLandmarkLabeling.hpp +76 -0
- package/vendor/include/networkit/distance/ReverseBFS.hpp +46 -0
- package/vendor/include/networkit/distance/SPSP.hpp +143 -0
- package/vendor/include/networkit/distance/SSSP.hpp +216 -0
- package/vendor/include/networkit/distance/STSP.hpp +193 -0
- package/vendor/include/networkit/distance/Volume.hpp +66 -0
- package/vendor/include/networkit/dynamics/DGSStreamParser.hpp +40 -0
- package/vendor/include/networkit/dynamics/DGSWriter.hpp +30 -0
- package/vendor/include/networkit/dynamics/GraphDifference.hpp +110 -0
- package/vendor/include/networkit/dynamics/GraphEvent.hpp +55 -0
- package/vendor/include/networkit/dynamics/GraphEventHandler.hpp +39 -0
- package/vendor/include/networkit/dynamics/GraphEventProxy.hpp +55 -0
- package/vendor/include/networkit/dynamics/GraphUpdater.hpp +38 -0
- package/vendor/include/networkit/edgescores/ChibaNishizekiQuadrangleEdgeScore.hpp +26 -0
- package/vendor/include/networkit/edgescores/ChibaNishizekiTriangleEdgeScore.hpp +33 -0
- package/vendor/include/networkit/edgescores/EdgeScore.hpp +50 -0
- package/vendor/include/networkit/edgescores/EdgeScoreAsWeight.hpp +33 -0
- package/vendor/include/networkit/edgescores/EdgeScoreBlender.hpp +33 -0
- package/vendor/include/networkit/edgescores/EdgeScoreLinearizer.hpp +32 -0
- package/vendor/include/networkit/edgescores/EdgeScoreNormalizer.hpp +35 -0
- package/vendor/include/networkit/edgescores/GeometricMeanScore.hpp +29 -0
- package/vendor/include/networkit/edgescores/PrefixJaccardScore.hpp +23 -0
- package/vendor/include/networkit/edgescores/TriangleEdgeScore.hpp +39 -0
- package/vendor/include/networkit/embedding/Node2Vec.hpp +83 -0
- package/vendor/include/networkit/flow/EdmondsKarp.hpp +112 -0
- package/vendor/include/networkit/generators/BarabasiAlbertGenerator.hpp +87 -0
- package/vendor/include/networkit/generators/ChungLuGenerator.hpp +46 -0
- package/vendor/include/networkit/generators/ChungLuGeneratorAlamEtAl.hpp +63 -0
- package/vendor/include/networkit/generators/ClusteredRandomGraphGenerator.hpp +56 -0
- package/vendor/include/networkit/generators/ConfigurationModel.hpp +36 -0
- package/vendor/include/networkit/generators/DorogovtsevMendesGenerator.hpp +33 -0
- package/vendor/include/networkit/generators/DynamicBarabasiAlbertGenerator.hpp +33 -0
- package/vendor/include/networkit/generators/DynamicDGSParser.hpp +51 -0
- package/vendor/include/networkit/generators/DynamicDorogovtsevMendesGenerator.hpp +34 -0
- package/vendor/include/networkit/generators/DynamicForestFireGenerator.hpp +55 -0
- package/vendor/include/networkit/generators/DynamicGraphGenerator.hpp +40 -0
- package/vendor/include/networkit/generators/DynamicGraphSource.hpp +79 -0
- package/vendor/include/networkit/generators/DynamicHyperbolicGenerator.hpp +143 -0
- package/vendor/include/networkit/generators/DynamicPathGenerator.hpp +26 -0
- package/vendor/include/networkit/generators/DynamicPubWebGenerator.hpp +54 -0
- package/vendor/include/networkit/generators/EdgeSwitchingMarkovChainGenerator.hpp +65 -0
- package/vendor/include/networkit/generators/ErdosRenyiEnumerator.hpp +318 -0
- package/vendor/include/networkit/generators/ErdosRenyiGenerator.hpp +56 -0
- package/vendor/include/networkit/generators/HavelHakimiGenerator.hpp +48 -0
- package/vendor/include/networkit/generators/HyperbolicGenerator.hpp +236 -0
- package/vendor/include/networkit/generators/LFRGenerator.hpp +175 -0
- package/vendor/include/networkit/generators/MocnikGenerator.hpp +147 -0
- package/vendor/include/networkit/generators/MocnikGeneratorBasic.hpp +58 -0
- package/vendor/include/networkit/generators/PowerlawDegreeSequence.hpp +128 -0
- package/vendor/include/networkit/generators/PubWebGenerator.hpp +94 -0
- package/vendor/include/networkit/generators/RegularRingLatticeGenerator.hpp +37 -0
- package/vendor/include/networkit/generators/RmatGenerator.hpp +67 -0
- package/vendor/include/networkit/generators/StaticDegreeSequenceGenerator.hpp +42 -0
- package/vendor/include/networkit/generators/StaticGraphGenerator.hpp +30 -0
- package/vendor/include/networkit/generators/StochasticBlockmodel.hpp +41 -0
- package/vendor/include/networkit/generators/WattsStrogatzGenerator.hpp +43 -0
- package/vendor/include/networkit/generators/quadtree/QuadNode.hpp +857 -0
- package/vendor/include/networkit/generators/quadtree/QuadNodeCartesianEuclid.hpp +587 -0
- package/vendor/include/networkit/generators/quadtree/QuadNodePolarEuclid.hpp +726 -0
- package/vendor/include/networkit/generators/quadtree/Quadtree.hpp +232 -0
- package/vendor/include/networkit/generators/quadtree/QuadtreeCartesianEuclid.hpp +149 -0
- package/vendor/include/networkit/generators/quadtree/QuadtreePolarEuclid.hpp +143 -0
- package/vendor/include/networkit/geometric/HyperbolicSpace.hpp +248 -0
- package/vendor/include/networkit/geometric/Point2DWithIndex.hpp +145 -0
- package/vendor/include/networkit/global/ClusteringCoefficient.hpp +42 -0
- package/vendor/include/networkit/global/GlobalClusteringCoefficient.hpp +24 -0
- package/vendor/include/networkit/graph/Attributes.hpp +568 -0
- package/vendor/include/networkit/graph/BFS.hpp +111 -0
- package/vendor/include/networkit/graph/DFS.hpp +71 -0
- package/vendor/include/networkit/graph/Dijkstra.hpp +83 -0
- package/vendor/include/networkit/graph/EdgeIterators.hpp +171 -0
- package/vendor/include/networkit/graph/Graph.hpp +2083 -0
- package/vendor/include/networkit/graph/GraphBuilder.hpp +289 -0
- package/vendor/include/networkit/graph/GraphR.hpp +133 -0
- package/vendor/include/networkit/graph/GraphTools.hpp +589 -0
- package/vendor/include/networkit/graph/GraphW.hpp +1236 -0
- package/vendor/include/networkit/graph/KruskalMSF.hpp +50 -0
- package/vendor/include/networkit/graph/NeighborIterators.hpp +163 -0
- package/vendor/include/networkit/graph/NodeIterators.hpp +127 -0
- package/vendor/include/networkit/graph/PrimMSF.hpp +66 -0
- package/vendor/include/networkit/graph/RandomMaximumSpanningForest.hpp +133 -0
- package/vendor/include/networkit/graph/SpanningForest.hpp +41 -0
- package/vendor/include/networkit/graph/TopologicalSort.hpp +87 -0
- package/vendor/include/networkit/graph/UnionMaximumSpanningForest.hpp +126 -0
- package/vendor/include/networkit/graph/test/GraphBuilderBenchmark.hpp +68 -0
- package/vendor/include/networkit/independentset/IndependentSetFinder.hpp +44 -0
- package/vendor/include/networkit/independentset/Luby.hpp +27 -0
- package/vendor/include/networkit/io/BinaryEdgeListPartitionReader.hpp +45 -0
- package/vendor/include/networkit/io/BinaryEdgeListPartitionWriter.hpp +47 -0
- package/vendor/include/networkit/io/BinaryPartitionReader.hpp +41 -0
- package/vendor/include/networkit/io/BinaryPartitionWriter.hpp +44 -0
- package/vendor/include/networkit/io/CoverReader.hpp +27 -0
- package/vendor/include/networkit/io/CoverWriter.hpp +21 -0
- package/vendor/include/networkit/io/DGSReader.hpp +39 -0
- package/vendor/include/networkit/io/DibapGraphReader.hpp +43 -0
- package/vendor/include/networkit/io/DotGraphWriter.hpp +39 -0
- package/vendor/include/networkit/io/DotPartitionWriter.hpp +23 -0
- package/vendor/include/networkit/io/DynamicGraphReader.hpp +29 -0
- package/vendor/include/networkit/io/EdgeListCoverReader.hpp +35 -0
- package/vendor/include/networkit/io/EdgeListPartitionReader.hpp +43 -0
- package/vendor/include/networkit/io/EdgeListReader.hpp +61 -0
- package/vendor/include/networkit/io/EdgeListWriter.hpp +48 -0
- package/vendor/include/networkit/io/GMLGraphReader.hpp +33 -0
- package/vendor/include/networkit/io/GMLGraphWriter.hpp +33 -0
- package/vendor/include/networkit/io/GraphIO.hpp +52 -0
- package/vendor/include/networkit/io/GraphReader.hpp +40 -0
- package/vendor/include/networkit/io/GraphToolBinaryReader.hpp +71 -0
- package/vendor/include/networkit/io/GraphToolBinaryWriter.hpp +61 -0
- package/vendor/include/networkit/io/GraphWriter.hpp +27 -0
- package/vendor/include/networkit/io/KONECTGraphReader.hpp +44 -0
- package/vendor/include/networkit/io/LineFileReader.hpp +42 -0
- package/vendor/include/networkit/io/METISGraphReader.hpp +36 -0
- package/vendor/include/networkit/io/METISGraphWriter.hpp +29 -0
- package/vendor/include/networkit/io/METISParser.hpp +63 -0
- package/vendor/include/networkit/io/MTXGraphReader.hpp +31 -0
- package/vendor/include/networkit/io/MTXParser.hpp +87 -0
- package/vendor/include/networkit/io/MatrixMarketReader.hpp +33 -0
- package/vendor/include/networkit/io/MatrixReader.hpp +33 -0
- package/vendor/include/networkit/io/MemoryMappedFile.hpp +80 -0
- package/vendor/include/networkit/io/NetworkitBinaryGraph.hpp +144 -0
- package/vendor/include/networkit/io/NetworkitBinaryReader.hpp +50 -0
- package/vendor/include/networkit/io/NetworkitBinaryWriter.hpp +71 -0
- package/vendor/include/networkit/io/PartitionReader.hpp +34 -0
- package/vendor/include/networkit/io/PartitionWriter.hpp +31 -0
- package/vendor/include/networkit/io/RBGraphReader.hpp +37 -0
- package/vendor/include/networkit/io/RBMatrixReader.hpp +49 -0
- package/vendor/include/networkit/io/RasterReader.hpp +40 -0
- package/vendor/include/networkit/io/SNAPEdgeListPartitionReader.hpp +28 -0
- package/vendor/include/networkit/io/SNAPGraphReader.hpp +53 -0
- package/vendor/include/networkit/io/SNAPGraphWriter.hpp +53 -0
- package/vendor/include/networkit/io/ThrillGraphBinaryReader.hpp +44 -0
- package/vendor/include/networkit/io/ThrillGraphBinaryWriter.hpp +27 -0
- package/vendor/include/networkit/layout/LayoutAlgorithm.hpp +39 -0
- package/vendor/include/networkit/linkprediction/AdamicAdarIndex.hpp +37 -0
- package/vendor/include/networkit/linkprediction/AdjustedRandIndex.hpp +36 -0
- package/vendor/include/networkit/linkprediction/AlgebraicDistanceIndex.hpp +70 -0
- package/vendor/include/networkit/linkprediction/CommonNeighborsIndex.hpp +39 -0
- package/vendor/include/networkit/linkprediction/EvaluationMetric.hpp +135 -0
- package/vendor/include/networkit/linkprediction/JaccardIndex.hpp +44 -0
- package/vendor/include/networkit/linkprediction/KatzIndex.hpp +84 -0
- package/vendor/include/networkit/linkprediction/LinkPredictor.hpp +98 -0
- package/vendor/include/networkit/linkprediction/LinkThresholder.hpp +56 -0
- package/vendor/include/networkit/linkprediction/MissingLinksFinder.hpp +60 -0
- package/vendor/include/networkit/linkprediction/NeighborhoodDistanceIndex.hpp +42 -0
- package/vendor/include/networkit/linkprediction/NeighborhoodUtility.hpp +54 -0
- package/vendor/include/networkit/linkprediction/NeighborsMeasureIndex.hpp +48 -0
- package/vendor/include/networkit/linkprediction/PrecisionRecallMetric.hpp +40 -0
- package/vendor/include/networkit/linkprediction/PredictionsSorter.hpp +66 -0
- package/vendor/include/networkit/linkprediction/PreferentialAttachmentIndex.hpp +37 -0
- package/vendor/include/networkit/linkprediction/ROCMetric.hpp +39 -0
- package/vendor/include/networkit/linkprediction/RandomLinkSampler.hpp +47 -0
- package/vendor/include/networkit/linkprediction/ResourceAllocationIndex.hpp +38 -0
- package/vendor/include/networkit/linkprediction/SameCommunityIndex.hpp +50 -0
- package/vendor/include/networkit/linkprediction/TotalNeighborsIndex.hpp +39 -0
- package/vendor/include/networkit/linkprediction/UDegreeIndex.hpp +35 -0
- package/vendor/include/networkit/linkprediction/VDegreeIndex.hpp +35 -0
- package/vendor/include/networkit/matching/BMatcher.hpp +52 -0
- package/vendor/include/networkit/matching/BMatching.hpp +115 -0
- package/vendor/include/networkit/matching/BSuitorMatcher.hpp +170 -0
- package/vendor/include/networkit/matching/DynamicBSuitorMatcher.hpp +78 -0
- package/vendor/include/networkit/matching/LocalMaxMatcher.hpp +35 -0
- package/vendor/include/networkit/matching/Matcher.hpp +55 -0
- package/vendor/include/networkit/matching/Matching.hpp +111 -0
- package/vendor/include/networkit/matching/PathGrowingMatcher.hpp +46 -0
- package/vendor/include/networkit/matching/SuitorMatcher.hpp +62 -0
- package/vendor/include/networkit/numerics/ConjugateGradient.hpp +163 -0
- package/vendor/include/networkit/numerics/GaussSeidelRelaxation.hpp +99 -0
- package/vendor/include/networkit/numerics/LAMG/LAMGSettings.hpp +70 -0
- package/vendor/include/networkit/numerics/LAMG/Lamg.hpp +460 -0
- package/vendor/include/networkit/numerics/LAMG/Level/EliminationStage.hpp +47 -0
- package/vendor/include/networkit/numerics/LAMG/Level/Level.hpp +56 -0
- package/vendor/include/networkit/numerics/LAMG/Level/LevelAggregation.hpp +52 -0
- package/vendor/include/networkit/numerics/LAMG/Level/LevelElimination.hpp +133 -0
- package/vendor/include/networkit/numerics/LAMG/Level/LevelFinest.hpp +28 -0
- package/vendor/include/networkit/numerics/LAMG/LevelHierarchy.hpp +165 -0
- package/vendor/include/networkit/numerics/LAMG/MultiLevelSetup.hpp +1090 -0
- package/vendor/include/networkit/numerics/LAMG/SolverLamg.hpp +316 -0
- package/vendor/include/networkit/numerics/LinearSolver.hpp +151 -0
- package/vendor/include/networkit/numerics/Preconditioner/DiagonalPreconditioner.hpp +61 -0
- package/vendor/include/networkit/numerics/Preconditioner/IdentityPreconditioner.hpp +36 -0
- package/vendor/include/networkit/numerics/Smoother.hpp +37 -0
- package/vendor/include/networkit/overlap/HashingOverlapper.hpp +28 -0
- package/vendor/include/networkit/overlap/Overlapper.hpp +27 -0
- package/vendor/include/networkit/planarity/LeftRightPlanarityCheck.hpp +113 -0
- package/vendor/include/networkit/randomization/Curveball.hpp +49 -0
- package/vendor/include/networkit/randomization/CurveballGlobalTradeGenerator.hpp +39 -0
- package/vendor/include/networkit/randomization/CurveballUniformTradeGenerator.hpp +39 -0
- package/vendor/include/networkit/randomization/DegreePreservingShuffle.hpp +82 -0
- package/vendor/include/networkit/randomization/EdgeSwitching.hpp +157 -0
- package/vendor/include/networkit/randomization/GlobalCurveball.hpp +69 -0
- package/vendor/include/networkit/randomization/GlobalTradeSequence.hpp +303 -0
- package/vendor/include/networkit/reachability/AllSimplePaths.hpp +122 -0
- package/vendor/include/networkit/reachability/ReachableNodes.hpp +83 -0
- package/vendor/include/networkit/scd/ApproximatePageRank.hpp +51 -0
- package/vendor/include/networkit/scd/CliqueDetect.hpp +55 -0
- package/vendor/include/networkit/scd/CombinedSCD.hpp +51 -0
- package/vendor/include/networkit/scd/GCE.hpp +42 -0
- package/vendor/include/networkit/scd/LFMLocal.hpp +54 -0
- package/vendor/include/networkit/scd/LocalT.hpp +40 -0
- package/vendor/include/networkit/scd/LocalTightnessExpansion.hpp +46 -0
- package/vendor/include/networkit/scd/PageRankNibble.hpp +55 -0
- package/vendor/include/networkit/scd/RandomBFS.hpp +33 -0
- package/vendor/include/networkit/scd/SCDGroundTruthComparison.hpp +121 -0
- package/vendor/include/networkit/scd/SelectiveCommunityDetector.hpp +76 -0
- package/vendor/include/networkit/scd/SetConductance.hpp +47 -0
- package/vendor/include/networkit/scd/TCE.hpp +41 -0
- package/vendor/include/networkit/scd/TwoPhaseL.hpp +40 -0
- package/vendor/include/networkit/scoring/EdgeScoring.hpp +44 -0
- package/vendor/include/networkit/scoring/ModularityScoring.hpp +79 -0
- package/vendor/include/networkit/simulation/EpidemicSimulationSEIR.hpp +59 -0
- package/vendor/include/networkit/sparsification/ChanceCorrectedTriangleScore.hpp +28 -0
- package/vendor/include/networkit/sparsification/ForestFireScore.hpp +34 -0
- package/vendor/include/networkit/sparsification/GlobalThresholdFilter.hpp +40 -0
- package/vendor/include/networkit/sparsification/LocalDegreeScore.hpp +30 -0
- package/vendor/include/networkit/sparsification/LocalFilterScore.hpp +124 -0
- package/vendor/include/networkit/sparsification/LocalSimilarityScore.hpp +63 -0
- package/vendor/include/networkit/sparsification/MultiscaleScore.hpp +38 -0
- package/vendor/include/networkit/sparsification/RandomEdgeScore.hpp +33 -0
- package/vendor/include/networkit/sparsification/RandomNodeEdgeScore.hpp +29 -0
- package/vendor/include/networkit/sparsification/SCANStructuralSimilarityScore.hpp +23 -0
- package/vendor/include/networkit/sparsification/SimmelianOverlapScore.hpp +35 -0
- package/vendor/include/networkit/sparsification/SimmelianScore.hpp +92 -0
- package/vendor/include/networkit/sparsification/Sparsifiers.hpp +166 -0
- package/vendor/include/networkit/structures/Cover.hpp +248 -0
- package/vendor/include/networkit/structures/LocalCommunity.hpp +363 -0
- package/vendor/include/networkit/structures/Partition.hpp +335 -0
- package/vendor/include/networkit/structures/UnionFind.hpp +66 -0
- package/vendor/include/networkit/viz/GraphLayoutAlgorithm.hpp +157 -0
- package/vendor/include/networkit/viz/MaxentStress.hpp +346 -0
- package/vendor/include/networkit/viz/Octree.hpp +428 -0
- package/vendor/include/networkit/viz/PivotMDS.hpp +63 -0
- package/vendor/include/networkit/viz/Point.hpp +415 -0
- package/vendor/include/networkit/viz/PostscriptWriter.hpp +78 -0
- package/vendor/include/tlx/algorithm/exclusive_scan.hpp +56 -0
- package/vendor/include/tlx/algorithm/is_sorted_cmp.hpp +56 -0
- package/vendor/include/tlx/algorithm/merge_advance.hpp +177 -0
- package/vendor/include/tlx/algorithm/merge_combine.hpp +76 -0
- package/vendor/include/tlx/algorithm/multisequence_partition.hpp +346 -0
- package/vendor/include/tlx/algorithm/multisequence_selection.hpp +351 -0
- package/vendor/include/tlx/algorithm/multiway_merge.hpp +1385 -0
- package/vendor/include/tlx/algorithm/multiway_merge_splitting.hpp +257 -0
- package/vendor/include/tlx/algorithm/parallel_multiway_merge.hpp +408 -0
- package/vendor/include/tlx/algorithm/random_bipartition_shuffle.hpp +116 -0
- package/vendor/include/tlx/algorithm.hpp +36 -0
- package/vendor/include/tlx/allocator_base.hpp +100 -0
- package/vendor/include/tlx/backtrace.hpp +54 -0
- package/vendor/include/tlx/cmdline_parser.hpp +498 -0
- package/vendor/include/tlx/container/btree.hpp +3977 -0
- package/vendor/include/tlx/container/btree_map.hpp +634 -0
- package/vendor/include/tlx/container/btree_multimap.hpp +627 -0
- package/vendor/include/tlx/container/btree_multiset.hpp +612 -0
- package/vendor/include/tlx/container/btree_set.hpp +612 -0
- package/vendor/include/tlx/container/d_ary_addressable_int_heap.hpp +416 -0
- package/vendor/include/tlx/container/d_ary_heap.hpp +311 -0
- package/vendor/include/tlx/container/loser_tree.hpp +1009 -0
- package/vendor/include/tlx/container/lru_cache.hpp +319 -0
- package/vendor/include/tlx/container/radix_heap.hpp +735 -0
- package/vendor/include/tlx/container/ring_buffer.hpp +428 -0
- package/vendor/include/tlx/container/simple_vector.hpp +304 -0
- package/vendor/include/tlx/container/splay_tree.hpp +399 -0
- package/vendor/include/tlx/container/string_view.hpp +805 -0
- package/vendor/include/tlx/container.hpp +40 -0
- package/vendor/include/tlx/counting_ptr.hpp +522 -0
- package/vendor/include/tlx/define/attribute_always_inline.hpp +34 -0
- package/vendor/include/tlx/define/attribute_fallthrough.hpp +36 -0
- package/vendor/include/tlx/define/attribute_format_printf.hpp +34 -0
- package/vendor/include/tlx/define/attribute_packed.hpp +34 -0
- package/vendor/include/tlx/define/attribute_warn_unused_result.hpp +34 -0
- package/vendor/include/tlx/define/constexpr.hpp +31 -0
- package/vendor/include/tlx/define/deprecated.hpp +39 -0
- package/vendor/include/tlx/define/endian.hpp +49 -0
- package/vendor/include/tlx/define/likely.hpp +33 -0
- package/vendor/include/tlx/define/visibility_hidden.hpp +34 -0
- package/vendor/include/tlx/define.hpp +36 -0
- package/vendor/include/tlx/delegate.hpp +524 -0
- package/vendor/include/tlx/die/core.hpp +311 -0
- package/vendor/include/tlx/die.hpp +106 -0
- package/vendor/include/tlx/digest/md5.hpp +81 -0
- package/vendor/include/tlx/digest/sha1.hpp +81 -0
- package/vendor/include/tlx/digest/sha256.hpp +81 -0
- package/vendor/include/tlx/digest/sha512.hpp +81 -0
- package/vendor/include/tlx/digest.hpp +30 -0
- package/vendor/include/tlx/logger/all.hpp +33 -0
- package/vendor/include/tlx/logger/array.hpp +43 -0
- package/vendor/include/tlx/logger/core.hpp +287 -0
- package/vendor/include/tlx/logger/deque.hpp +42 -0
- package/vendor/include/tlx/logger/map.hpp +65 -0
- package/vendor/include/tlx/logger/set.hpp +60 -0
- package/vendor/include/tlx/logger/tuple.hpp +66 -0
- package/vendor/include/tlx/logger/unordered_map.hpp +68 -0
- package/vendor/include/tlx/logger/unordered_set.hpp +64 -0
- package/vendor/include/tlx/logger/wrap_unprintable.hpp +75 -0
- package/vendor/include/tlx/logger.hpp +44 -0
- package/vendor/include/tlx/math/abs_diff.hpp +35 -0
- package/vendor/include/tlx/math/aggregate.hpp +231 -0
- package/vendor/include/tlx/math/aggregate_min_max.hpp +116 -0
- package/vendor/include/tlx/math/bswap.hpp +148 -0
- package/vendor/include/tlx/math/bswap_be.hpp +79 -0
- package/vendor/include/tlx/math/bswap_le.hpp +79 -0
- package/vendor/include/tlx/math/clz.hpp +174 -0
- package/vendor/include/tlx/math/ctz.hpp +174 -0
- package/vendor/include/tlx/math/div_ceil.hpp +36 -0
- package/vendor/include/tlx/math/ffs.hpp +123 -0
- package/vendor/include/tlx/math/integer_log2.hpp +189 -0
- package/vendor/include/tlx/math/is_power_of_two.hpp +74 -0
- package/vendor/include/tlx/math/polynomial_regression.hpp +243 -0
- package/vendor/include/tlx/math/popcount.hpp +173 -0
- package/vendor/include/tlx/math/power_to_the.hpp +44 -0
- package/vendor/include/tlx/math/rol.hpp +112 -0
- package/vendor/include/tlx/math/ror.hpp +112 -0
- package/vendor/include/tlx/math/round_to_power_of_two.hpp +121 -0
- package/vendor/include/tlx/math/round_up.hpp +36 -0
- package/vendor/include/tlx/math/sgn.hpp +38 -0
- package/vendor/include/tlx/math.hpp +46 -0
- package/vendor/include/tlx/meta/apply_tuple.hpp +55 -0
- package/vendor/include/tlx/meta/call_for_range.hpp +78 -0
- package/vendor/include/tlx/meta/call_foreach.hpp +60 -0
- package/vendor/include/tlx/meta/call_foreach_tuple.hpp +60 -0
- package/vendor/include/tlx/meta/call_foreach_tuple_with_index.hpp +61 -0
- package/vendor/include/tlx/meta/call_foreach_with_index.hpp +64 -0
- package/vendor/include/tlx/meta/enable_if.hpp +37 -0
- package/vendor/include/tlx/meta/fold_left.hpp +63 -0
- package/vendor/include/tlx/meta/fold_left_tuple.hpp +60 -0
- package/vendor/include/tlx/meta/fold_right.hpp +63 -0
- package/vendor/include/tlx/meta/fold_right_tuple.hpp +60 -0
- package/vendor/include/tlx/meta/function_chain.hpp +197 -0
- package/vendor/include/tlx/meta/function_stack.hpp +189 -0
- package/vendor/include/tlx/meta/has_member.hpp +80 -0
- package/vendor/include/tlx/meta/has_method.hpp +117 -0
- package/vendor/include/tlx/meta/index_sequence.hpp +66 -0
- package/vendor/include/tlx/meta/is_std_array.hpp +40 -0
- package/vendor/include/tlx/meta/is_std_pair.hpp +39 -0
- package/vendor/include/tlx/meta/is_std_tuple.hpp +39 -0
- package/vendor/include/tlx/meta/is_std_vector.hpp +39 -0
- package/vendor/include/tlx/meta/log2.hpp +101 -0
- package/vendor/include/tlx/meta/no_operation.hpp +55 -0
- package/vendor/include/tlx/meta/static_index.hpp +42 -0
- package/vendor/include/tlx/meta/vexpand.hpp +34 -0
- package/vendor/include/tlx/meta/vmap_for_range.hpp +84 -0
- package/vendor/include/tlx/meta/vmap_foreach.hpp +63 -0
- package/vendor/include/tlx/meta/vmap_foreach_tuple.hpp +59 -0
- package/vendor/include/tlx/meta/vmap_foreach_tuple_with_index.hpp +62 -0
- package/vendor/include/tlx/meta/vmap_foreach_with_index.hpp +70 -0
- package/vendor/include/tlx/meta.hpp +55 -0
- package/vendor/include/tlx/multi_timer.hpp +148 -0
- package/vendor/include/tlx/port/setenv.hpp +31 -0
- package/vendor/include/tlx/port.hpp +27 -0
- package/vendor/include/tlx/semaphore.hpp +119 -0
- package/vendor/include/tlx/simple_vector.hpp +20 -0
- package/vendor/include/tlx/siphash.hpp +282 -0
- package/vendor/include/tlx/sort/networks/best.hpp +611 -0
- package/vendor/include/tlx/sort/networks/bose_nelson.hpp +412 -0
- package/vendor/include/tlx/sort/networks/bose_nelson_parameter.hpp +507 -0
- package/vendor/include/tlx/sort/networks/cswap.hpp +60 -0
- package/vendor/include/tlx/sort/parallel_mergesort.hpp +398 -0
- package/vendor/include/tlx/sort/strings/insertion_sort.hpp +232 -0
- package/vendor/include/tlx/sort/strings/multikey_quicksort.hpp +185 -0
- package/vendor/include/tlx/sort/strings/parallel_sample_sort.hpp +1647 -0
- package/vendor/include/tlx/sort/strings/radix_sort.hpp +934 -0
- package/vendor/include/tlx/sort/strings/sample_sort_tools.hpp +756 -0
- package/vendor/include/tlx/sort/strings/string_ptr.hpp +426 -0
- package/vendor/include/tlx/sort/strings/string_set.hpp +800 -0
- package/vendor/include/tlx/sort/strings.hpp +329 -0
- package/vendor/include/tlx/sort/strings_parallel.hpp +325 -0
- package/vendor/include/tlx/sort.hpp +29 -0
- package/vendor/include/tlx/stack_allocator.hpp +226 -0
- package/vendor/include/tlx/string/appendline.hpp +35 -0
- package/vendor/include/tlx/string/base64.hpp +87 -0
- package/vendor/include/tlx/string/bitdump.hpp +139 -0
- package/vendor/include/tlx/string/compare_icase.hpp +42 -0
- package/vendor/include/tlx/string/contains.hpp +36 -0
- package/vendor/include/tlx/string/contains_word.hpp +42 -0
- package/vendor/include/tlx/string/ends_with.hpp +79 -0
- package/vendor/include/tlx/string/equal_icase.hpp +42 -0
- package/vendor/include/tlx/string/erase_all.hpp +70 -0
- package/vendor/include/tlx/string/escape_html.hpp +34 -0
- package/vendor/include/tlx/string/escape_uri.hpp +34 -0
- package/vendor/include/tlx/string/expand_environment_variables.hpp +49 -0
- package/vendor/include/tlx/string/extract_between.hpp +40 -0
- package/vendor/include/tlx/string/format_iec_units.hpp +32 -0
- package/vendor/include/tlx/string/format_si_iec_units.hpp +19 -0
- package/vendor/include/tlx/string/format_si_units.hpp +32 -0
- package/vendor/include/tlx/string/hash_djb2.hpp +87 -0
- package/vendor/include/tlx/string/hash_sdbm.hpp +86 -0
- package/vendor/include/tlx/string/hexdump.hpp +154 -0
- package/vendor/include/tlx/string/index_of.hpp +56 -0
- package/vendor/include/tlx/string/join.hpp +65 -0
- package/vendor/include/tlx/string/join_generic.hpp +89 -0
- package/vendor/include/tlx/string/join_quoted.hpp +46 -0
- package/vendor/include/tlx/string/less_icase.hpp +64 -0
- package/vendor/include/tlx/string/levenshtein.hpp +193 -0
- package/vendor/include/tlx/string/pad.hpp +39 -0
- package/vendor/include/tlx/string/parse_si_iec_units.hpp +46 -0
- package/vendor/include/tlx/string/parse_uri.hpp +66 -0
- package/vendor/include/tlx/string/parse_uri_form_data.hpp +136 -0
- package/vendor/include/tlx/string/replace.hpp +141 -0
- package/vendor/include/tlx/string/split.hpp +170 -0
- package/vendor/include/tlx/string/split_quoted.hpp +49 -0
- package/vendor/include/tlx/string/split_view.hpp +218 -0
- package/vendor/include/tlx/string/split_words.hpp +53 -0
- package/vendor/include/tlx/string/ssprintf.hpp +45 -0
- package/vendor/include/tlx/string/ssprintf_generic.hpp +95 -0
- package/vendor/include/tlx/string/starts_with.hpp +44 -0
- package/vendor/include/tlx/string/to_lower.hpp +47 -0
- package/vendor/include/tlx/string/to_upper.hpp +47 -0
- package/vendor/include/tlx/string/trim.hpp +298 -0
- package/vendor/include/tlx/string/union_words.hpp +33 -0
- package/vendor/include/tlx/string/word_wrap.hpp +35 -0
- package/vendor/include/tlx/string.hpp +68 -0
- package/vendor/include/tlx/thread_barrier_mutex.hpp +109 -0
- package/vendor/include/tlx/thread_barrier_spin.hpp +127 -0
- package/vendor/include/tlx/thread_pool.hpp +151 -0
- package/vendor/include/tlx/timestamp.hpp +23 -0
- package/vendor/include/tlx/unused.hpp +28 -0
- package/vendor/include/tlx/vector_free.hpp +30 -0
- package/vendor/include/tlx/version.hpp +49 -0
- package/vendor/include/ttmath/ttmath.h +2881 -0
- package/vendor/include/ttmath/ttmathbig.h +6111 -0
- package/vendor/include/ttmath/ttmathdec.h +419 -0
- package/vendor/include/ttmath/ttmathint.h +1923 -0
- package/vendor/include/ttmath/ttmathmisc.h +250 -0
- package/vendor/include/ttmath/ttmathobjects.h +812 -0
- package/vendor/include/ttmath/ttmathparser.h +2791 -0
- package/vendor/include/ttmath/ttmaththreads.h +252 -0
- package/vendor/include/ttmath/ttmathtypes.h +707 -0
- package/vendor/include/ttmath/ttmathuint.h +4190 -0
- package/vendor/include/ttmath/ttmathuint_noasm.h +1038 -0
- package/vendor/include/ttmath/ttmathuint_x86.h +1620 -0
- package/vendor/include/ttmath/ttmathuint_x86_64.h +1177 -0
- package/vendor/lib/cmake/tlx/tlx-config.cmake +51 -0
- package/vendor/lib/cmake/tlx/tlx-targets-release.cmake +19 -0
- package/vendor/lib/cmake/tlx/tlx-targets.cmake +106 -0
- package/vendor/lib/cmake/tlx/tlx-version.cmake +11 -0
- package/vendor/lib/libnetworkit.dylib +0 -0
- package/vendor/lib/libtlx.a +0 -0
- package/vendor/lib/pkgconfig/networkit.pc +11 -0
- package/vendor/lib/pkgconfig/tlx.pc +11 -0
|
@@ -0,0 +1,1009 @@
|
|
|
1
|
+
/*******************************************************************************
|
|
2
|
+
* tlx/container/loser_tree.hpp
|
|
3
|
+
*
|
|
4
|
+
* Many generic loser tree variants.
|
|
5
|
+
*
|
|
6
|
+
* Copied and modified from STXXL, see http://stxxl.org, which itself extracted
|
|
7
|
+
* it from MCSTL http://algo2.iti.uni-karlsruhe.de/singler/mcstl/. Both are
|
|
8
|
+
* distributed under the Boost Software License, Version 1.0.
|
|
9
|
+
*
|
|
10
|
+
* Part of tlx - http://panthema.net/tlx
|
|
11
|
+
*
|
|
12
|
+
* Copyright (C) 2007 Johannes Singler <singler@ira.uka.de>
|
|
13
|
+
* Copyright (C) 2014-2017 Timo Bingmann <tb@panthema.net>
|
|
14
|
+
* Copyright (C) 2015 Huyen Chau Nguyen <hello@chau-nguyen.de>
|
|
15
|
+
*
|
|
16
|
+
* All rights reserved. Published under the Boost Software License, Version 1.0
|
|
17
|
+
******************************************************************************/
|
|
18
|
+
|
|
19
|
+
#ifndef TLX_CONTAINER_LOSER_TREE_HEADER
|
|
20
|
+
#define TLX_CONTAINER_LOSER_TREE_HEADER
|
|
21
|
+
|
|
22
|
+
#include <tlx/container/simple_vector.hpp>
|
|
23
|
+
#include <tlx/define/likely.hpp>
|
|
24
|
+
#include <tlx/math/round_to_power_of_two.hpp>
|
|
25
|
+
#include <tlx/unused.hpp>
|
|
26
|
+
#include <algorithm>
|
|
27
|
+
#include <cassert>
|
|
28
|
+
#include <cstddef>
|
|
29
|
+
#include <cstdint>
|
|
30
|
+
#include <functional>
|
|
31
|
+
#include <type_traits>
|
|
32
|
+
#include <utility>
|
|
33
|
+
|
|
34
|
+
namespace tlx {
|
|
35
|
+
|
|
36
|
+
//! \addtogroup tlx_container
|
|
37
|
+
//! \{
|
|
38
|
+
//! \defgroup tlx_container_loser_tree Loser Trees
|
|
39
|
+
//! Loser/Tournament tree variants
|
|
40
|
+
//! \{
|
|
41
|
+
|
|
42
|
+
/*!
|
|
43
|
+
* Guarded loser tree/tournament tree, either copying the whole element into the
|
|
44
|
+
* tree structure, or looking up the element via the index.
|
|
45
|
+
*
|
|
46
|
+
* This is a base class for the LoserTreeCopy\<true> and \<false> classes.
|
|
47
|
+
*
|
|
48
|
+
* Guarding is done explicitly through one flag sup per element, inf is not
|
|
49
|
+
* needed due to a better initialization routine. This is a well-performing
|
|
50
|
+
* variant.
|
|
51
|
+
*
|
|
52
|
+
* \tparam ValueType the element type
|
|
53
|
+
* \tparam Comparator comparator to use for binary comparisons.
|
|
54
|
+
*/
|
|
55
|
+
template <typename ValueType, typename Comparator = std::less<ValueType> >
|
|
56
|
+
class LoserTreeCopyBase
|
|
57
|
+
{
|
|
58
|
+
public:
|
|
59
|
+
//! size of counters and array indexes
|
|
60
|
+
using Source = std::uint32_t;
|
|
61
|
+
|
|
62
|
+
//! sentinel for invalid or finished Sources
|
|
63
|
+
static constexpr Source invalid_ = Source(-1);
|
|
64
|
+
|
|
65
|
+
protected:
|
|
66
|
+
//! Internal representation of a loser tree player/node
|
|
67
|
+
struct Loser
|
|
68
|
+
{
|
|
69
|
+
//! flag, true iff is a virtual maximum sentinel
|
|
70
|
+
bool sup;
|
|
71
|
+
//! index of source
|
|
72
|
+
Source source;
|
|
73
|
+
//! copy of key value of the element in this node
|
|
74
|
+
ValueType key;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// NOLINTBEGIN(cppcoreguidelines-non-private-member-variables-in-classes)
|
|
78
|
+
|
|
79
|
+
//! number of nodes
|
|
80
|
+
const Source ik_;
|
|
81
|
+
//! log_2(ik) next greater power of 2
|
|
82
|
+
const Source k_;
|
|
83
|
+
//! array containing loser tree nodes -- avoid default-constructing
|
|
84
|
+
//! losers[].key
|
|
85
|
+
SimpleVector<Loser> losers_;
|
|
86
|
+
//! the comparator object
|
|
87
|
+
Comparator cmp_;
|
|
88
|
+
|
|
89
|
+
// NOLINTEND(cppcoreguidelines-non-private-member-variables-in-classes)
|
|
90
|
+
private:
|
|
91
|
+
//! still have to construct keys
|
|
92
|
+
bool first_insert_ = true;
|
|
93
|
+
|
|
94
|
+
public:
|
|
95
|
+
explicit LoserTreeCopyBase(const Source& k,
|
|
96
|
+
const Comparator& cmp = Comparator())
|
|
97
|
+
: ik_(k), k_(round_up_to_power_of_two(ik_)), losers_(2 * k_), cmp_(cmp)
|
|
98
|
+
{
|
|
99
|
+
for (Source i = ik_ - 1; i < k_; ++i)
|
|
100
|
+
{
|
|
101
|
+
losers_[i + k_].sup = true;
|
|
102
|
+
losers_[i + k_].source = invalid_;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
//! return the index of the player with the smallest element.
|
|
107
|
+
Source min_source()
|
|
108
|
+
{
|
|
109
|
+
return losers_[0].source;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/*!
|
|
113
|
+
* Initializes the player source with the element key.
|
|
114
|
+
*
|
|
115
|
+
* \param keyp the element to insert
|
|
116
|
+
* \param source index of the player
|
|
117
|
+
* \param sup flag that determines whether the value to insert is an
|
|
118
|
+
* explicit supremum sentinel.
|
|
119
|
+
*/
|
|
120
|
+
void insert_start(const ValueType* keyp, const Source& source, bool sup)
|
|
121
|
+
{
|
|
122
|
+
Source pos = k_ + source;
|
|
123
|
+
|
|
124
|
+
assert(pos < losers_.size());
|
|
125
|
+
assert(sup == (keyp == nullptr));
|
|
126
|
+
|
|
127
|
+
losers_[pos].sup = sup;
|
|
128
|
+
losers_[pos].source = source;
|
|
129
|
+
|
|
130
|
+
if (TLX_UNLIKELY(first_insert_))
|
|
131
|
+
{
|
|
132
|
+
// copy construct all keys from this first key
|
|
133
|
+
for (Source i = 0; i < 2 * k_; ++i)
|
|
134
|
+
{
|
|
135
|
+
if (keyp)
|
|
136
|
+
losers_[i].key = *keyp;
|
|
137
|
+
else
|
|
138
|
+
losers_[i].key = ValueType();
|
|
139
|
+
}
|
|
140
|
+
first_insert_ = false;
|
|
141
|
+
}
|
|
142
|
+
else
|
|
143
|
+
{
|
|
144
|
+
losers_[pos].key = keyp ? *keyp : ValueType();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/*!
|
|
149
|
+
* Computes the winner of the competition at player root. Called
|
|
150
|
+
* recursively (starting at 0) to build the initial tree.
|
|
151
|
+
*
|
|
152
|
+
* \param root index of the game to start.
|
|
153
|
+
*/
|
|
154
|
+
Source init_winner(const Source& root)
|
|
155
|
+
{
|
|
156
|
+
if (root >= k_)
|
|
157
|
+
return root;
|
|
158
|
+
|
|
159
|
+
Source left = init_winner(2 * root);
|
|
160
|
+
Source right = init_winner(2 * root + 1);
|
|
161
|
+
if (losers_[right].sup ||
|
|
162
|
+
(!losers_[left].sup &&
|
|
163
|
+
!cmp_(losers_[right].key, losers_[left].key)))
|
|
164
|
+
{
|
|
165
|
+
// left one is less or equal
|
|
166
|
+
losers_[root] = losers_[right];
|
|
167
|
+
return left;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// right one is less
|
|
171
|
+
losers_[root] = losers_[left];
|
|
172
|
+
return right;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
void init()
|
|
176
|
+
{
|
|
177
|
+
if (TLX_UNLIKELY(k_ == 0))
|
|
178
|
+
return;
|
|
179
|
+
losers_[0] = losers_[init_winner(1)];
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
/*!
|
|
184
|
+
* Guarded loser tree/tournament tree, either copying the whole element into the
|
|
185
|
+
* tree structure, or looking up the element via the index.
|
|
186
|
+
*
|
|
187
|
+
* Unstable specialization of LoserTreeCopyBase.
|
|
188
|
+
*
|
|
189
|
+
* Guarding is done explicitly through one flag sup per element, inf is not
|
|
190
|
+
* needed due to a better initialization routine. This is a well-performing
|
|
191
|
+
* variant.
|
|
192
|
+
*
|
|
193
|
+
* \tparam ValueType the element type
|
|
194
|
+
* \tparam Comparator comparator to use for binary comparisons.
|
|
195
|
+
*/
|
|
196
|
+
template <bool Stable /* == false */, typename ValueType,
|
|
197
|
+
typename Comparator = std::less<ValueType> >
|
|
198
|
+
class LoserTreeCopy : public LoserTreeCopyBase<ValueType, Comparator>
|
|
199
|
+
{
|
|
200
|
+
public:
|
|
201
|
+
using Super = LoserTreeCopyBase<ValueType, Comparator>;
|
|
202
|
+
using Source = typename Super::Source;
|
|
203
|
+
|
|
204
|
+
protected:
|
|
205
|
+
using Super::cmp_;
|
|
206
|
+
using Super::k_;
|
|
207
|
+
using Super::losers_;
|
|
208
|
+
|
|
209
|
+
public:
|
|
210
|
+
explicit LoserTreeCopy(const Source& k,
|
|
211
|
+
const Comparator& cmp = Comparator())
|
|
212
|
+
: Super(k, cmp)
|
|
213
|
+
{
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// do not pass const reference since key will be used as local variable
|
|
217
|
+
void delete_min_insert(const ValueType* keyp, bool sup)
|
|
218
|
+
{
|
|
219
|
+
using std::swap;
|
|
220
|
+
assert(sup == (keyp == nullptr));
|
|
221
|
+
|
|
222
|
+
Source source = losers_[0].source;
|
|
223
|
+
ValueType key = keyp ? *keyp : ValueType();
|
|
224
|
+
Source pos = (k_ + source) / 2;
|
|
225
|
+
|
|
226
|
+
while (pos > 0)
|
|
227
|
+
{
|
|
228
|
+
if (TLX_UNLIKELY(sup))
|
|
229
|
+
{
|
|
230
|
+
// the other candidate is smaller
|
|
231
|
+
swap(losers_[pos].sup, sup);
|
|
232
|
+
swap(losers_[pos].source, source);
|
|
233
|
+
swap(losers_[pos].key, key);
|
|
234
|
+
}
|
|
235
|
+
else if (TLX_UNLIKELY(losers_[pos].sup))
|
|
236
|
+
{
|
|
237
|
+
// this candidate is smaller
|
|
238
|
+
}
|
|
239
|
+
else if (cmp_(losers_[pos].key, key))
|
|
240
|
+
{
|
|
241
|
+
// the other one is smaller
|
|
242
|
+
swap(losers_[pos].source, source);
|
|
243
|
+
swap(losers_[pos].key, key);
|
|
244
|
+
}
|
|
245
|
+
else
|
|
246
|
+
{
|
|
247
|
+
// this candidate is smaller
|
|
248
|
+
}
|
|
249
|
+
pos /= 2;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
losers_[0].sup = sup;
|
|
253
|
+
losers_[0].source = source;
|
|
254
|
+
losers_[0].key = key;
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
/*!
|
|
259
|
+
* Guarded loser tree/tournament tree, either copying the whole element into the
|
|
260
|
+
* tree structure, or looking up the element via the index.
|
|
261
|
+
*
|
|
262
|
+
* Stable specialization of LoserTreeCopyBase.
|
|
263
|
+
*
|
|
264
|
+
* Guarding is done explicitly through one flag sup per element, inf is not
|
|
265
|
+
* needed due to a better initialization routine. This is a well-performing
|
|
266
|
+
* variant.
|
|
267
|
+
*
|
|
268
|
+
* \tparam ValueType the element type
|
|
269
|
+
* \tparam Comparator comparator to use for binary comparisons.
|
|
270
|
+
*/
|
|
271
|
+
template <typename ValueType, typename Comparator>
|
|
272
|
+
class LoserTreeCopy</* Stable == */ true, ValueType, Comparator>
|
|
273
|
+
: public LoserTreeCopyBase<ValueType, Comparator>
|
|
274
|
+
{
|
|
275
|
+
public:
|
|
276
|
+
using Super = LoserTreeCopyBase<ValueType, Comparator>;
|
|
277
|
+
using Source = typename Super::Source;
|
|
278
|
+
|
|
279
|
+
protected:
|
|
280
|
+
using Super::cmp_;
|
|
281
|
+
using Super::k_;
|
|
282
|
+
using Super::losers_;
|
|
283
|
+
|
|
284
|
+
public:
|
|
285
|
+
explicit LoserTreeCopy(const Source& k,
|
|
286
|
+
const Comparator& cmp = Comparator())
|
|
287
|
+
: Super(k, cmp)
|
|
288
|
+
{
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// do not pass const reference since key will be used as local variable
|
|
292
|
+
void delete_min_insert(const ValueType* keyp, bool sup)
|
|
293
|
+
{
|
|
294
|
+
using std::swap;
|
|
295
|
+
assert(sup == (keyp == nullptr));
|
|
296
|
+
|
|
297
|
+
Source source = losers_[0].source;
|
|
298
|
+
ValueType key = keyp ? *keyp : ValueType();
|
|
299
|
+
Source pos = (k_ + source) / 2;
|
|
300
|
+
|
|
301
|
+
while (pos > 0)
|
|
302
|
+
{
|
|
303
|
+
if ((TLX_UNLIKELY(sup) && (!TLX_UNLIKELY(losers_[pos].sup) ||
|
|
304
|
+
losers_[pos].source < source)) ||
|
|
305
|
+
(!TLX_UNLIKELY(sup) && !TLX_UNLIKELY(losers_[pos].sup) &&
|
|
306
|
+
((cmp_(losers_[pos].key, key)) ||
|
|
307
|
+
(!cmp_(key, losers_[pos].key) &&
|
|
308
|
+
losers_[pos].source < source))))
|
|
309
|
+
{
|
|
310
|
+
// the other one is smaller
|
|
311
|
+
swap(losers_[pos].sup, sup);
|
|
312
|
+
swap(losers_[pos].source, source);
|
|
313
|
+
swap(losers_[pos].key, key);
|
|
314
|
+
}
|
|
315
|
+
pos /= 2;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
losers_[0].sup = sup;
|
|
319
|
+
losers_[0].source = source;
|
|
320
|
+
losers_[0].key = key;
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
|
|
324
|
+
/*!
|
|
325
|
+
* Guarded loser tree, using pointers to the elements instead of copying them
|
|
326
|
+
* into the tree nodes.
|
|
327
|
+
*
|
|
328
|
+
* This is a base class for the LoserTreePointer\<true> and \<false> classes.
|
|
329
|
+
*
|
|
330
|
+
* Guarding is done explicitly through one flag sup per element, inf is not
|
|
331
|
+
* needed due to a better initialization routine. This is a well-performing
|
|
332
|
+
* variant.
|
|
333
|
+
*/
|
|
334
|
+
template <typename ValueType, typename Comparator = std::less<ValueType> >
|
|
335
|
+
class LoserTreePointerBase
|
|
336
|
+
{
|
|
337
|
+
public:
|
|
338
|
+
//! size of counters and array indexes
|
|
339
|
+
using Source = std::uint32_t;
|
|
340
|
+
|
|
341
|
+
//! sentinel for invalid or finished Sources
|
|
342
|
+
static constexpr Source invalid_ = Source(-1);
|
|
343
|
+
|
|
344
|
+
protected:
|
|
345
|
+
//! Internal representation of a loser tree player/node
|
|
346
|
+
struct Loser
|
|
347
|
+
{
|
|
348
|
+
//! index of source
|
|
349
|
+
Source source;
|
|
350
|
+
//! pointer to key value of the element in this node
|
|
351
|
+
const ValueType* keyp;
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
// NOLINTBEGIN(cppcoreguidelines-non-private-member-variables-in-classes)
|
|
355
|
+
|
|
356
|
+
//! number of nodes
|
|
357
|
+
const Source ik_;
|
|
358
|
+
//! log_2(ik) next greater power of 2
|
|
359
|
+
const Source k_;
|
|
360
|
+
//! array containing loser tree nodes
|
|
361
|
+
SimpleVector<Loser> losers_;
|
|
362
|
+
//! the comparator object
|
|
363
|
+
Comparator cmp_;
|
|
364
|
+
|
|
365
|
+
// NOLINTEND(cppcoreguidelines-non-private-member-variables-in-classes)
|
|
366
|
+
public:
|
|
367
|
+
explicit LoserTreePointerBase(Source k,
|
|
368
|
+
const Comparator& cmp = Comparator())
|
|
369
|
+
: ik_(k), k_(round_up_to_power_of_two(ik_)), losers_(k_ * 2), cmp_(cmp)
|
|
370
|
+
{
|
|
371
|
+
for (Source i = ik_ - 1; i < k_; i++)
|
|
372
|
+
{
|
|
373
|
+
losers_[i + k_].keyp = nullptr;
|
|
374
|
+
losers_[i + k_].source = invalid_;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
LoserTreePointerBase(const LoserTreePointerBase&) = delete;
|
|
379
|
+
LoserTreePointerBase& operator=(const LoserTreePointerBase&) = delete;
|
|
380
|
+
LoserTreePointerBase(LoserTreePointerBase&&) = default;
|
|
381
|
+
LoserTreePointerBase& operator=(LoserTreePointerBase&&) = default;
|
|
382
|
+
|
|
383
|
+
//! return the index of the player with the smallest element.
|
|
384
|
+
Source min_source()
|
|
385
|
+
{
|
|
386
|
+
return losers_[0].keyp ? losers_[0].source : invalid_;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/*!
|
|
390
|
+
* Initializes the player source with the element key.
|
|
391
|
+
*
|
|
392
|
+
* \param keyp the element to insert
|
|
393
|
+
* \param source index of the player
|
|
394
|
+
* \param sup flag that determines whether the value to insert is an
|
|
395
|
+
* explicit supremum sentinel.
|
|
396
|
+
*/
|
|
397
|
+
void insert_start(const ValueType* keyp, const Source& source, bool sup)
|
|
398
|
+
{
|
|
399
|
+
Source pos = k_ + source;
|
|
400
|
+
|
|
401
|
+
assert(pos < losers_.size());
|
|
402
|
+
assert(sup == (keyp == nullptr));
|
|
403
|
+
unused(sup);
|
|
404
|
+
|
|
405
|
+
losers_[pos].source = source;
|
|
406
|
+
losers_[pos].keyp = keyp;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/*!
|
|
410
|
+
* Computes the winner of the competition at player root. Called
|
|
411
|
+
* recursively (starting at 0) to build the initial tree.
|
|
412
|
+
*
|
|
413
|
+
* \param root index of the game to start.
|
|
414
|
+
*/
|
|
415
|
+
Source init_winner(const Source& root)
|
|
416
|
+
{
|
|
417
|
+
if (root >= k_)
|
|
418
|
+
return root;
|
|
419
|
+
|
|
420
|
+
Source left = init_winner(2 * root);
|
|
421
|
+
Source right = init_winner(2 * root + 1);
|
|
422
|
+
if (!losers_[right].keyp ||
|
|
423
|
+
(losers_[left].keyp &&
|
|
424
|
+
!cmp_(*losers_[right].keyp, *losers_[left].keyp)))
|
|
425
|
+
{
|
|
426
|
+
// left one is less or equal
|
|
427
|
+
losers_[root] = losers_[right];
|
|
428
|
+
return left;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// right one is less
|
|
432
|
+
losers_[root] = losers_[left];
|
|
433
|
+
return right;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
void init()
|
|
437
|
+
{
|
|
438
|
+
if (TLX_UNLIKELY(k_ == 0))
|
|
439
|
+
return;
|
|
440
|
+
losers_[0] = losers_[init_winner(1)];
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
/*!
|
|
445
|
+
* Guarded loser tree, using pointers to the elements instead of copying them
|
|
446
|
+
* into the tree nodes.
|
|
447
|
+
*
|
|
448
|
+
* Unstable specialization of LoserTreeCopyBase.
|
|
449
|
+
*
|
|
450
|
+
* Guarding is done explicitly through one flag sup per element, inf is not
|
|
451
|
+
* needed due to a better initialization routine. This is a well-performing
|
|
452
|
+
* variant.
|
|
453
|
+
*/
|
|
454
|
+
template <bool Stable /* == false */, typename ValueType,
|
|
455
|
+
typename Comparator = std::less<ValueType> >
|
|
456
|
+
class LoserTreePointer : public LoserTreePointerBase<ValueType, Comparator>
|
|
457
|
+
{
|
|
458
|
+
public:
|
|
459
|
+
using Super = LoserTreePointerBase<ValueType, Comparator>;
|
|
460
|
+
using Source = typename Super::Source;
|
|
461
|
+
|
|
462
|
+
protected:
|
|
463
|
+
using Super::cmp_;
|
|
464
|
+
using Super::k_;
|
|
465
|
+
using Super::losers_;
|
|
466
|
+
|
|
467
|
+
public:
|
|
468
|
+
explicit LoserTreePointer(Source k, const Comparator& cmp = Comparator())
|
|
469
|
+
: Super(k, cmp)
|
|
470
|
+
{
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
void delete_min_insert(const ValueType* keyp, bool sup)
|
|
474
|
+
{
|
|
475
|
+
using std::swap;
|
|
476
|
+
assert(sup == (keyp == nullptr));
|
|
477
|
+
unused(sup);
|
|
478
|
+
|
|
479
|
+
Source source = losers_[0].source;
|
|
480
|
+
Source pos = (k_ + source) / 2;
|
|
481
|
+
|
|
482
|
+
while (pos > 0)
|
|
483
|
+
{
|
|
484
|
+
if (TLX_UNLIKELY(!keyp))
|
|
485
|
+
{
|
|
486
|
+
// the other candidate is smaller
|
|
487
|
+
swap(losers_[pos].source, source);
|
|
488
|
+
swap(losers_[pos].keyp, keyp);
|
|
489
|
+
}
|
|
490
|
+
else if (TLX_UNLIKELY(!losers_[pos].keyp))
|
|
491
|
+
{
|
|
492
|
+
// this candidate is smaller
|
|
493
|
+
}
|
|
494
|
+
else if (cmp_(*losers_[pos].keyp, *keyp))
|
|
495
|
+
{
|
|
496
|
+
// the other one is smaller
|
|
497
|
+
swap(losers_[pos].source, source);
|
|
498
|
+
swap(losers_[pos].keyp, keyp);
|
|
499
|
+
}
|
|
500
|
+
else
|
|
501
|
+
{
|
|
502
|
+
// this candidate is smaller
|
|
503
|
+
}
|
|
504
|
+
pos /= 2;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
losers_[0].source = source;
|
|
508
|
+
losers_[0].keyp = keyp;
|
|
509
|
+
}
|
|
510
|
+
};
|
|
511
|
+
|
|
512
|
+
/*!
|
|
513
|
+
* Guarded loser tree, using pointers to the elements instead of copying them
|
|
514
|
+
* into the tree nodes.
|
|
515
|
+
*
|
|
516
|
+
* Unstable specialization of LoserTreeCopyBase.
|
|
517
|
+
*
|
|
518
|
+
* Guarding is done explicitly through one flag sup per element, inf is not
|
|
519
|
+
* needed due to a better initialization routine. This is a well-performing
|
|
520
|
+
* variant.
|
|
521
|
+
*/
|
|
522
|
+
template <typename ValueType, typename Comparator>
|
|
523
|
+
class LoserTreePointer</* Stable == */ true, ValueType, Comparator>
|
|
524
|
+
: public LoserTreePointerBase<ValueType, Comparator>
|
|
525
|
+
{
|
|
526
|
+
public:
|
|
527
|
+
using Super = LoserTreePointerBase<ValueType, Comparator>;
|
|
528
|
+
using Source = typename Super::Source;
|
|
529
|
+
|
|
530
|
+
protected:
|
|
531
|
+
using Super::cmp_;
|
|
532
|
+
using Super::k_;
|
|
533
|
+
using Super::losers_;
|
|
534
|
+
|
|
535
|
+
public:
|
|
536
|
+
explicit LoserTreePointer(Source k, const Comparator& cmp = Comparator())
|
|
537
|
+
: Super(k, cmp)
|
|
538
|
+
{
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
void delete_min_insert(const ValueType* keyp, bool sup)
|
|
542
|
+
{
|
|
543
|
+
using std::swap;
|
|
544
|
+
assert(sup == (keyp == nullptr));
|
|
545
|
+
unused(sup);
|
|
546
|
+
|
|
547
|
+
Source source = losers_[0].source;
|
|
548
|
+
for (Source pos = (k_ + source) / 2; pos > 0; pos /= 2)
|
|
549
|
+
{
|
|
550
|
+
// the smaller one gets promoted, ties are broken by source
|
|
551
|
+
if ((!keyp &&
|
|
552
|
+
(losers_[pos].keyp || losers_[pos].source < source)) ||
|
|
553
|
+
(keyp && losers_[pos].keyp &&
|
|
554
|
+
((cmp_(*losers_[pos].keyp, *keyp)) ||
|
|
555
|
+
(!cmp_(*keyp, *losers_[pos].keyp) &&
|
|
556
|
+
losers_[pos].source < source))))
|
|
557
|
+
{
|
|
558
|
+
// the other one is smaller
|
|
559
|
+
swap(losers_[pos].source, source);
|
|
560
|
+
swap(losers_[pos].keyp, keyp);
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
losers_[0].source = source;
|
|
565
|
+
losers_[0].keyp = keyp;
|
|
566
|
+
}
|
|
567
|
+
};
|
|
568
|
+
|
|
569
|
+
/*!
|
|
570
|
+
* Unguarded loser tree, copying the whole element into the tree structure.
|
|
571
|
+
*
|
|
572
|
+
* This is a base class for the LoserTreeCopyUnguarded\<true> and \<false>
|
|
573
|
+
* classes.
|
|
574
|
+
*
|
|
575
|
+
* No guarding is done, therefore not a single input sequence must run empty.
|
|
576
|
+
* This is a very fast variant.
|
|
577
|
+
*/
|
|
578
|
+
template <typename ValueType, typename Comparator = std::less<ValueType> >
|
|
579
|
+
class LoserTreeCopyUnguardedBase
|
|
580
|
+
{
|
|
581
|
+
public:
|
|
582
|
+
//! size of counters and array indexes
|
|
583
|
+
using Source = std::uint32_t;
|
|
584
|
+
|
|
585
|
+
//! sentinel for invalid or finished Sources
|
|
586
|
+
static constexpr Source invalid_ = Source(-1);
|
|
587
|
+
|
|
588
|
+
protected:
|
|
589
|
+
//! Internal representation of a loser tree player/node
|
|
590
|
+
struct Loser
|
|
591
|
+
{
|
|
592
|
+
//! index of source
|
|
593
|
+
Source source;
|
|
594
|
+
//! copy of key value of the element in this node
|
|
595
|
+
ValueType key;
|
|
596
|
+
};
|
|
597
|
+
|
|
598
|
+
// NOLINTBEGIN(cppcoreguidelines-non-private-member-variables-in-classes)
|
|
599
|
+
|
|
600
|
+
//! number of nodes
|
|
601
|
+
Source ik_;
|
|
602
|
+
//! log_2(ik) next greater power of 2
|
|
603
|
+
Source k_;
|
|
604
|
+
//! array containing loser tree nodes
|
|
605
|
+
SimpleVector<Loser> losers_;
|
|
606
|
+
//! the comparator object
|
|
607
|
+
Comparator cmp_;
|
|
608
|
+
|
|
609
|
+
// NOLINTEND(cppcoreguidelines-non-private-member-variables-in-classes)
|
|
610
|
+
public:
|
|
611
|
+
LoserTreeCopyUnguardedBase(Source k, const ValueType& sentinel,
|
|
612
|
+
const Comparator& cmp = Comparator())
|
|
613
|
+
: ik_(k), k_(round_up_to_power_of_two(ik_)), losers_(k_ * 2), cmp_(cmp)
|
|
614
|
+
{
|
|
615
|
+
for (Source i = 0; i < 2 * k_; i++)
|
|
616
|
+
{
|
|
617
|
+
losers_[i].source = invalid_;
|
|
618
|
+
losers_[i].key = sentinel;
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
//! return the index of the player with the smallest element.
|
|
623
|
+
Source min_source()
|
|
624
|
+
{
|
|
625
|
+
assert(losers_[0].source != invalid_ &&
|
|
626
|
+
"Data underrun in unguarded merging.");
|
|
627
|
+
return losers_[0].source;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
void insert_start(const ValueType* keyp, const Source& source, bool sup)
|
|
631
|
+
{
|
|
632
|
+
Source pos = k_ + source;
|
|
633
|
+
|
|
634
|
+
assert(pos < losers_.size());
|
|
635
|
+
assert(sup == (keyp == nullptr));
|
|
636
|
+
unused(sup);
|
|
637
|
+
|
|
638
|
+
losers_[pos].source = source;
|
|
639
|
+
losers_[pos].key = *keyp;
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
Source init_winner(const Source& root)
|
|
643
|
+
{
|
|
644
|
+
if (root >= k_)
|
|
645
|
+
return root;
|
|
646
|
+
|
|
647
|
+
Source left = init_winner(2 * root);
|
|
648
|
+
Source right = init_winner(2 * root + 1);
|
|
649
|
+
if (!cmp_(losers_[right].key, losers_[left].key))
|
|
650
|
+
{
|
|
651
|
+
// left one is less or equal
|
|
652
|
+
losers_[root] = losers_[right];
|
|
653
|
+
return left;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
// right one is less
|
|
657
|
+
losers_[root] = losers_[left];
|
|
658
|
+
return right;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
void init()
|
|
662
|
+
{
|
|
663
|
+
if (TLX_UNLIKELY(k_ == 0))
|
|
664
|
+
return;
|
|
665
|
+
losers_[0] = losers_[init_winner(1)];
|
|
666
|
+
}
|
|
667
|
+
};
|
|
668
|
+
|
|
669
|
+
template <bool Stable /* == false */, typename ValueType,
|
|
670
|
+
typename Comparator = std::less<ValueType> >
|
|
671
|
+
class LoserTreeCopyUnguarded
|
|
672
|
+
: public LoserTreeCopyUnguardedBase<ValueType, Comparator>
|
|
673
|
+
{
|
|
674
|
+
public:
|
|
675
|
+
using Super = LoserTreeCopyUnguardedBase<ValueType, Comparator>;
|
|
676
|
+
using Source = typename Super::Source;
|
|
677
|
+
|
|
678
|
+
private:
|
|
679
|
+
using Super::cmp_;
|
|
680
|
+
using Super::k_;
|
|
681
|
+
using Super::losers_;
|
|
682
|
+
|
|
683
|
+
public:
|
|
684
|
+
LoserTreeCopyUnguarded(Source k, const ValueType& sentinel,
|
|
685
|
+
const Comparator& cmp = Comparator())
|
|
686
|
+
: Super(k, sentinel, cmp)
|
|
687
|
+
{
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
// do not pass const reference since key will be used as local variable
|
|
691
|
+
void delete_min_insert(const ValueType* keyp, bool sup)
|
|
692
|
+
{
|
|
693
|
+
using std::swap;
|
|
694
|
+
assert(sup == (keyp == nullptr));
|
|
695
|
+
unused(sup);
|
|
696
|
+
|
|
697
|
+
Source source = losers_[0].source;
|
|
698
|
+
ValueType key = keyp ? *keyp : ValueType();
|
|
699
|
+
|
|
700
|
+
for (Source pos = (k_ + source) / 2; pos > 0; pos /= 2)
|
|
701
|
+
{
|
|
702
|
+
// the smaller one gets promoted
|
|
703
|
+
if (cmp_(losers_[pos].key, key))
|
|
704
|
+
{
|
|
705
|
+
// the other one is smaller
|
|
706
|
+
swap(losers_[pos].source, source);
|
|
707
|
+
swap(losers_[pos].key, key);
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
losers_[0].source = source;
|
|
712
|
+
losers_[0].key = key;
|
|
713
|
+
}
|
|
714
|
+
};
|
|
715
|
+
|
|
716
|
+
template <typename ValueType, typename Comparator>
|
|
717
|
+
class LoserTreeCopyUnguarded</* Stable == */ true, ValueType, Comparator>
|
|
718
|
+
: public LoserTreeCopyUnguardedBase<ValueType, Comparator>
|
|
719
|
+
{
|
|
720
|
+
public:
|
|
721
|
+
using Super = LoserTreeCopyUnguardedBase<ValueType, Comparator>;
|
|
722
|
+
using Source = typename Super::Source;
|
|
723
|
+
|
|
724
|
+
private:
|
|
725
|
+
using Super::cmp_;
|
|
726
|
+
using Super::k_;
|
|
727
|
+
using Super::losers_;
|
|
728
|
+
|
|
729
|
+
public:
|
|
730
|
+
LoserTreeCopyUnguarded(Source k, const ValueType& sentinel,
|
|
731
|
+
const Comparator& comp = Comparator())
|
|
732
|
+
: Super(k, sentinel, comp)
|
|
733
|
+
{
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
// do not pass const reference since key will be used as local variable
|
|
737
|
+
void delete_min_insert(const ValueType* keyp, bool sup)
|
|
738
|
+
{
|
|
739
|
+
using std::swap;
|
|
740
|
+
assert(sup == (keyp == nullptr));
|
|
741
|
+
unused(sup);
|
|
742
|
+
|
|
743
|
+
Source source = losers_[0].source;
|
|
744
|
+
ValueType key = keyp ? *keyp : ValueType();
|
|
745
|
+
|
|
746
|
+
for (Source pos = (k_ + source) / 2; pos > 0; pos /= 2)
|
|
747
|
+
{
|
|
748
|
+
if (cmp_(losers_[pos].key, key) ||
|
|
749
|
+
(!cmp_(key, losers_[pos].key) && losers_[pos].source < source))
|
|
750
|
+
{
|
|
751
|
+
// the other one is smaller
|
|
752
|
+
swap(losers_[pos].source, source);
|
|
753
|
+
swap(losers_[pos].key, key);
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
losers_[0].source = source;
|
|
758
|
+
losers_[0].key = key;
|
|
759
|
+
}
|
|
760
|
+
};
|
|
761
|
+
|
|
762
|
+
/*!
|
|
763
|
+
* Unguarded loser tree, keeping only pointers to the elements in the tree
|
|
764
|
+
* structure.
|
|
765
|
+
*
|
|
766
|
+
* This is a base class for the LoserTreePointerUnguarded\<true> and \<false>
|
|
767
|
+
* classes.
|
|
768
|
+
*
|
|
769
|
+
* No guarding is done, therefore not a single input sequence must run empty.
|
|
770
|
+
* This is a very fast variant.
|
|
771
|
+
*/
|
|
772
|
+
template <typename ValueType, typename Comparator = std::less<ValueType> >
|
|
773
|
+
class LoserTreePointerUnguardedBase
|
|
774
|
+
{
|
|
775
|
+
public:
|
|
776
|
+
//! size of counters and array indexes
|
|
777
|
+
using Source = std::uint32_t;
|
|
778
|
+
|
|
779
|
+
//! sentinel for invalid or finished Sources
|
|
780
|
+
static constexpr Source invalid_ = Source(-1);
|
|
781
|
+
|
|
782
|
+
protected:
|
|
783
|
+
//! Internal representation of a loser tree player/node
|
|
784
|
+
struct Loser
|
|
785
|
+
{
|
|
786
|
+
//! index of source
|
|
787
|
+
Source source;
|
|
788
|
+
//! copy of key value of the element in this node
|
|
789
|
+
const ValueType* keyp;
|
|
790
|
+
};
|
|
791
|
+
|
|
792
|
+
// NOLINTBEGIN(cppcoreguidelines-non-private-member-variables-in-classes)
|
|
793
|
+
|
|
794
|
+
//! number of nodes
|
|
795
|
+
Source ik_;
|
|
796
|
+
//! log_2(ik) next greater power of 2
|
|
797
|
+
Source k_;
|
|
798
|
+
//! array containing loser tree nodes
|
|
799
|
+
SimpleVector<Loser> losers_;
|
|
800
|
+
//! the comparator object
|
|
801
|
+
Comparator cmp_;
|
|
802
|
+
|
|
803
|
+
// NOLINTEND(cppcoreguidelines-non-private-member-variables-in-classes)
|
|
804
|
+
public:
|
|
805
|
+
LoserTreePointerUnguardedBase(const Source& k, const ValueType& sentinel,
|
|
806
|
+
const Comparator& cmp = Comparator())
|
|
807
|
+
: ik_(k), k_(round_up_to_power_of_two(ik_)), losers_(k_ * 2), cmp_(cmp)
|
|
808
|
+
{
|
|
809
|
+
for (Source i = ik_ - 1; i < k_; i++)
|
|
810
|
+
{
|
|
811
|
+
losers_[i + k_].source = invalid_;
|
|
812
|
+
losers_[i + k_].keyp = &sentinel;
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
// non construction-copyable
|
|
817
|
+
LoserTreePointerUnguardedBase(const LoserTreePointerUnguardedBase& other) =
|
|
818
|
+
delete;
|
|
819
|
+
// non copyable
|
|
820
|
+
LoserTreePointerUnguardedBase& operator=(
|
|
821
|
+
const LoserTreePointerUnguardedBase&) = delete;
|
|
822
|
+
|
|
823
|
+
Source min_source()
|
|
824
|
+
{
|
|
825
|
+
return losers_[0].source;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
void insert_start(const ValueType* keyp, const Source& source, bool sup)
|
|
829
|
+
{
|
|
830
|
+
Source pos = k_ + source;
|
|
831
|
+
|
|
832
|
+
assert(pos < losers_.size());
|
|
833
|
+
assert(sup == (keyp == nullptr));
|
|
834
|
+
unused(sup);
|
|
835
|
+
|
|
836
|
+
losers_[pos].source = source;
|
|
837
|
+
losers_[pos].keyp = keyp;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
Source init_winner(const Source& root)
|
|
841
|
+
{
|
|
842
|
+
if (root >= k_)
|
|
843
|
+
return root;
|
|
844
|
+
|
|
845
|
+
Source left = init_winner(2 * root);
|
|
846
|
+
Source right = init_winner(2 * root + 1);
|
|
847
|
+
if (!cmp_(*losers_[right].keyp, *losers_[left].keyp))
|
|
848
|
+
{
|
|
849
|
+
// left one is less or equal
|
|
850
|
+
losers_[root] = losers_[right];
|
|
851
|
+
return left;
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
// right one is less
|
|
855
|
+
losers_[root] = losers_[left];
|
|
856
|
+
return right;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
void init()
|
|
860
|
+
{
|
|
861
|
+
if (TLX_UNLIKELY(k_ == 0))
|
|
862
|
+
return;
|
|
863
|
+
losers_[0] = losers_[init_winner(1)];
|
|
864
|
+
}
|
|
865
|
+
};
|
|
866
|
+
|
|
867
|
+
template <bool Stable /* == false */, typename ValueType,
|
|
868
|
+
typename Comparator = std::less<ValueType> >
|
|
869
|
+
class LoserTreePointerUnguarded
|
|
870
|
+
: public LoserTreePointerUnguardedBase<ValueType, Comparator>
|
|
871
|
+
{
|
|
872
|
+
public:
|
|
873
|
+
using Super = LoserTreePointerUnguardedBase<ValueType, Comparator>;
|
|
874
|
+
using Source = typename Super::Source;
|
|
875
|
+
|
|
876
|
+
protected:
|
|
877
|
+
using Super::cmp_;
|
|
878
|
+
using Super::k_;
|
|
879
|
+
using Super::losers_;
|
|
880
|
+
|
|
881
|
+
public:
|
|
882
|
+
LoserTreePointerUnguarded(const Source& k, const ValueType& sentinel,
|
|
883
|
+
const Comparator& cmp = Comparator())
|
|
884
|
+
: Super(k, sentinel, cmp)
|
|
885
|
+
{
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
void delete_min_insert(const ValueType* keyp, bool sup)
|
|
889
|
+
{
|
|
890
|
+
using std::swap;
|
|
891
|
+
assert(sup == (keyp == nullptr));
|
|
892
|
+
unused(sup);
|
|
893
|
+
|
|
894
|
+
Source source = losers_[0].source;
|
|
895
|
+
for (Source pos = (k_ + source) / 2; pos > 0; pos /= 2)
|
|
896
|
+
{
|
|
897
|
+
// the smaller one gets promoted
|
|
898
|
+
if (cmp_(*losers_[pos].keyp, *keyp))
|
|
899
|
+
{
|
|
900
|
+
// the other one is smaller
|
|
901
|
+
swap(losers_[pos].source, source);
|
|
902
|
+
swap(losers_[pos].keyp, keyp);
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
losers_[0].source = source;
|
|
907
|
+
losers_[0].keyp = keyp;
|
|
908
|
+
}
|
|
909
|
+
};
|
|
910
|
+
|
|
911
|
+
template <typename ValueType, typename Comparator>
|
|
912
|
+
class LoserTreePointerUnguarded</* Stable == */ true, ValueType, Comparator>
|
|
913
|
+
: public LoserTreePointerUnguardedBase<ValueType, Comparator>
|
|
914
|
+
{
|
|
915
|
+
public:
|
|
916
|
+
using Super = LoserTreePointerUnguardedBase<ValueType, Comparator>;
|
|
917
|
+
using Source = typename Super::Source;
|
|
918
|
+
|
|
919
|
+
protected:
|
|
920
|
+
using Super::cmp_;
|
|
921
|
+
using Super::k_;
|
|
922
|
+
using Super::losers_;
|
|
923
|
+
|
|
924
|
+
public:
|
|
925
|
+
LoserTreePointerUnguarded(const Source& k, const ValueType& sentinel,
|
|
926
|
+
const Comparator& cmp = Comparator())
|
|
927
|
+
: Super(k, sentinel, cmp)
|
|
928
|
+
{
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
void delete_min_insert(const ValueType* keyp, bool sup)
|
|
932
|
+
{
|
|
933
|
+
using std::swap;
|
|
934
|
+
assert(sup == (keyp == nullptr));
|
|
935
|
+
unused(sup);
|
|
936
|
+
|
|
937
|
+
Source source = losers_[0].source;
|
|
938
|
+
for (Source pos = (k_ + source) / 2; pos > 0; pos /= 2)
|
|
939
|
+
{
|
|
940
|
+
// the smaller one gets promoted, ties are broken by source
|
|
941
|
+
if (cmp_(*losers_[pos].keyp, *keyp) ||
|
|
942
|
+
(!cmp_(*keyp, *losers_[pos].keyp) &&
|
|
943
|
+
losers_[pos].source < source))
|
|
944
|
+
{
|
|
945
|
+
// the other one is smaller
|
|
946
|
+
swap(losers_[pos].source, source);
|
|
947
|
+
swap(losers_[pos].keyp, keyp);
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
losers_[0].source = source;
|
|
952
|
+
losers_[0].keyp = keyp;
|
|
953
|
+
}
|
|
954
|
+
};
|
|
955
|
+
|
|
956
|
+
/******************************************************************************/
|
|
957
|
+
// LoserTreeSwitch selects loser tree by size of value type
|
|
958
|
+
|
|
959
|
+
template <bool Stable, typename ValueType, typename Comparator,
|
|
960
|
+
typename Enable = void>
|
|
961
|
+
class LoserTreeSwitch
|
|
962
|
+
{
|
|
963
|
+
public:
|
|
964
|
+
using Type = LoserTreePointer<Stable, ValueType, Comparator>;
|
|
965
|
+
};
|
|
966
|
+
|
|
967
|
+
template <bool Stable, typename ValueType, typename Comparator>
|
|
968
|
+
class LoserTreeSwitch<
|
|
969
|
+
Stable, ValueType, Comparator,
|
|
970
|
+
typename std::enable_if<sizeof(ValueType) <= 2 * sizeof(size_t)>::type>
|
|
971
|
+
{
|
|
972
|
+
public:
|
|
973
|
+
using Type = LoserTreeCopy<Stable, ValueType, Comparator>;
|
|
974
|
+
};
|
|
975
|
+
|
|
976
|
+
template <bool Stable, typename ValueType, typename Comparator>
|
|
977
|
+
using LoserTree = typename LoserTreeSwitch<Stable, ValueType, Comparator>::Type;
|
|
978
|
+
|
|
979
|
+
/*----------------------------------------------------------------------------*/
|
|
980
|
+
|
|
981
|
+
template <bool Stable, typename ValueType, typename Comparator,
|
|
982
|
+
typename Enable = void>
|
|
983
|
+
class LoserTreeUnguardedSwitch
|
|
984
|
+
{
|
|
985
|
+
public:
|
|
986
|
+
using Type = LoserTreePointerUnguarded<Stable, ValueType, Comparator>;
|
|
987
|
+
};
|
|
988
|
+
|
|
989
|
+
template <bool Stable, typename ValueType, typename Comparator>
|
|
990
|
+
class LoserTreeUnguardedSwitch<
|
|
991
|
+
Stable, ValueType, Comparator,
|
|
992
|
+
typename std::enable_if<sizeof(ValueType) <= 2 * sizeof(size_t)>::type>
|
|
993
|
+
{
|
|
994
|
+
public:
|
|
995
|
+
using Type = LoserTreeCopyUnguarded<Stable, ValueType, Comparator>;
|
|
996
|
+
};
|
|
997
|
+
|
|
998
|
+
template <bool Stable, typename ValueType, typename Comparator>
|
|
999
|
+
using LoserTreeUnguarded =
|
|
1000
|
+
typename LoserTreeUnguardedSwitch<Stable, ValueType, Comparator>::Type;
|
|
1001
|
+
|
|
1002
|
+
//! \}
|
|
1003
|
+
//! \}
|
|
1004
|
+
|
|
1005
|
+
} // namespace tlx
|
|
1006
|
+
|
|
1007
|
+
#endif // !TLX_CONTAINER_LOSER_TREE_HEADER
|
|
1008
|
+
|
|
1009
|
+
/******************************************************************************/
|