Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Update types and values to use managers instead of factories #511

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
1 commit merged into from
Dec 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 32 additions & 34 deletions common/value.h
Original file line number Diff line number Diff line change
Expand Up @@ -916,39 +916,39 @@ inline ErrorValueView::ErrorValueView()
inline ListValue::ListValue()
: ListValue(common_internal::GetEmptyDynListValue()) {}

inline absl::StatusOr<ValueView> ListValue::Get(ValueFactory& value_factory,
inline absl::StatusOr<ValueView> ListValue::Get(ValueManager& value_manager,
size_t index,
Value& scratch) const {
return interface_->Get(value_factory, index, scratch);
return interface_->Get(value_manager, index, scratch);
}

inline absl::Status ListValue::ForEach(ValueFactory& value_factory,
inline absl::Status ListValue::ForEach(ValueManager& value_manager,
ForEachCallback callback) const {
return interface_->ForEach(value_factory, callback);
return interface_->ForEach(value_manager, callback);
}

inline absl::StatusOr<absl::Nonnull<ValueIteratorPtr>> ListValue::NewIterator(
ValueFactory& value_factory) const {
return interface_->NewIterator(value_factory);
ValueManager& value_manager) const {
return interface_->NewIterator(value_manager);
}

inline ListValueView::ListValueView()
: ListValueView(common_internal::GetEmptyDynListValue()) {}

inline absl::StatusOr<ValueView> ListValueView::Get(ValueFactory& value_factory,
inline absl::StatusOr<ValueView> ListValueView::Get(ValueManager& value_manager,
size_t index,
Value& scratch) const {
return interface_->Get(value_factory, index, scratch);
return interface_->Get(value_manager, index, scratch);
}

inline absl::Status ListValueView::ForEach(ValueFactory& value_factory,
inline absl::Status ListValueView::ForEach(ValueManager& value_manager,
ForEachCallback callback) const {
return interface_->ForEach(value_factory, callback);
return interface_->ForEach(value_manager, callback);
}

inline absl::StatusOr<absl::Nonnull<ValueIteratorPtr>>
ListValueView::NewIterator(ValueFactory& value_factory) const {
return interface_->NewIterator(value_factory);
ListValueView::NewIterator(ValueManager& value_manager) const {
return interface_->NewIterator(value_manager);
}

inline OptionalValue OptionalValue::None() {
Expand All @@ -974,35 +974,34 @@ inline absl::Status MapValue::CheckKey(ValueView key) {
return MapValueInterface::CheckKey(key);
}

inline absl::StatusOr<ValueView> MapValue::Get(ValueFactory& value_factory,
inline absl::StatusOr<ValueView> MapValue::Get(ValueManager& value_manager,
ValueView key,
Value& scratch) const {
return interface_->Get(value_factory, key, scratch);
return interface_->Get(value_manager, key, scratch);
}

inline absl::StatusOr<std::pair<ValueView, bool>> MapValue::Find(
ValueFactory& value_factory, ValueView key, Value& scratch) const {
return interface_->Find(value_factory, key, scratch);
ValueManager& value_manager, ValueView key, Value& scratch) const {
return interface_->Find(value_manager, key, scratch);
}

inline absl::StatusOr<ValueView> MapValue::Has(ValueView key) const {
return interface_->Has(key);
}

inline absl::StatusOr<ListValueView> MapValue::ListKeys(
TypeFactory& type_factory, ValueFactory& value_factory,
ListValue& scratch) const {
return interface_->ListKeys(type_factory, value_factory, scratch);
ValueManager& value_manager, ListValue& scratch) const {
return interface_->ListKeys(value_manager, scratch);
}

inline absl::Status MapValue::ForEach(ValueFactory& value_factory,
inline absl::Status MapValue::ForEach(ValueManager& value_manager,
ForEachCallback callback) const {
return interface_->ForEach(value_factory, callback);
return interface_->ForEach(value_manager, callback);
}

inline absl::StatusOr<absl::Nonnull<ValueIteratorPtr>> MapValue::NewIterator(
ValueFactory& value_factory) const {
return interface_->NewIterator(value_factory);
ValueManager& value_manager) const {
return interface_->NewIterator(value_manager);
}

inline MapValueView::MapValueView()
Expand All @@ -1012,35 +1011,34 @@ inline absl::Status MapValueView::CheckKey(ValueView key) {
return MapValue::CheckKey(key);
}

inline absl::StatusOr<ValueView> MapValueView::Get(ValueFactory& value_factory,
inline absl::StatusOr<ValueView> MapValueView::Get(ValueManager& value_manager,
ValueView key,
Value& scratch) const {
return interface_->Get(value_factory, key, scratch);
return interface_->Get(value_manager, key, scratch);
}

inline absl::StatusOr<std::pair<ValueView, bool>> MapValueView::Find(
ValueFactory& value_factory, ValueView key, Value& scratch) const {
return interface_->Find(value_factory, key, scratch);
ValueManager& value_manager, ValueView key, Value& scratch) const {
return interface_->Find(value_manager, key, scratch);
}

inline absl::StatusOr<ValueView> MapValueView::Has(ValueView key) const {
return interface_->Has(key);
}

inline absl::StatusOr<ListValueView> MapValueView::ListKeys(
TypeFactory& type_factory, ValueFactory& value_factory,
ListValue& scratch) const {
return interface_->ListKeys(type_factory, value_factory, scratch);
ValueManager& value_manager, ListValue& scratch) const {
return interface_->ListKeys(value_manager, scratch);
}

inline absl::Status MapValueView::ForEach(ValueFactory& value_factory,
inline absl::Status MapValueView::ForEach(ValueManager& value_manager,
ForEachCallback callback) const {
return interface_->ForEach(value_factory, callback);
return interface_->ForEach(value_manager, callback);
}

inline absl::StatusOr<absl::Nonnull<ValueIteratorPtr>>
MapValueView::NewIterator(ValueFactory& value_factory) const {
return interface_->NewIterator(value_factory);
MapValueView::NewIterator(ValueManager& value_manager) const {
return interface_->NewIterator(value_manager);
}

} // namespace cel
Expand Down
22 changes: 11 additions & 11 deletions common/value_factory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include "common/type.h"
#include "common/types/type_cache.h"
#include "common/value.h"
#include "common/value_manager.h"
#include "common/values/value_cache.h"
#include "internal/overloaded.h"

Expand Down Expand Up @@ -159,9 +160,9 @@ class JsonListValue final : public ListValueInterface {
return ProcessLocalTypeCache::Get()->GetDynListType();
}

absl::StatusOr<ValueView> GetImpl(ValueFactory& value_factory, size_t index,
absl::StatusOr<ValueView> GetImpl(ValueManager& value_manager, size_t index,
Value& scratch) const override {
return JsonToValue(array_[index], value_factory, scratch);
return JsonToValue(array_[index], value_manager, scratch);
}

NativeTypeId GetNativeTypeId() const noexcept override {
Expand Down Expand Up @@ -210,24 +211,23 @@ class JsonMapValue final : public MapValueInterface {
size_t Size() const override { return object_.size(); }

// Returns a new list value whose elements are the keys of this map.
absl::StatusOr<ListValueView> ListKeys(TypeFactory& type_factory,
ValueFactory& value_factory,
absl::StatusOr<ListValueView> ListKeys(ValueManager& value_manager,
ListValue& scratch) const override {
JsonArrayBuilder keys;
keys.reserve(object_.size());
for (const auto& entry : object_) {
keys.push_back(entry.first);
}
scratch =
ListValue(value_factory.GetMemoryManager().MakeShared<JsonListValue>(
ListValue(value_manager.GetMemoryManager().MakeShared<JsonListValue>(
std::move(keys).Build()));
return scratch;
}

// By default, implementations do not guarantee any iteration order. Unless
// specified otherwise, assume the iteration order is random.
absl::StatusOr<absl::Nonnull<ValueIteratorPtr>> NewIterator(
ValueFactory& value_factory) const override {
ValueManager&) const override {
return std::make_unique<JsonMapValueKeyIterator>(object_);
}

Expand All @@ -238,20 +238,20 @@ class JsonMapValue final : public MapValueInterface {
private:
// Called by `Find` after performing various argument checks.
absl::StatusOr<absl::optional<ValueView>> FindImpl(
ValueFactory& value_factory, ValueView key,
ValueManager& value_manager, ValueView key,
Value& scratch) const override {
return Cast<StringValueView>(key).NativeValue(internal::Overloaded{
[this, &value_factory,
[this, &value_manager,
&scratch](absl::string_view value) -> absl::optional<ValueView> {
if (auto entry = object_.find(value); entry != object_.end()) {
return JsonToValue(entry->second, value_factory, scratch);
return JsonToValue(entry->second, value_manager, scratch);
}
return absl::nullopt;
},
[this, &value_factory,
[this, &value_manager,
&scratch](const absl::Cord& value) -> absl::optional<ValueView> {
if (auto entry = object_.find(value); entry != object_.end()) {
return JsonToValue(entry->second, value_factory, scratch);
return JsonToValue(entry->second, value_manager, scratch);
}
return absl::nullopt;
},
Expand Down
19 changes: 10 additions & 9 deletions common/value_factory_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,11 @@ class ValueFactoryTest

MemoryManagement memory_management() const { return std::get<0>(GetParam()); }

TypeFactory& type_factory() const { return **value_manager_; }
TypeFactory& type_factory() const { return value_manager(); }

ValueFactory& value_factory() const { return **value_manager_; }
ValueFactory& value_factory() const { return value_manager(); }

ValueManager& value_manager() const { return **value_manager_; }

ThreadSafety thread_safety() const { return std::get<1>(GetParam()); }

Expand Down Expand Up @@ -182,7 +184,7 @@ TEST_P(ValueFactoryTest, JsonValueArray) {
"null, \"b\": true, \"c\": 1.0, \"d\": \"foo\"}]");
Value element;
ASSERT_OK_AND_ASSIGN(auto element_view,
list_value.Get(value_factory(), 0, element));
list_value.Get(value_manager(), 0, element));
EXPECT_TRUE(InstanceOf<NullValueView>(element_view));
}

Expand All @@ -199,13 +201,12 @@ TEST_P(ValueFactoryTest, JsonValueObject) {
"\"c\": 1.0, \"d\": \"foo\"}}");

ListValue keys;
ASSERT_OK_AND_ASSIGN(
auto keys_view,
map_value.ListKeys(type_factory(), value_factory(), keys));
ASSERT_OK_AND_ASSIGN(auto keys_view,
map_value.ListKeys(value_manager(), keys));
EXPECT_EQ(keys_view.Size(), 6);

ASSERT_OK_AND_ASSIGN(auto keys_iterator,
map_value.NewIterator(value_factory()));
map_value.NewIterator(value_manager()));
std::vector<StringValue> string_keys;
while (keys_iterator->HasNext()) {
Value key;
Expand All @@ -226,11 +227,11 @@ TEST_P(ValueFactoryTest, JsonValueObject) {

Value get;
ASSERT_OK_AND_ASSIGN(
auto get_view, map_value.Get(value_factory(), StringValueView("a"), get));
auto get_view, map_value.Get(value_manager(), StringValueView("a"), get));
ASSERT_TRUE(InstanceOf<NullValueView>(get_view));
ASSERT_OK_AND_ASSIGN(
get_view,
map_value.Get(value_factory(), StringValueView(absl::Cord("a")), get));
map_value.Get(value_manager(), StringValueView(absl::Cord("a")), get));
ASSERT_TRUE(InstanceOf<NullValueView>(get_view));
}

Expand Down
21 changes: 11 additions & 10 deletions common/value_provider.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@
#include "common/type.h"
#include "common/type_kind.h"
#include "common/value.h"
#include "common/value_factory.h"
#include "common/value_kind.h"
#include "common/value_manager.h"
#include "common/values/thread_compatible_value_provider.h"
#include "common/values/thread_safe_value_provider.h"
#include "internal/status_macros.h"
Expand Down Expand Up @@ -349,7 +351,7 @@ class TypedListValue final : public ListValueInterface {
TypeView get_type() const override { return type_; }

private:
absl::StatusOr<ValueView> GetImpl(ValueFactory&, size_t index,
absl::StatusOr<ValueView> GetImpl(ValueManager&, size_t index,
Value&) const override {
return elements_[index];
}
Expand Down Expand Up @@ -499,14 +501,13 @@ class TypedMapValue final : public MapValueInterface {
return std::move(builder).Build();
}

absl::StatusOr<ListValueView> ListKeys(TypeFactory& type_factory,
ValueFactory&,
absl::StatusOr<ListValueView> ListKeys(ValueManager& value_manager,
ListValue& scratch) const override {
// FIXME: Update ListKeys to just take ValueProvider, or move list/map
// builders to ValueFactory.
// builders to ValueManager.
ListValueBuilderImpl<K> keys(
type_factory.GetMemoryManager(),
type_factory.CreateListType(Cast<key_view_type>(type_.key())));
value_manager.GetMemoryManager(),
value_manager.CreateListType(Cast<key_view_type>(type_.key())));
keys.Reserve(Size());
for (const auto& entry : entries_) {
CEL_RETURN_IF_ERROR(keys.Add(entry.first));
Expand All @@ -516,15 +517,15 @@ class TypedMapValue final : public MapValueInterface {
}

absl::StatusOr<absl::Nonnull<ValueIteratorPtr>> NewIterator(
ValueFactory&) const override {
ValueManager&) const override {
return std::make_unique<TypedMapValueKeyIterator<K, V>>(entries_);
}

protected:
TypeView get_type() const override { return type_; }

private:
absl::StatusOr<absl::optional<ValueView>> FindImpl(ValueFactory&,
absl::StatusOr<absl::optional<ValueView>> FindImpl(ValueManager&,
ValueView key,
Value&) const override {
if (auto entry =
Expand Down Expand Up @@ -708,7 +709,7 @@ class MapValueBuilderImpl<Value, Value> final : public MapValueBuilder {
} // namespace

absl::StatusOr<Unique<ListValueBuilder>> ValueProvider::NewListValueBuilder(
ValueFactory& value_factory, ListTypeView type) {
ValueFactory&, ListTypeView type) {
auto memory_manager = GetMemoryManager();
switch (type.element().kind()) {
case TypeKind::kBool:
Expand Down Expand Up @@ -760,7 +761,7 @@ absl::StatusOr<Unique<ListValueBuilder>> ValueProvider::NewListValueBuilder(
}

absl::StatusOr<Unique<MapValueBuilder>> ValueProvider::NewMapValueBuilder(
ValueFactory& value_factory, MapTypeView type) {
ValueFactory&, MapTypeView type) {
auto memory_manager = GetMemoryManager();
switch (type.key().kind()) {
case TypeKind::kBool:
Expand Down
Loading