[locator] adding Get<Type> to InstanceLocator (#3714)

This commit changes how the objects in OpenThread access each other.
It adds a template `Get<Type>()` method in `InstanceLocator`. This
method returns a reference to a given `Type` object belonging to the
OpenThread instance (e.g. `Get<MeshForwarder>()` returns a reference
to `MeshForwarder` object on the OpenThread instance). The
`InstanceLocator` is used as base class of all OpenThread classes so
every class can easily access any other object. This commit also
changes how the main instance is retrieved in `InstanceLocator` for
the single-instance case. The method `GetInstance()` directly uses the
raw buffer `gInstanceRaw`. This change helps make the `GetInstance()`
and in turn all `Get<Type>()` methods in-line. This commit also
removes the existing getters across all classes to use the new
`Get<Type>()` model.
This commit is contained in:
Abtin Keshavarzian
2019-04-02 09:07:25 -07:00
committed by Jonathan Hui
parent 9dfa4e2b31
commit 8f112eeb5a
120 changed files with 1846 additions and 2508 deletions
+14 -17
View File
@@ -36,6 +36,7 @@
#include <openthread/message.h>
#include "common/instance.hpp"
#include "common/locator-getters.hpp"
using namespace ot;
@@ -170,39 +171,35 @@ void otMessageGetBufferInfo(otInstance *aInstance, otBufferInfo *aBufferInfo)
aBufferInfo->mTotalBuffers = OPENTHREAD_CONFIG_NUM_MESSAGE_BUFFERS;
aBufferInfo->mFreeBuffers = instance.GetMessagePool().GetFreeBufferCount();
aBufferInfo->mFreeBuffers = instance.Get<MessagePool>().GetFreeBufferCount();
instance.GetThreadNetif().GetMeshForwarder().GetSendQueue().GetInfo(aBufferInfo->m6loSendMessages,
aBufferInfo->m6loSendBuffers);
instance.Get<MeshForwarder>().GetSendQueue().GetInfo(aBufferInfo->m6loSendMessages, aBufferInfo->m6loSendBuffers);
instance.GetThreadNetif().GetMeshForwarder().GetReassemblyQueue().GetInfo(aBufferInfo->m6loReassemblyMessages,
aBufferInfo->m6loReassemblyBuffers);
instance.Get<MeshForwarder>().GetReassemblyQueue().GetInfo(aBufferInfo->m6loReassemblyMessages,
aBufferInfo->m6loReassemblyBuffers);
#if OPENTHREAD_FTD
instance.GetThreadNetif().GetMeshForwarder().GetResolvingQueue().GetInfo(aBufferInfo->mArpMessages,
aBufferInfo->mArpBuffers);
instance.Get<MeshForwarder>().GetResolvingQueue().GetInfo(aBufferInfo->mArpMessages, aBufferInfo->mArpBuffers);
#else
aBufferInfo->mArpMessages = 0;
aBufferInfo->mArpBuffers = 0;
#endif
instance.GetThreadNetif().GetIp6().GetSendQueue().GetInfo(aBufferInfo->mIp6Messages, aBufferInfo->mIp6Buffers);
instance.Get<Ip6::Ip6>().GetSendQueue().GetInfo(aBufferInfo->mIp6Messages, aBufferInfo->mIp6Buffers);
instance.GetThreadNetif().GetIp6().GetMpl().GetBufferedMessageSet().GetInfo(aBufferInfo->mMplMessages,
aBufferInfo->mMplBuffers);
instance.Get<Ip6::Mpl>().GetBufferedMessageSet().GetInfo(aBufferInfo->mMplMessages, aBufferInfo->mMplBuffers);
instance.GetThreadNetif().GetMle().GetMessageQueue().GetInfo(aBufferInfo->mMleMessages, aBufferInfo->mMleBuffers);
instance.Get<Mle::MleRouter>().GetMessageQueue().GetInfo(aBufferInfo->mMleMessages, aBufferInfo->mMleBuffers);
instance.GetThreadNetif().GetCoap().GetRequestMessages().GetInfo(aBufferInfo->mCoapMessages,
aBufferInfo->mCoapBuffers);
instance.GetThreadNetif().GetCoap().GetCachedResponses().GetInfo(messages, buffers);
instance.Get<Coap::Coap>().GetRequestMessages().GetInfo(aBufferInfo->mCoapMessages, aBufferInfo->mCoapBuffers);
instance.Get<Coap::Coap>().GetCachedResponses().GetInfo(messages, buffers);
aBufferInfo->mCoapMessages += messages;
aBufferInfo->mCoapBuffers += buffers;
#if OPENTHREAD_ENABLE_DTLS
instance.GetThreadNetif().GetCoapSecure().GetRequestMessages().GetInfo(aBufferInfo->mCoapSecureMessages,
aBufferInfo->mCoapSecureBuffers);
instance.GetThreadNetif().GetCoapSecure().GetCachedResponses().GetInfo(messages, buffers);
instance.Get<Coap::CoapSecure>().GetRequestMessages().GetInfo(aBufferInfo->mCoapSecureMessages,
aBufferInfo->mCoapSecureBuffers);
instance.Get<Coap::CoapSecure>().GetCachedResponses().GetInfo(messages, buffers);
aBufferInfo->mCoapSecureMessages += messages;
aBufferInfo->mCoapSecureBuffers += buffers;
#else