rk-mesh-transparent/app/src/RequestPool.cpp
2022-03-05 13:46:42 +02:00

58 lines
778 B
C++
Executable File

/*
* RequestPool.cpp
*
* Created: 16/02/2022 20:59:03
* Author: erkim
*/
#include "RequestPool.h"
#include <array>
#include <cstddef>
namespace
{
constexpr size_t REQUEST_POOL_SIZE = 10;
struct RequestWrapper
{
NWK_DataReq_t request;
bool in_use = false;
};
std::array<RequestWrapper, REQUEST_POOL_SIZE> REQUEST_POOL;
}
namespace RequestPool
{
NWK_DataReq_t* allocateRequest()
{
for (RequestWrapper& request: REQUEST_POOL)
{
if (!request.in_use)
{
request.in_use = true;
return &request.request;
}
}
return nullptr;
}
void freeRequest(NWK_DataReq_t* request)
{
for (RequestWrapper& req_wrapper: REQUEST_POOL)
{
if (&req_wrapper.request == request)
{
req_wrapper.in_use = false;
return;
}
}
}
}