58 lines
778 B
C++
Executable File
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|