// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once #include "i_multi_value_read_view.h" namespace vespalib { class Stash; } namespace search::attribute { /** * Interface that provides read views for different multi-value attribute types. * * The type-safe down-cast functions only return a valid pointer when that particular type is supported. * Otherwise a nullptr is returned. * The returned read view is owned by the supplied stash. */ class IMultiValueAttribute { public: template class MultiValueTag {}; template using ArrayTag = MultiValueTag; using ArrayEnumTag = ArrayTag; template using WeightedSetTag = MultiValueTag>; using WeightedSetEnumTag = WeightedSetTag; virtual ~IMultiValueAttribute() = default; virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } virtual const IArrayEnumReadView* make_read_view(ArrayEnumTag, vespalib::Stash&) const { return nullptr; } virtual const IWeightedSetEnumReadView* make_read_view(WeightedSetEnumTag, vespalib::Stash&) const { return nullptr; } }; }