try_implicit_cast<>() --> coerceOrFallback<>()

This commit is contained in:
Pavel Kirienko
2015-06-05 15:21:05 +03:00
parent 1f1679c75d
commit 8ab48f61e7
9 changed files with 34 additions and 34 deletions
@@ -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;
+2 -2
View File
@@ -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;
+1 -1
View File
@@ -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);
} }
/** /**
+9 -9
View File
@@ -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>());
} }
/** /**
* @} * @}
+14 -14
View File
@@ -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)