mirror of https://github.com/ARMmbed/mbed-os.git
Add downcast methods to NetworkInterface
As we've introduced virtual inheritance to support EMACInterface, we can no longer use C-style casts or static_cast to downcast from NetworkInterface to more specific types. RTTI is disabled in the toolchains, so dynamic_cast is unavailables. Add virtual downcast methods to permit conversions to the 6 derived classes. Probably only needed for EMACInterface, WiFiInterface and EthInterface, but handles the set.pull/6847/head
parent
6dffe6e4e7
commit
74dfe3423a
|
@ -101,6 +101,9 @@ public:
|
|||
*/
|
||||
virtual const char *get_gateway() = 0;
|
||||
|
||||
virtual CellularBase *cellularBase() {
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
#endif //CELLULAR_BASE_H
|
||||
|
|
|
@ -150,6 +150,10 @@ public:
|
|||
*/
|
||||
EMAC &get_emac() const { return _emac; }
|
||||
|
||||
virtual EMACInterface *emacInterface() {
|
||||
return this;
|
||||
}
|
||||
|
||||
protected:
|
||||
/** Provide access to the underlying stack
|
||||
*
|
||||
|
|
|
@ -29,6 +29,9 @@
|
|||
*/
|
||||
class EthInterface : public virtual NetworkInterface
|
||||
{
|
||||
virtual EthInterface *ethInterface() {
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -29,6 +29,9 @@
|
|||
*/
|
||||
class MeshInterface : public NetworkInterface
|
||||
{
|
||||
virtual MeshInterface *meshInterface() {
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -21,9 +21,13 @@
|
|||
#include "netsocket/SocketAddress.h"
|
||||
#include "Callback.h"
|
||||
|
||||
// Predeclared class
|
||||
// Predeclared classes
|
||||
class NetworkStack;
|
||||
|
||||
class EthInterface;
|
||||
class WiFiInterface;
|
||||
class MeshInterface;
|
||||
class CellularBase;
|
||||
class EMACInterface;
|
||||
|
||||
/** NetworkInterface class
|
||||
*
|
||||
|
@ -153,6 +157,30 @@ public:
|
|||
*/
|
||||
virtual nsapi_error_t set_blocking(bool blocking);
|
||||
|
||||
/** Dynamic downcast to an EthInterface */
|
||||
virtual EthInterface *ethInterface() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Dynamic downcast to a WiFiInterface */
|
||||
virtual WiFiInterface *wifiInterface() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Dynamic downcast to a MeshInterface */
|
||||
virtual MeshInterface *meshInterface() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Dynamic downcast to a CellularBase */
|
||||
virtual CellularBase *cellularBase() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Dynamic downcast to an EMACInterface */
|
||||
virtual EMACInterface *emacInterface() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected:
|
||||
friend class Socket;
|
||||
|
|
|
@ -99,6 +99,10 @@ public:
|
|||
* negative on error see @a nsapi_error
|
||||
*/
|
||||
virtual nsapi_size_or_error_t scan(WiFiAccessPoint *res, nsapi_size_t count) = 0;
|
||||
|
||||
virtual WiFiInterface *wifiInterface() {
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue