Add non-const return value for mgp::Value subtypes (#1099)

This commit is contained in:
Matija Pintarić 2023-07-28 12:26:10 +02:00 committed by GitHub
parent 76ca019f31
commit 2b7707a2f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -399,6 +399,9 @@ class List {
/// @brief Returns the value at the given `index`. /// @brief Returns the value at the given `index`.
const Value operator[](size_t index) const; const Value operator[](size_t index) const;
///@brief Same as above, but non const value
Value operator[](size_t index);
class Iterator { class Iterator {
private: private:
friend class List; friend class List;
@ -1068,32 +1071,46 @@ class Value {
/// @pre Value type needs to be Type::Bool. /// @pre Value type needs to be Type::Bool.
bool ValueBool() const; bool ValueBool() const;
bool ValueBool();
/// @pre Value type needs to be Type::Int. /// @pre Value type needs to be Type::Int.
int64_t ValueInt() const; int64_t ValueInt() const;
int64_t ValueInt();
/// @pre Value type needs to be Type::Double. /// @pre Value type needs to be Type::Double.
double ValueDouble() const; double ValueDouble() const;
double ValueDouble();
/// @pre Value type needs to be Type::Numeric. /// @pre Value type needs to be Type::Numeric.
double ValueNumeric() const; double ValueNumeric() const;
double ValueNumeric();
/// @pre Value type needs to be Type::String. /// @pre Value type needs to be Type::String.
std::string_view ValueString() const; std::string_view ValueString() const;
std::string_view ValueString();
/// @pre Value type needs to be Type::List. /// @pre Value type needs to be Type::List.
const List ValueList() const; const List ValueList() const;
List ValueList();
/// @pre Value type needs to be Type::Map. /// @pre Value type needs to be Type::Map.
const Map ValueMap() const; const Map ValueMap() const;
Map ValueMap();
/// @pre Value type needs to be Type::Node. /// @pre Value type needs to be Type::Node.
const Node ValueNode() const; const Node ValueNode() const;
Node ValueNode();
/// @pre Value type needs to be Type::Relationship. /// @pre Value type needs to be Type::Relationship.
const Relationship ValueRelationship() const; const Relationship ValueRelationship() const;
Relationship ValueRelationship();
/// @pre Value type needs to be Type::Path. /// @pre Value type needs to be Type::Path.
const Path ValuePath() const; const Path ValuePath() const;
Path ValuePath();
/// @pre Value type needs to be Type::Date. /// @pre Value type needs to be Type::Date.
const Date ValueDate() const; const Date ValueDate() const;
Date ValueDate();
/// @pre Value type needs to be Type::LocalTime. /// @pre Value type needs to be Type::LocalTime.
const LocalTime ValueLocalTime() const; const LocalTime ValueLocalTime() const;
LocalTime ValueLocalTime();
/// @pre Value type needs to be Type::LocalDateTime. /// @pre Value type needs to be Type::LocalDateTime.
const LocalDateTime ValueLocalDateTime() const; const LocalDateTime ValueLocalDateTime() const;
LocalDateTime ValueLocalDateTime();
/// @pre Value type needs to be Type::Duration. /// @pre Value type needs to be Type::Duration.
const Duration ValueDuration() const; const Duration ValueDuration() const;
Duration ValueDuration();
/// @brief Returns whether the value is null. /// @brief Returns whether the value is null.
bool IsNull() const; bool IsNull() const;
@ -2182,6 +2199,8 @@ inline bool List::Empty() const { return Size() == 0; }
inline const Value List::operator[](size_t index) const { return Value(mgp::list_at(ptr_, index)); } inline const Value List::operator[](size_t index) const { return Value(mgp::list_at(ptr_, index)); }
inline Value List::operator[](size_t index) { return Value(mgp::list_at(ptr_, index)); }
inline bool List::Iterator::operator==(const Iterator &other) const { inline bool List::Iterator::operator==(const Iterator &other) const {
return iterable_ == other.iterable_ && index_ == other.index_; return iterable_ == other.iterable_ && index_ == other.index_;
} }
@ -3130,6 +3149,12 @@ inline bool Value::ValueBool() const {
} }
return mgp::value_get_bool(ptr_); return mgp::value_get_bool(ptr_);
} }
inline bool Value::ValueBool() {
if (Type() != Type::Bool) {
throw ValueException("Type of value is wrong: expected Bool.");
}
return mgp::value_get_bool(ptr_);
}
inline std::int64_t Value::ValueInt() const { inline std::int64_t Value::ValueInt() const {
if (Type() != Type::Int) { if (Type() != Type::Int) {
@ -3137,6 +3162,12 @@ inline std::int64_t Value::ValueInt() const {
} }
return mgp::value_get_int(ptr_); return mgp::value_get_int(ptr_);
} }
inline std::int64_t Value::ValueInt() {
if (Type() != Type::Int) {
throw ValueException("Type of value is wrong: expected Int.");
}
return mgp::value_get_int(ptr_);
}
inline double Value::ValueDouble() const { inline double Value::ValueDouble() const {
if (Type() != Type::Double) { if (Type() != Type::Double) {
@ -3144,6 +3175,12 @@ inline double Value::ValueDouble() const {
} }
return mgp::value_get_double(ptr_); return mgp::value_get_double(ptr_);
} }
inline double Value::ValueDouble() {
if (Type() != Type::Double) {
throw ValueException("Type of value is wrong: expected Double.");
}
return mgp::value_get_double(ptr_);
}
inline double Value::ValueNumeric() const { inline double Value::ValueNumeric() const {
if (Type() != Type::Int && Type() != Type::Double) { if (Type() != Type::Int && Type() != Type::Double) {
@ -3154,6 +3191,15 @@ inline double Value::ValueNumeric() const {
} }
return mgp::value_get_double(ptr_); return mgp::value_get_double(ptr_);
} }
inline double Value::ValueNumeric() {
if (Type() != Type::Int && Type() != Type::Double) {
throw ValueException("Type of value is wrong: expected Int or Double.");
}
if (Type() == Type::Int) {
return static_cast<double>(mgp::value_get_int(ptr_));
}
return mgp::value_get_double(ptr_);
}
inline std::string_view Value::ValueString() const { inline std::string_view Value::ValueString() const {
if (Type() != Type::String) { if (Type() != Type::String) {
@ -3161,6 +3207,12 @@ inline std::string_view Value::ValueString() const {
} }
return mgp::value_get_string(ptr_); return mgp::value_get_string(ptr_);
} }
inline std::string_view Value::ValueString() {
if (Type() != Type::String) {
throw ValueException("Type of value is wrong: expected String.");
}
return mgp::value_get_string(ptr_);
}
inline const List Value::ValueList() const { inline const List Value::ValueList() const {
if (Type() != Type::List) { if (Type() != Type::List) {
@ -3168,6 +3220,12 @@ inline const List Value::ValueList() const {
} }
return List(mgp::value_get_list(ptr_)); return List(mgp::value_get_list(ptr_));
} }
inline List Value::ValueList() {
if (Type() != Type::List) {
throw ValueException("Type of value is wrong: expected List.");
}
return List(mgp::value_get_list(ptr_));
}
inline const Map Value::ValueMap() const { inline const Map Value::ValueMap() const {
if (Type() != Type::Map) { if (Type() != Type::Map) {
@ -3175,6 +3233,12 @@ inline const Map Value::ValueMap() const {
} }
return Map(mgp::value_get_map(ptr_)); return Map(mgp::value_get_map(ptr_));
} }
inline Map Value::ValueMap() {
if (Type() != Type::Map) {
throw ValueException("Type of value is wrong: expected Map.");
}
return Map(mgp::value_get_map(ptr_));
}
inline const Node Value::ValueNode() const { inline const Node Value::ValueNode() const {
if (Type() != Type::Node) { if (Type() != Type::Node) {
@ -3182,6 +3246,12 @@ inline const Node Value::ValueNode() const {
} }
return Node(mgp::value_get_vertex(ptr_)); return Node(mgp::value_get_vertex(ptr_));
} }
inline Node Value::ValueNode() {
if (Type() != Type::Node) {
throw ValueException("Type of value is wrong: expected Node.");
}
return Node(mgp::value_get_vertex(ptr_));
}
inline const Relationship Value::ValueRelationship() const { inline const Relationship Value::ValueRelationship() const {
if (Type() != Type::Relationship) { if (Type() != Type::Relationship) {
@ -3189,6 +3259,12 @@ inline const Relationship Value::ValueRelationship() const {
} }
return Relationship(mgp::value_get_edge(ptr_)); return Relationship(mgp::value_get_edge(ptr_));
} }
inline Relationship Value::ValueRelationship() {
if (Type() != Type::Relationship) {
throw ValueException("Type of value is wrong: expected Relationship.");
}
return Relationship(mgp::value_get_edge(ptr_));
}
inline const Path Value::ValuePath() const { inline const Path Value::ValuePath() const {
if (Type() != Type::Path) { if (Type() != Type::Path) {
@ -3196,6 +3272,12 @@ inline const Path Value::ValuePath() const {
} }
return Path(mgp::value_get_path(ptr_)); return Path(mgp::value_get_path(ptr_));
} }
inline Path Value::ValuePath() {
if (Type() != Type::Path) {
throw ValueException("Type of value is wrong: expected Path.");
}
return Path(mgp::value_get_path(ptr_));
}
inline const Date Value::ValueDate() const { inline const Date Value::ValueDate() const {
if (Type() != Type::Date) { if (Type() != Type::Date) {
@ -3203,6 +3285,12 @@ inline const Date Value::ValueDate() const {
} }
return Date(mgp::value_get_date(ptr_)); return Date(mgp::value_get_date(ptr_));
} }
inline Date Value::ValueDate() {
if (Type() != Type::Date) {
throw ValueException("Type of value is wrong: expected Date.");
}
return Date(mgp::value_get_date(ptr_));
}
inline const LocalTime Value::ValueLocalTime() const { inline const LocalTime Value::ValueLocalTime() const {
if (Type() != Type::LocalTime) { if (Type() != Type::LocalTime) {
@ -3210,6 +3298,12 @@ inline const LocalTime Value::ValueLocalTime() const {
} }
return LocalTime(mgp::value_get_local_time(ptr_)); return LocalTime(mgp::value_get_local_time(ptr_));
} }
inline LocalTime Value::ValueLocalTime() {
if (Type() != Type::LocalTime) {
throw ValueException("Type of value is wrong: expected LocalTime.");
}
return LocalTime(mgp::value_get_local_time(ptr_));
}
inline const LocalDateTime Value::ValueLocalDateTime() const { inline const LocalDateTime Value::ValueLocalDateTime() const {
if (Type() != Type::LocalDateTime) { if (Type() != Type::LocalDateTime) {
@ -3217,6 +3311,12 @@ inline const LocalDateTime Value::ValueLocalDateTime() const {
} }
return LocalDateTime(mgp::value_get_local_date_time(ptr_)); return LocalDateTime(mgp::value_get_local_date_time(ptr_));
} }
inline LocalDateTime Value::ValueLocalDateTime() {
if (Type() != Type::LocalDateTime) {
throw ValueException("Type of value is wrong: expected LocalDateTime.");
}
return LocalDateTime(mgp::value_get_local_date_time(ptr_));
}
inline const Duration Value::ValueDuration() const { inline const Duration Value::ValueDuration() const {
if (Type() != Type::Duration) { if (Type() != Type::Duration) {
@ -3224,6 +3324,12 @@ inline const Duration Value::ValueDuration() const {
} }
return Duration(mgp::value_get_duration(ptr_)); return Duration(mgp::value_get_duration(ptr_));
} }
inline Duration Value::ValueDuration() {
if (Type() != Type::Duration) {
throw ValueException("Type of value is wrong: expected Duration.");
}
return Duration(mgp::value_get_duration(ptr_));
}
inline bool Value::IsNull() const { return mgp::value_is_null(ptr_); } inline bool Value::IsNull() const { return mgp::value_is_null(ptr_); }