diff options
Diffstat (limited to 'staging_vespalib/src/vespa/vespalib/metrics/point_builder.cpp')
-rw-r--r-- | staging_vespalib/src/vespa/vespalib/metrics/point_builder.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/staging_vespalib/src/vespa/vespalib/metrics/point_builder.cpp b/staging_vespalib/src/vespa/vespalib/metrics/point_builder.cpp new file mode 100644 index 00000000000..7ee4ca35d0e --- /dev/null +++ b/staging_vespalib/src/vespa/vespalib/metrics/point_builder.cpp @@ -0,0 +1,52 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include "point.h" +#include "metrics_manager.h" + +namespace vespalib { +namespace metrics { + +PointBuilder::PointBuilder(std::shared_ptr<MetricsManager> m) + : _owner(std::move(m)), _map() +{} + +PointBuilder::PointBuilder(std::shared_ptr<MetricsManager> m, + const PointMap::BackingMap ©From) + : _owner(std::move(m)), _map(copyFrom) +{} + +PointBuilder && +PointBuilder::bind(Dimension dimension, Label label) && +{ + _map.erase(dimension); + _map.emplace(dimension, label); + return std::move(*this); +} + +PointBuilder && +PointBuilder::bind(Dimension dimension, LabelValue label) && +{ + Label c = _owner->label(label); + return std::move(*this).bind(dimension, c); +} + +PointBuilder && +PointBuilder::bind(DimensionName dimension, LabelValue label) && +{ + Dimension a = _owner->dimension(dimension); + Label c = _owner->label(label); + return std::move(*this).bind(a, c); +} + +Point +PointBuilder::build() +{ + return _owner->pointFrom(PointMap::BackingMap(_map)); +} + +PointBuilder::operator Point() && +{ + return _owner->pointFrom(std::move(_map)); +} + +} // namespace vespalib::metrics +} // namespace vespalib |