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