summaryrefslogtreecommitdiffstats
path: root/searchcommon
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2022-03-30 12:10:29 +0000
committerGeir Storli <geirst@yahooinc.com>2022-03-30 12:10:29 +0000
commitb848f308c12f71ef90d829727ddcb838415dda97 (patch)
tree9bd0f45ba2a2484ef6c14019ba2467d108715156 /searchcommon
parent223f1293837db59fdf14e627ddd623470351eeb9 (diff)
Implement IMultiValueAttribute interface in MultiValueAttribute.
Diffstat (limited to 'searchcommon')
-rw-r--r--searchcommon/src/vespa/searchcommon/attribute/i_multi_value_attribute.h44
-rw-r--r--searchcommon/src/vespa/searchcommon/attribute/i_multi_value_read_view.h7
2 files changed, 37 insertions, 14 deletions
diff --git a/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_attribute.h b/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_attribute.h
index 5831380eaae..6c3a8cbd2da 100644
--- a/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_attribute.h
+++ b/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_attribute.h
@@ -13,20 +13,38 @@ namespace search::attribute {
* Otherwise a nullptr is returned.
*/
class IMultiValueAttribute {
+public:
+ template<typename MultiValueType>
+ class Tag {};
+
+ template<typename T>
+ using ArrayTag = Tag<search::multivalue::Value<T>>;
+
+ using ArrayEnumTag = ArrayTag<vespalib::datastore::AtomicEntryRef>;
+
+ template<typename T>
+ using WeightedSetTag = Tag<search::multivalue::WeightedValue<T>>;
+
+ using WeightedSetEnumTag = WeightedSetTag<vespalib::datastore::AtomicEntryRef>;
+
virtual ~IMultiValueAttribute() {}
- virtual const IArrayReadView<int8_t>* as_int8_array() const = 0;
- virtual const IArrayReadView<int32_t>* as_int32_array() const = 0;
- virtual const IArrayReadView<int64_t>* as_int64_array() const = 0;
- virtual const IArrayReadView<float>* as_float_array() const = 0;
- virtual const IArrayReadView<double>* as_double_array() const = 0;
-
- virtual const IWeightedSetReadView<int8_t>* as_int8_wset() const = 0;
- virtual const IWeightedSetReadView<int32_t>* as_int32_wset() const = 0;
- virtual const IWeightedSetReadView<int64_t>* as_int64_wset() const = 0;
- virtual const IWeightedSetReadView<float>* as_float_wset() const = 0;
- virtual const IWeightedSetReadView<double>* as_double_wset() const = 0;
-
- virtual const IWeightedSetEnumReadView* as_enum_wset() const = 0;
+
+ virtual const IArrayReadView<int8_t>* as_read_view(ArrayTag<int8_t>) const { return nullptr; }
+ virtual const IArrayReadView<int16_t>* as_read_view(ArrayTag<int16_t>) const { return nullptr; }
+ virtual const IArrayReadView<int32_t>* as_read_view(ArrayTag<int32_t>) const { return nullptr; }
+ virtual const IArrayReadView<int64_t>* as_read_view(ArrayTag<int64_t>) const { return nullptr; }
+ virtual const IArrayReadView<float>* as_read_view(ArrayTag<float>) const { return nullptr; }
+ virtual const IArrayReadView<double>* as_read_view(ArrayTag<double>) const { return nullptr; }
+
+ virtual const IWeightedSetReadView<int8_t>* as_read_view(WeightedSetTag<int8_t>) const { return nullptr; }
+ virtual const IWeightedSetReadView<int16_t>* as_read_view(WeightedSetTag<int16_t>) const { return nullptr; }
+ virtual const IWeightedSetReadView<int32_t>* as_read_view(WeightedSetTag<int32_t>) const { return nullptr; }
+ virtual const IWeightedSetReadView<int64_t>* as_read_view(WeightedSetTag<int64_t>) const { return nullptr; }
+ virtual const IWeightedSetReadView<float>* as_read_view(WeightedSetTag<float>) const { return nullptr; }
+ virtual const IWeightedSetReadView<double>* as_read_view(WeightedSetTag<double>) const { return nullptr; }
+
+ virtual const IArrayEnumReadView* as_read_view(ArrayEnumTag) const { return nullptr; }
+ virtual const IWeightedSetEnumReadView* as_read_view(WeightedSetEnumTag) const { return nullptr; }
};
}
diff --git a/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_read_view.h b/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_read_view.h
index df69c5cfde8..7d7f8831fc8 100644
--- a/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_read_view.h
+++ b/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_read_view.h
@@ -34,8 +34,13 @@ template <typename T>
using IWeightedSetReadView = IMultiValueReadView<multivalue::WeightedValue<T>>;
/**
+ * Read view for the raw data stored in an enumerated array attribute.
+ */
+using IArrayEnumReadView = IArrayReadView<vespalib::datastore::AtomicEntryRef>;
+
+/**
* Read view for the raw data stored in an enumerated weighted set attribute.
*/
-using IWeightedSetEnumReadView = IMultiValueReadView<multivalue::WeightedValue<vespalib::datastore::AtomicEntryRef>>;
+using IWeightedSetEnumReadView = IWeightedSetReadView<vespalib::datastore::AtomicEntryRef>;
};