diff options
author | Geir Storli <geirst@yahooinc.com> | 2022-03-30 12:10:29 +0000 |
---|---|---|
committer | Geir Storli <geirst@yahooinc.com> | 2022-03-30 12:10:29 +0000 |
commit | b848f308c12f71ef90d829727ddcb838415dda97 (patch) | |
tree | 9bd0f45ba2a2484ef6c14019ba2467d108715156 /searchcommon | |
parent | 223f1293837db59fdf14e627ddd623470351eeb9 (diff) |
Implement IMultiValueAttribute interface in MultiValueAttribute.
Diffstat (limited to 'searchcommon')
-rw-r--r-- | searchcommon/src/vespa/searchcommon/attribute/i_multi_value_attribute.h | 44 | ||||
-rw-r--r-- | searchcommon/src/vespa/searchcommon/attribute/i_multi_value_read_view.h | 7 |
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>; }; |