Project import generated by Copybara.
GitOrigin-RevId: 19a829ffd755edb43e54d20c0e7b9348512d5108
This commit is contained in:
committed by
schmidt-sebastian
parent
c6c80c3745
commit
7fb37c80e8
@@ -167,7 +167,6 @@ struct IsCompatibleType<V, OneOf<U...>>
|
||||
template <typename T>
|
||||
inline Packet<T> PacketBase::As() const {
|
||||
if (!payload_) return Packet<T>().At(timestamp_);
|
||||
packet_internal::Holder<T>* typed_payload = payload_->As<T>();
|
||||
internal::CheckCompatibleType(*payload_, internal::Wrap<T>{});
|
||||
return Packet<T>(payload_).At(timestamp_);
|
||||
}
|
||||
@@ -217,8 +216,8 @@ class Packet : public Packet<internal::Generic> {
|
||||
const T& operator*() const { return Get(); }
|
||||
const T* operator->() const { return &Get(); }
|
||||
|
||||
template <typename U>
|
||||
T GetOr(U&& v) const {
|
||||
template <typename U, typename TT = T>
|
||||
std::enable_if_t<!std::is_abstract_v<TT>, TT> GetOr(U&& v) const {
|
||||
return IsEmpty() ? static_cast<T>(absl::forward<U>(v)) : **this;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,11 +4,15 @@ namespace api2 {
|
||||
namespace {
|
||||
|
||||
#if defined(TEST_NO_ASSIGN_WRONG_PACKET_TYPE)
|
||||
void AssignWrongPacketType() { Packet<int> p = MakePacket<float>(1.0); }
|
||||
int AssignWrongPacketType() {
|
||||
Packet<int> p = MakePacket<float>(1.0);
|
||||
return *p;
|
||||
}
|
||||
#elif defined(TEST_NO_ASSIGN_GENERIC_TO_SPECIFIC)
|
||||
void AssignWrongPacketType() {
|
||||
int AssignWrongPacketType() {
|
||||
Packet<> p = MakePacket<float>(1.0);
|
||||
Packet<int> p2 = p;
|
||||
return *p2;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -264,6 +264,23 @@ TEST(PacketTest, Polymorphism) {
|
||||
EXPECT_EQ((**mutable_base).name(), "Derived");
|
||||
}
|
||||
|
||||
class AbstractBase {
|
||||
public:
|
||||
virtual ~AbstractBase() = default;
|
||||
virtual absl::string_view name() const = 0;
|
||||
};
|
||||
|
||||
class ConcreteDerived : public AbstractBase {
|
||||
public:
|
||||
absl::string_view name() const override { return "ConcreteDerived"; }
|
||||
};
|
||||
|
||||
TEST(PacketTest, PolymorphismAbstract) {
|
||||
Packet<AbstractBase> base =
|
||||
PacketAdopting<AbstractBase>(absl::make_unique<ConcreteDerived>());
|
||||
EXPECT_EQ(base->name(), "ConcreteDerived");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace api2
|
||||
} // namespace mediapipe
|
||||
|
||||
@@ -40,6 +40,17 @@ TEST(PortTest, DeletedCopyConstructorInput) {
|
||||
EXPECT_EQ(std::string(kSideOutputPort.Tag()), "SIDE_OUTPUT");
|
||||
}
|
||||
|
||||
class AbstractBase {
|
||||
public:
|
||||
virtual ~AbstractBase() = default;
|
||||
virtual absl::string_view name() const = 0;
|
||||
};
|
||||
|
||||
TEST(PortTest, Abstract) {
|
||||
static constexpr Input<AbstractBase> kInputPort{"INPUT"};
|
||||
EXPECT_EQ(std::string(kInputPort.Tag()), "INPUT");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace api2
|
||||
} // namespace mediapipe
|
||||
|
||||
Reference in New Issue
Block a user