QGIS API Documentation 3.39.0-Master (d85f3c2a281)
Loading...
Searching...
No Matches
qgsnativealgorithms.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsnativealgorithms.cpp
3 ---------------------
4 begin : April 2017
5 copyright : (C) 2017 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#include "qgsnativealgorithms.h"
19#include "qgsruntimeprofiler.h"
31#include "qgsalgorithmaspect.h"
39#include "qgsalgorithmbuffer.h"
45#include "qgsalgorithmclip.h"
65#include "qgsalgorithmdrape.h"
75#include "qgsalgorithmexplode.h"
95#include "qgsalgorithmfilter.h"
100#include "qgsalgorithmforcerhr.h"
104#if QT_CONFIG(process)
106#endif
107#include "qgsalgorithmgrid.h"
141#include "qgsalgorithmpackage.h"
184#include "qgsalgorithmrotate.h"
189#include "qgsalgorithmsavelog.h"
203#include "qgsalgorithmsimplify.h"
205#include "qgsalgorithmslope.h"
206#include "qgsalgorithmsmooth.h"
219#include "qgsalgorithmswapxy.h"
223#include "qgsalgorithmtransect.h"
227#include "qgsalgorithmunion.h"
235#include "qgsalgorithmxyztiles.h"
242#include "qgsstylealgorithms.h"
243
245
247 : QgsProcessingProvider( parent )
248{}
249
250QIcon QgsNativeAlgorithms::icon() const
251{
252 return QgsApplication::getThemeIcon( QStringLiteral( "/providerQgis.svg" ) );
253}
254
256{
257 return QgsApplication::iconPath( QStringLiteral( "providerQgis.svg" ) );
258}
259
260QString QgsNativeAlgorithms::id() const
261{
262 return QStringLiteral( "native" );
263}
264
265QString QgsNativeAlgorithms::helpId() const
266{
267 return QStringLiteral( "qgis" );
268}
269
270QString QgsNativeAlgorithms::name() const
271{
272 return tr( "QGIS (native c++)" );
273}
274
276{
277 return true;
278}
279
281{
283}
284
286{
287 const QgsScopedRuntimeProfile profile( QObject::tr( "QGIS native provider" ) );
288 addAlgorithm( new QgsAddIncrementalFieldAlgorithm() );
289 addAlgorithm( new QgsAddTableFieldAlgorithm() );
290 addAlgorithm( new QgsAddXYFieldsAlgorithm() );
291 addAlgorithm( new QgsAddUniqueValueIndexAlgorithm() );
292 addAlgorithm( new QgsAffineTransformationAlgorithm() );
293 addAlgorithm( new QgsAggregateAlgorithm() );
294 addAlgorithm( new QgsAlignRastersAlgorithm() );
295 addAlgorithm( new QgsAlignSingleRasterAlgorithm() );
296 addAlgorithm( new QgsAngleToNearestAlgorithm() );
297 addAlgorithm( new QgsApplyLayerStyleAlgorithm() );
298 addAlgorithm( new QgsArrayTranslatedFeaturesAlgorithm() );
299 addAlgorithm( new QgsAspectAlgorithm() );
300 addAlgorithm( new QgsAssignProjectionAlgorithm() );
301 addAlgorithm( new QgsAttributeIndexAlgorithm() );
302 addAlgorithm( new QgsB3DMToGltfAlgorithm() );
303 addAlgorithm( new QgsBasicStatisticsAlgorithm() );
304 addAlgorithm( new QgsBatchNominatimGeocodeAlgorithm() );
305 addAlgorithm( new QgsBookmarksToLayerAlgorithm() );
306 addAlgorithm( new QgsBoundaryAlgorithm() );
307 addAlgorithm( new QgsBoundingBoxAlgorithm() );
308 addAlgorithm( new QgsBufferAlgorithm() );
309 addAlgorithm( new QgsCalculateExpressionAlgorithm() );
310 addAlgorithm( new QgsCalculateVectorOverlapsAlgorithm() );
311 addAlgorithm( new QgsCategorizeUsingStyleAlgorithm() );
312 addAlgorithm( new QgsCellStatisticsAlgorithm() );
313 addAlgorithm( new QgsCellStatisticsPercentileAlgorithm() );
314 addAlgorithm( new QgsCellStatisticsPercentRankFromRasterAlgorithm() );
315 addAlgorithm( new QgsCellStatisticsPercentRankFromValueAlgorithm() );
316 addAlgorithm( new QgsCentroidAlgorithm() );
317 addAlgorithm( new QgsClipAlgorithm() );
318 addAlgorithm( new QgsCollectAlgorithm() );
319 addAlgorithm( new QgsCombineStylesAlgorithm() );
320 addAlgorithm( new QgsConcaveHullAlgorithm() );
321 addAlgorithm( new QgsConditionalBranchAlgorithm() );
322 addAlgorithm( new QgsConstantRasterAlgorithm() );
323 addAlgorithm( new QgsConvertToCurvesAlgorithm() );
324 addAlgorithm( new QgsConvexHullAlgorithm() );
325 addAlgorithm( new QgsCoverageSimplifyAlgorithm() );
326 addAlgorithm( new QgsCoverageUnionAlgorithm() );
327 addAlgorithm( new QgsCoverageValidateAlgorithm() );
328 addAlgorithm( new QgsCreateDirectoryAlgorithm() );
329 addAlgorithm( new QgsDbscanClusteringAlgorithm() );
330 addAlgorithm( new QgsDelaunayTriangulationAlgorithm() );
331 addAlgorithm( new QgsDeleteDuplicateGeometriesAlgorithm() );
332 addAlgorithm( new QgsDetectVectorChangesAlgorithm() );
333 addAlgorithm( new QgsDifferenceAlgorithm() );
334 addAlgorithm( new QgsDissolveAlgorithm() );
335 addAlgorithm( new QgsDownloadVectorTilesAlgorithm() );
336 addAlgorithm( new QgsDrapeToMAlgorithm() );
337 addAlgorithm( new QgsDrapeToZAlgorithm() );
338 addAlgorithm( new QgsDropTableFieldsAlgorithm() );
339 addAlgorithm( new QgsDropGeometryAlgorithm() );
340 addAlgorithm( new QgsDropMZValuesAlgorithm() );
341 addAlgorithm( new QgsDxfExportAlgorithm() );
342 addAlgorithm( new QgsExecutePostgisQueryAlgorithm() );
343 addAlgorithm( new QgsExecuteRegisteredSpatialiteQueryAlgorithm() );
344 addAlgorithm( new QgsExecuteSpatialiteQueryAlgorithm() );
345 addAlgorithm( new QgsExplodeAlgorithm() );
346 addAlgorithm( new QgsExplodeHstoreAlgorithm() );
347 addAlgorithm( new QgsExportLayersInformationAlgorithm() );
348 addAlgorithm( new QgsExportMeshVerticesAlgorithm );
349 addAlgorithm( new QgsExportMeshFacesAlgorithm );
350 addAlgorithm( new QgsExportMeshEdgesAlgorithm );
351 addAlgorithm( new QgsExportMeshOnGridAlgorithm );
352 addAlgorithm( new QgsExportToPostgresqlAlgorithm );
353 addAlgorithm( new QgsExportToSpreadsheetAlgorithm() );
354 addAlgorithm( new QgsExtendLinesAlgorithm() );
355 addAlgorithm( new QgsExtentFromLayerAlgorithm() );
356 addAlgorithm( new QgsExtentToLayerAlgorithm() );
357 addAlgorithm( new QgsExtractBinaryFieldAlgorithm() );
358 addAlgorithm( new QgsExtractByAttributeAlgorithm() );
359 addAlgorithm( new QgsExtractByExpressionAlgorithm() );
360 addAlgorithm( new QgsExtractByExtentAlgorithm() );
361 addAlgorithm( new QgsExtractByLocationAlgorithm() );
362 addAlgorithm( new QgsExtractLabelsAlgorithm() );
363 addAlgorithm( new QgsExtractMValuesAlgorithm() );
364 addAlgorithm( new QgsExtractVerticesAlgorithm() );
365 addAlgorithm( new QgsExtractSpecificVerticesAlgorithm() );
366 addAlgorithm( new QgsExtractWithinDistanceAlgorithm() );
367 addAlgorithm( new QgsExtractZValuesAlgorithm() );
368 addAlgorithm( new QgsFieldCalculatorAlgorithm() );
369 addAlgorithm( new QgsFileDownloaderAlgorithm() );
370 addAlgorithm( new QgsFillNoDataAlgorithm() );
371 addAlgorithm( new QgsFilterAlgorithm() );
372 addAlgorithm( new QgsFilterByGeometryAlgorithm() );
373 addAlgorithm( new QgsFilterByLayerTypeAlgorithm() );
374 addAlgorithm( new QgsFilterVerticesByM() );
375 addAlgorithm( new QgsFilterVerticesByZ() );
376 addAlgorithm( new QgsFixGeometriesAlgorithm() );
377 addAlgorithm( new QgsFlattenRelationshipsAlgorithm() );
378 addAlgorithm( new QgsForceRHRAlgorithm() );
379 addAlgorithm( new QgsFuzzifyRasterLinearMembershipAlgorithm() );
380 addAlgorithm( new QgsFuzzifyRasterPowerMembershipAlgorithm() );
381 addAlgorithm( new QgsFuzzifyRasterLargeMembershipAlgorithm() );
382 addAlgorithm( new QgsFuzzifyRasterSmallMembershipAlgorithm() );
383 addAlgorithm( new QgsFuzzifyRasterGaussianMembershipAlgorithm() );
384 addAlgorithm( new QgsFuzzifyRasterNearMembershipAlgorithm() );
385 addAlgorithm( new QgsGeometryByExpressionAlgorithm() );
386 addAlgorithm( new QgsGltfToVectorFeaturesAlgorithm() );
387#if QT_CONFIG(process)
388 addAlgorithm( new QgsConvertGpxFeatureTypeAlgorithm() );
389 addAlgorithm( new QgsConvertGpsDataAlgorithm() );
390 addAlgorithm( new QgsDownloadGpsDataAlgorithm() );
391 addAlgorithm( new QgsUploadGpsDataAlgorithm() );
392#endif
393 addAlgorithm( new QgsGridAlgorithm() );
394 addAlgorithm( new QgsHillshadeAlgorithm() );
395 addAlgorithm( new QgsImportPhotosAlgorithm() );
396 addAlgorithm( new QgsInterpolatePointAlgorithm() );
397 addAlgorithm( new QgsIntersectionAlgorithm() );
398 addAlgorithm( new QgsJoinByAttributeAlgorithm() );
399 addAlgorithm( new QgsJoinByLocationAlgorithm() );
400 addAlgorithm( new QgsJoinByLocationSummaryAlgorithm() );
401 addAlgorithm( new QgsJoinByNearestAlgorithm() );
402 addAlgorithm( new QgsJoinWithLinesAlgorithm() );
403 addAlgorithm( new QgsKeepNBiggestPartsAlgorithm() );
404 addAlgorithm( new QgsKMeansClusteringAlgorithm() );
405 addAlgorithm( new QgsLayerToBookmarksAlgorithm() );
406 addAlgorithm( new QgsLayoutMapExtentToLayerAlgorithm() );
407 addAlgorithm( new QgsLayoutAtlasToImageAlgorithm() );
408 addAlgorithm( new QgsLayoutAtlasToPdfAlgorithm() );
409 addAlgorithm( new QgsLayoutAtlasToMultiplePdfAlgorithm() );
410 addAlgorithm( new QgsLayoutToImageAlgorithm() );
411 addAlgorithm( new QgsLayoutToPdfAlgorithm() );
412 addAlgorithm( new QgsLineDensityAlgorithm() );
413 addAlgorithm( new QgsLineIntersectionAlgorithm() );
414 addAlgorithm( new QgsLineSubstringAlgorithm() );
415 addAlgorithm( new QgsLoadLayerAlgorithm() );
416 addAlgorithm( new QgsMeanCoordinatesAlgorithm() );
417 addAlgorithm( new QgsMergeLinesAlgorithm() );
418 addAlgorithm( new QgsMergeVectorAlgorithm() );
419 addAlgorithm( new QgsMeshRasterizeAlgorithm );
420 addAlgorithm( new QgsMeshContoursAlgorithm );
421 addAlgorithm( new QgsMeshExportCrossSection );
422 addAlgorithm( new QgsMeshExportTimeSeries );
423 addAlgorithm( new QgsMinimumEnclosingCircleAlgorithm() );
424 addAlgorithm( new QgsMultiDifferenceAlgorithm() );
425 addAlgorithm( new QgsMultiIntersectionAlgorithm() );
426 addAlgorithm( new QgsMultipartToSinglepartAlgorithm() );
427 addAlgorithm( new QgsMultiRingConstantBufferAlgorithm() );
428 addAlgorithm( new QgsMultiUnionAlgorithm() );
429 addAlgorithm( new QgsNearestNeighbourAnalysisAlgorithm() );
430 addAlgorithm( new QgsOffsetLinesAlgorithm() );
431 addAlgorithm( new QgsOrderByExpressionAlgorithm() );
432 addAlgorithm( new QgsOrientedMinimumBoundingBoxAlgorithm() );
433 addAlgorithm( new QgsOrthogonalizeAlgorithm() );
434 addAlgorithm( new QgsPackageAlgorithm() );
435 addAlgorithm( new QgsPixelCentroidsFromPolygonsAlgorithm() );
436 addAlgorithm( new QgsCreateArrayOffsetLinesAlgorithm() );
437 addAlgorithm( new QgsPointsInPolygonAlgorithm() );
438 addAlgorithm( new QgsPointOnSurfaceAlgorithm() );
439 addAlgorithm( new QgsPointToLayerAlgorithm() );
440 addAlgorithm( new QgsPointsAlongGeometryAlgorithm() );
441 addAlgorithm( new QgsPointsLayerFromTableAlgorithm() );
442 addAlgorithm( new QgsPointsToPathsAlgorithm() );
443 addAlgorithm( new QgsPoleOfInaccessibilityAlgorithm() );
444 addAlgorithm( new QgsPolygonizeAlgorithm() );
445 addAlgorithm( new QgsProjectPointCartesianAlgorithm() );
446 addAlgorithm( new QgsPromoteToMultipartAlgorithm() );
447 addAlgorithm( new QgsRaiseExceptionAlgorithm() );
448 addAlgorithm( new QgsRaiseWarningAlgorithm() );
449 addAlgorithm( new QgsRaiseMessageAlgorithm() );
450 addAlgorithm( new QgsRandomBinomialRasterAlgorithm() );
451 addAlgorithm( new QgsRandomExponentialRasterAlgorithm() );
452 addAlgorithm( new QgsRandomExtractAlgorithm() );
453 addAlgorithm( new QgsRandomGammaRasterAlgorithm() );
454 addAlgorithm( new QgsRandomGeometricRasterAlgorithm() );
455 addAlgorithm( new QgsRandomNegativeBinomialRasterAlgorithm() );
456 addAlgorithm( new QgsRandomNormalRasterAlgorithm() );
457 addAlgorithm( new QgsRandomPointsExtentAlgorithm() );
458 addAlgorithm( new QgsRandomPointsInPolygonsAlgorithm() );
459 addAlgorithm( new QgsRandomPointsOnLinesAlgorithm() );
460 addAlgorithm( new QgsRandomPoissonRasterAlgorithm() );
461 addAlgorithm( new QgsRandomUniformRasterAlgorithm() );
462 addAlgorithm( new QgsRasterCalculatorAlgorithm() );
463 addAlgorithm( new QgsRasterCalculatorModelerAlgorithm() );
464 addAlgorithm( new QgsRasterDtmSlopeBasedFilterAlgorithm() );
465 addAlgorithm( new QgsRasterFrequencyByEqualOperatorAlgorithm() );
466 addAlgorithm( new QgsRasterFrequencyByGreaterThanOperatorAlgorithm() );
467 addAlgorithm( new QgsRasterFrequencyByLessThanOperatorAlgorithm() );
468 addAlgorithm( new QgsRasterLayerPropertiesAlgorithm() );
469 addAlgorithm( new QgsRasterLayerUniqueValuesReportAlgorithm() );
470 addAlgorithm( new QgsRasterLayerZonalStatsAlgorithm() );
471 addAlgorithm( new QgsRasterLogicalAndAlgorithm() );
472 addAlgorithm( new QgsRasterLogicalOrAlgorithm() );
473 addAlgorithm( new QgsRasterizeAlgorithm() );
474 addAlgorithm( new QgsRasterPixelsToPointsAlgorithm() );
475 addAlgorithm( new QgsRasterPixelsToPolygonsAlgorithm() );
476 addAlgorithm( new QgsRasterSamplingAlgorithm() );
477 addAlgorithm( new QgsRasterStackHighestPositionAlgorithm() );
478 addAlgorithm( new QgsRasterStackLowestPositionAlgorithm() );
479 addAlgorithm( new QgsRasterStatisticsAlgorithm() );
480 addAlgorithm( new QgsRasterSurfaceVolumeAlgorithm() );
481 addAlgorithm( new QgsAlgorithmRemoveDuplicateVertices() );
482 addAlgorithm( new QgsReclassifyByLayerAlgorithm() );
483 addAlgorithm( new QgsReclassifyByTableAlgorithm() );
484 addAlgorithm( new QgsRectanglesOvalsDiamondsAlgorithm() );
485 addAlgorithm( new QgsRefactorFieldsAlgorithm() );
486 addAlgorithm( new QgsRemoveDuplicatesByAttributeAlgorithm() );
487 addAlgorithm( new QgsRemoveHolesAlgorithm() );
488 addAlgorithm( new QgsRemoveNullGeometryAlgorithm() );
489 addAlgorithm( new QgsRenameLayerAlgorithm() );
490 addAlgorithm( new QgsRenameTableFieldAlgorithm() );
491 addAlgorithm( new QgsRepairShapefileAlgorithm() );
492 addAlgorithm( new QgsRescaleRasterAlgorithm() );
493 addAlgorithm( new QgsRetainTableFieldsAlgorithm() );
494 addAlgorithm( new QgsReverseLineDirectionAlgorithm() );
495 addAlgorithm( new QgsRotateFeaturesAlgorithm() );
496 addAlgorithm( new QgsRoundnessAlgorithm() );
497 addAlgorithm( new QgsRoundRasterValuesAlgorithm() );
498 addAlgorithm( new QgsRuggednessAlgorithm() );
499 addAlgorithm( new QgsSaveFeaturesAlgorithm() );
500 addAlgorithm( new QgsSaveLogToFileAlgorithm() );
501 addAlgorithm( new QgsSaveSelectedFeatures() );
502 addAlgorithm( new QgsSegmentizeByMaximumAngleAlgorithm() );
503 addAlgorithm( new QgsSegmentizeByMaximumDistanceAlgorithm() );
504 addAlgorithm( new QgsSelectByLocationAlgorithm() );
505 addAlgorithm( new QgsSelectWithinDistanceAlgorithm() );
506 addAlgorithm( new QgsServiceAreaFromLayerAlgorithm() );
507 addAlgorithm( new QgsServiceAreaFromPointAlgorithm() );
508 addAlgorithm( new QgsSetLayerEncodingAlgorithm() );
509 addAlgorithm( new QgsSetMValueAlgorithm() );
510 addAlgorithm( new QgsSetProjectVariableAlgorithm() );
511 addAlgorithm( new QgsSetZValueAlgorithm() );
512 addAlgorithm( new QgsShapefileEncodingInfoAlgorithm() );
513 addAlgorithm( new QgsShortestLineAlgorithm() );
514 addAlgorithm( new QgsShortestPathLayerToPointAlgorithm() );
515 addAlgorithm( new QgsShortestPathPointToLayerAlgorithm() );
516 addAlgorithm( new QgsShortestPathPointToPointAlgorithm() );
517 addAlgorithm( new QgsSimplifyAlgorithm() );
518 addAlgorithm( new QgsSingleSidedBufferAlgorithm() );
519 addAlgorithm( new QgsSlopeAlgorithm() );
520 addAlgorithm( new QgsSmoothAlgorithm() );
521 addAlgorithm( new QgsSnapGeometriesAlgorithm() );
522 addAlgorithm( new QgsSnapToGridAlgorithm() );
523 addAlgorithm( new QgsSpatialIndexAlgorithm() );
524 addAlgorithm( new QgsSplitFeaturesByAttributeCharacterAlgorithm() );
525 addAlgorithm( new QgsSplitGeometryAtAntimeridianAlgorithm() );
526 addAlgorithm( new QgsSplitLinesByLengthAlgorithm() );
527 addAlgorithm( new QgsSplitVectorLayerAlgorithm() );
528 addAlgorithm( new QgsSplitWithLinesAlgorithm() );
529 addAlgorithm( new QgsStDbscanClusteringAlgorithm() );
530 addAlgorithm( new QgsStringConcatenationAlgorithm() );
531 addAlgorithm( new QgsStyleFromProjectAlgorithm() );
532 addAlgorithm( new QgsSubdivideAlgorithm() );
533 addAlgorithm( new QgsSumLineLengthAlgorithm() );
534 addAlgorithm( new QgsSwapXYAlgorithm() );
535 addAlgorithm( new QgsSymmetricalDifferenceAlgorithm() );
536 addAlgorithm( new QgsTaperedBufferAlgorithm() );
537 addAlgorithm( new QgsTinMeshCreationAlgorithm() );
538 addAlgorithm( new QgsTransectAlgorithm() );
539 addAlgorithm( new QgsTransferAnnotationsFromMainAlgorithm() );
540 addAlgorithm( new QgsTransformAlgorithm() );
541 addAlgorithm( new QgsTranslateAlgorithm() );
542 addAlgorithm( new QgsTruncateTableAlgorithm() );
543 addAlgorithm( new QgsUnionAlgorithm() );
544 addAlgorithm( new QgsOpenUrlAlgorithm() );
545 addAlgorithm( new QgsVariableWidthBufferByMAlgorithm() );
546 addAlgorithm( new QgsVirtualRasterCalculatorAlgorithm() );
547 addAlgorithm( new QgsVirtualRasterCalculatorModelerAlgorithm() );
548 addAlgorithm( new QgsVoronoiPolygonsAlgorithm() );
549 addAlgorithm( new QgsWedgeBuffersAlgorithm() );
550 addAlgorithm( new QgsWriteVectorTilesXyzAlgorithm() );
551 addAlgorithm( new QgsWriteVectorTilesMbtilesAlgorithm() );
552 addAlgorithm( new QgsXyzTilesDirectoryAlgorithm() );
553 addAlgorithm( new QgsXyzTilesMbtilesAlgorithm() );
554 addAlgorithm( new QgsZonalHistogramAlgorithm() );
555 addAlgorithm( new QgsZonalStatisticsAlgorithm() );
556 addAlgorithm( new QgsZonalStatisticsFeatureBasedAlgorithm() );
557 addAlgorithm( new QgsPolygonsToLinesAlgorithm() );
558 addAlgorithm( new QgsDensifyGeometriesByIntervalAlgorithm() );
559 addAlgorithm( new QgsDensifyGeometriesByCountAlgorithm() );
560}
561
@ CompatibleWithVirtualRaster
The processing provider's algorithms can work with QGIS virtualraster data provider.
QFlags< ProcessingProviderFlag > ProcessingProviderFlags
Flags indicating how and when an processing provider operates and should be exposed to users.
Definition qgis.h:3280
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static QString iconPath(const QString &iconFile)
Returns path to the desired icon file.
void loadAlgorithms() override
Loads all algorithms belonging to this provider.
QString helpId() const override
Returns the provider help id string, used for creating QgsHelp urls for algorithms belong to this pro...
QString id() const override
Returns the unique provider id, used for identifying the provider.
bool supportsNonFileBasedOutput() const override
Returns true if the provider supports non-file based outputs (such as memory layers or direct databas...
QString svgIconPath() const override
Returns a path to an SVG version of the provider's icon.
QString name() const override
Returns the provider name, which is used to describe the provider within the GUI.
QIcon icon() const override
Returns an icon for the provider.
QgsNativeAlgorithms(QObject *parent=nullptr)
Constructor for QgsNativeAlgorithms.
Qgis::ProcessingProviderFlags flags() const override
Returns the flags indicating how and when the provider operates and should be exposed to users.
Abstract base class for processing providers.
bool addAlgorithm(QgsProcessingAlgorithm *algorithm)
Adds an algorithm to the provider.
Scoped object for logging of the runtime for a single operation or group of operations.