summaryrefslogtreecommitdiffstats
path: root/staging_vespalib/src/vespa/vespalib/metrics/point_builder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'staging_vespalib/src/vespa/vespalib/metrics/point_builder.cpp')
-rw-r--r--staging_vespalib/src/vespa/vespalib/metrics/point_builder.cpp52
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 &copyFrom)
+ : _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