mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-11-04 16:51:37 +08:00
try_implicit_cast<>() --> coerceOrFallback<>()
This commit is contained in:
@@ -405,7 +405,7 @@ public:
|
|||||||
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
||||||
void ServiceClient<DataType_, Callback_, NumStaticCalls_>::invokeCallback(ServiceCallResultType& result)
|
void ServiceClient<DataType_, Callback_, NumStaticCalls_>::invokeCallback(ServiceCallResultType& result)
|
||||||
{
|
{
|
||||||
if (try_implicit_cast<bool>(callback_, true))
|
if (coerceOrFallback<bool>(callback_, true))
|
||||||
{
|
{
|
||||||
callback_(result);
|
callback_(result);
|
||||||
}
|
}
|
||||||
@@ -496,7 +496,7 @@ template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
|||||||
int ServiceClient<DataType_, Callback_, NumStaticCalls_>::call(NodeID server_node_id, const RequestType& request,
|
int ServiceClient<DataType_, Callback_, NumStaticCalls_>::call(NodeID server_node_id, const RequestType& request,
|
||||||
ServiceCallID& out_call_id)
|
ServiceCallID& out_call_id)
|
||||||
{
|
{
|
||||||
if (!try_implicit_cast<bool>(callback_, true))
|
if (!coerceOrFallback<bool>(callback_, true))
|
||||||
{
|
{
|
||||||
UAVCAN_TRACE("ServiceClient", "Invalid callback");
|
UAVCAN_TRACE("ServiceClient", "Invalid callback");
|
||||||
return -ErrInvalidConfiguration;
|
return -ErrInvalidConfiguration;
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ private:
|
|||||||
|
|
||||||
ServiceResponseDataStructure<ResponseType> response;
|
ServiceResponseDataStructure<ResponseType> response;
|
||||||
|
|
||||||
if (try_implicit_cast<bool>(callback_, true))
|
if (coerceOrFallback<bool>(callback_, true))
|
||||||
{
|
{
|
||||||
UAVCAN_ASSERT(response.isResponseEnabled()); // Enabled by default
|
UAVCAN_ASSERT(response.isResponseEnabled()); // Enabled by default
|
||||||
callback_(request, response);
|
callback_(request, response);
|
||||||
@@ -174,7 +174,7 @@ public:
|
|||||||
{
|
{
|
||||||
stop();
|
stop();
|
||||||
|
|
||||||
if (!try_implicit_cast<bool>(callback, true))
|
if (!coerceOrFallback<bool>(callback, true))
|
||||||
{
|
{
|
||||||
UAVCAN_TRACE("ServiceServer", "Invalid callback");
|
UAVCAN_TRACE("ServiceServer", "Invalid callback");
|
||||||
return -ErrInvalidParam;
|
return -ErrInvalidParam;
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ private:
|
|||||||
|
|
||||||
virtual void handleReceivedDataStruct(ReceivedDataStructure<DataType_>& msg)
|
virtual void handleReceivedDataStruct(ReceivedDataStructure<DataType_>& msg)
|
||||||
{
|
{
|
||||||
if (try_implicit_cast<bool>(callback_, true))
|
if (coerceOrFallback<bool>(callback_, true))
|
||||||
{
|
{
|
||||||
callback_(msg);
|
callback_(msg);
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ public:
|
|||||||
{
|
{
|
||||||
stop();
|
stop();
|
||||||
|
|
||||||
if (!try_implicit_cast<bool>(callback, true))
|
if (!coerceOrFallback<bool>(callback, true))
|
||||||
{
|
{
|
||||||
UAVCAN_TRACE("Subscriber", "Invalid callback");
|
UAVCAN_TRACE("Subscriber", "Invalid callback");
|
||||||
return -ErrInvalidParam;
|
return -ErrInvalidParam;
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ private:
|
|||||||
|
|
||||||
virtual void handleTimerEvent(const TimerEvent& event)
|
virtual void handleTimerEvent(const TimerEvent& event)
|
||||||
{
|
{
|
||||||
if (try_implicit_cast<bool>(callback_, true))
|
if (coerceOrFallback<bool>(callback_, true))
|
||||||
{
|
{
|
||||||
callback_(event);
|
callback_(event);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -876,7 +876,7 @@ public:
|
|||||||
template <typename Predicate>
|
template <typename Predicate>
|
||||||
inline LazyConstructor<LogEntryInfo> traverseLogFromEndUntil(const Predicate& predicate) const
|
inline LazyConstructor<LogEntryInfo> traverseLogFromEndUntil(const Predicate& predicate) const
|
||||||
{
|
{
|
||||||
UAVCAN_ASSERT(try_implicit_cast<bool>(predicate, true));
|
UAVCAN_ASSERT(coerceOrFallback<bool>(predicate, true));
|
||||||
for (int index = static_cast<int>(persistent_state_.getLog().getLastIndex()); index >= 0; index--)
|
for (int index = static_cast<int>(persistent_state_.getLog().getLastIndex()); index >= 0; index--)
|
||||||
{
|
{
|
||||||
const Entry* const entry = persistent_state_.getLog().getEntryAtIndex(Log::Index(index));
|
const Entry* const entry = persistent_state_.getLog().getEntryAtIndex(Log::Index(index));
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class UAVCAN_EXPORT PanicListener : Noncopyable
|
|||||||
|
|
||||||
void invokeCallback(const ReceivedDataStructure<protocol::Panic>& msg)
|
void invokeCallback(const ReceivedDataStructure<protocol::Panic>& msg)
|
||||||
{
|
{
|
||||||
if (try_implicit_cast<bool>(callback_, true))
|
if (coerceOrFallback<bool>(callback_, true))
|
||||||
{
|
{
|
||||||
callback_(msg);
|
callback_(msg);
|
||||||
}
|
}
|
||||||
@@ -106,7 +106,7 @@ public:
|
|||||||
int start(const Callback& callback)
|
int start(const Callback& callback)
|
||||||
{
|
{
|
||||||
stop();
|
stop();
|
||||||
if (!try_implicit_cast<bool>(callback, true))
|
if (!coerceOrFallback<bool>(callback, true))
|
||||||
{
|
{
|
||||||
UAVCAN_TRACE("PanicListener", "Invalid callback");
|
UAVCAN_TRACE("PanicListener", "Invalid callback");
|
||||||
return -ErrInvalidParam;
|
return -ErrInvalidParam;
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
operator bool() const
|
operator bool() const
|
||||||
{
|
{
|
||||||
return try_implicit_cast<bool>(obj_, true) && try_implicit_cast<bool>(fun_, true);
|
return coerceOrFallback<bool>(obj_, true) && coerceOrFallback<bool>(fun_, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -137,12 +137,12 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* try_implicit_cast<>(From)
|
* coerceOrFallback<To>(From)
|
||||||
* try_implicit_cast<>(From, To)
|
* coerceOrFallback<To>(From, To)
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
template <typename From, typename To>
|
template <typename From, typename To>
|
||||||
struct UAVCAN_EXPORT TryImplicitCastImpl
|
struct UAVCAN_EXPORT CoerceOrFallbackImpl
|
||||||
{
|
{
|
||||||
static To impl(const From& from, const To&, TrueType) { return To(from); }
|
static To impl(const From& from, const To&, TrueType) { return To(from); }
|
||||||
static To impl(const From&, const To& default_, FalseType) { return default_; }
|
static To impl(const From&, const To& default_, FalseType) { return default_; }
|
||||||
@@ -154,10 +154,10 @@ struct UAVCAN_EXPORT TryImplicitCastImpl
|
|||||||
*/
|
*/
|
||||||
template <typename To, typename From>
|
template <typename To, typename From>
|
||||||
UAVCAN_EXPORT
|
UAVCAN_EXPORT
|
||||||
To try_implicit_cast(const From& from, const To& default_)
|
To coerceOrFallback(const From& from, const To& default_)
|
||||||
{
|
{
|
||||||
return TryImplicitCastImpl<From, To>::impl(from, default_,
|
return CoerceOrFallbackImpl<From, To>::impl(from, default_,
|
||||||
BooleanType<IsImplicitlyConvertibleFromTo<From, To>::Result>());
|
BooleanType<IsImplicitlyConvertibleFromTo<From, To>::Result>());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -166,10 +166,10 @@ To try_implicit_cast(const From& from, const To& default_)
|
|||||||
*/
|
*/
|
||||||
template <typename To, typename From>
|
template <typename To, typename From>
|
||||||
UAVCAN_EXPORT
|
UAVCAN_EXPORT
|
||||||
To try_implicit_cast(const From& from)
|
To coerceOrFallback(const From& from)
|
||||||
{
|
{
|
||||||
return TryImplicitCastImpl<From, To>::impl(from, To(),
|
return CoerceOrFallbackImpl<From, To>::impl(from, To(),
|
||||||
BooleanType<IsImplicitlyConvertibleFromTo<From, To>::Result>());
|
BooleanType<IsImplicitlyConvertibleFromTo<From, To>::Result>());
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
|
|||||||
@@ -21,25 +21,25 @@ struct NonDefaultConstructible
|
|||||||
NonDefaultConstructible(int) { }
|
NonDefaultConstructible(int) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST(Util, TryImplicitCast)
|
TEST(Util, CoerceOrFallback)
|
||||||
{
|
{
|
||||||
using uavcan::try_implicit_cast;
|
using uavcan::coerceOrFallback;
|
||||||
|
|
||||||
ASSERT_FALSE(try_implicit_cast<bool>(NonConvertible()));
|
ASSERT_FALSE(coerceOrFallback<bool>(NonConvertible()));
|
||||||
ASSERT_TRUE(try_implicit_cast<bool>(NonConvertible(), true));
|
ASSERT_TRUE(coerceOrFallback<bool>(NonConvertible(), true));
|
||||||
|
|
||||||
ASSERT_EQ(0, try_implicit_cast<long>(NonConvertible()));
|
ASSERT_EQ(0, coerceOrFallback<long>(NonConvertible()));
|
||||||
ASSERT_EQ(9000, try_implicit_cast<long>(NonConvertible(), 9000));
|
ASSERT_EQ(9000, coerceOrFallback<long>(NonConvertible(), 9000));
|
||||||
|
|
||||||
ASSERT_TRUE(try_implicit_cast<bool>(ConvertibleToBool(true)));
|
ASSERT_TRUE(coerceOrFallback<bool>(ConvertibleToBool(true)));
|
||||||
ASSERT_TRUE(try_implicit_cast<bool>(ConvertibleToBool(true), false));
|
ASSERT_TRUE(coerceOrFallback<bool>(ConvertibleToBool(true), false));
|
||||||
ASSERT_FALSE(try_implicit_cast<bool>(ConvertibleToBool(false)));
|
ASSERT_FALSE(coerceOrFallback<bool>(ConvertibleToBool(false)));
|
||||||
ASSERT_FALSE(try_implicit_cast<bool>(ConvertibleToBool(false), true));
|
ASSERT_FALSE(coerceOrFallback<bool>(ConvertibleToBool(false), true));
|
||||||
ASSERT_EQ(1, try_implicit_cast<long>(ConvertibleToBool(true)));
|
ASSERT_EQ(1, coerceOrFallback<long>(ConvertibleToBool(true)));
|
||||||
ASSERT_EQ(0, try_implicit_cast<long>(ConvertibleToBool(false), -100));
|
ASSERT_EQ(0, coerceOrFallback<long>(ConvertibleToBool(false), -100));
|
||||||
|
|
||||||
//try_implicit_cast<NonDefaultConstructible>(ConvertibleToBool(true)); // Will fail to compile
|
//coerceOrFallback<NonDefaultConstructible>(ConvertibleToBool(true)); // Will fail to compile
|
||||||
try_implicit_cast<NonDefaultConstructible>(NonConvertible(), NonDefaultConstructible(64));
|
coerceOrFallback<NonDefaultConstructible>(NonConvertible(), NonDefaultConstructible(64));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Util, FloatClassification)
|
TEST(Util, FloatClassification)
|
||||||
|
|||||||
Reference in New Issue
Block a user