104 lines
2.6 KiB
C++
104 lines
2.6 KiB
C++
![]() |
#include "LibapiQueues.h"
|
||
|
#include <cassert>
|
||
|
#include <iostream>
|
||
|
|
||
|
|
||
|
static std::vector<LibapiQueue<void*>*> _queues;
|
||
|
|
||
|
void Queues::add_to_queue_list(LibapiQueue<void*>* queue)
|
||
|
{
|
||
|
for (auto it=_queues.begin(); it!=_queues.end(); it++)
|
||
|
{
|
||
|
|
||
|
LibapiQueue<void*>* sq = (LibapiQueue<void*>*)(*it);
|
||
|
if (sq->get_id() == queue->get_id() || sq->get_name() == queue->get_name())
|
||
|
{
|
||
|
assert(0);
|
||
|
}
|
||
|
}
|
||
|
_queues.push_back(queue);
|
||
|
}
|
||
|
|
||
|
void Queues::remove_from_queue_list(int& id)
|
||
|
{
|
||
|
for (auto it = _queues.begin(); it != _queues.end(); it++)
|
||
|
{
|
||
|
LibapiQueue<void*>* sq = (LibapiQueue<void*>*)(*it);
|
||
|
if (sq->get_id() == id)
|
||
|
{
|
||
|
_queues.erase(it);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
LibapiQueue<void*>* Queues::find_queue(int& id)
|
||
|
{
|
||
|
for (auto it = _queues.begin(); it != _queues.end(); it++)
|
||
|
{
|
||
|
LibapiQueue<void*>* sq = (LibapiQueue<void*>*)(*it);
|
||
|
if (sq->get_id() == id) return sq;
|
||
|
}
|
||
|
return NULL;
|
||
|
//auto it = std::find_if(LibapiQueue::get_queues().begin(), LibapiQueue::get_queues().end(), [&](const LibapiQueue* sq)
|
||
|
// return sq->get_id() == id);
|
||
|
//if (it != LibapiQueue::get_queues().end()) return (LibapiQueue*)it;
|
||
|
//else return NULL;
|
||
|
}
|
||
|
|
||
|
LibapiQueue<void*>* Queues::find_queue(std::string& name)
|
||
|
{
|
||
|
for (auto it = _queues.begin(); it != _queues.end(); it++)
|
||
|
{
|
||
|
LibapiQueue<void*>* sq = (LibapiQueue<void*>*)(*it);
|
||
|
if (sq->get_name() == name) return sq;
|
||
|
}
|
||
|
return NULL;
|
||
|
//auto it = std::find_if(LibapiQueue::get_queues().begin(), LibapiQueue::get_queues().end(), [&](const LibapiQueue* sq)
|
||
|
// return sq - get_name() == name);
|
||
|
//if (it != LibapiQueue::get_queues().end()) return (LibapiQueue*)it;
|
||
|
//else return NULL;
|
||
|
}
|
||
|
|
||
|
std::vector<LibapiQueue<void*>*> Queues::get_queues()
|
||
|
{
|
||
|
return _queues;
|
||
|
}
|
||
|
|
||
|
LibapiQueue<void*>* Queues::create_queue(int& id, std::string& name)
|
||
|
{
|
||
|
LibapiQueue<void*>* sq = new LibapiQueue<void*>(id, name);
|
||
|
add_to_queue_list(sq);
|
||
|
return sq;
|
||
|
}
|
||
|
|
||
|
void Queues::delete_queue(LibapiQueue<void*>* queue)
|
||
|
{
|
||
|
if (queue != NULL)
|
||
|
{
|
||
|
int id = queue->get_id();
|
||
|
remove_from_queue_list(id);
|
||
|
delete queue;
|
||
|
queue = NULL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Queues::clear()
|
||
|
{
|
||
|
for (auto it = _queues.begin(); it != _queues.end(); it++)
|
||
|
if ((*it) != NULL)
|
||
|
delete (*it);
|
||
|
_queues.clear();
|
||
|
}
|
||
|
|
||
|
int Queues::push_to_queue(char* queue_name, void* msg)
|
||
|
{
|
||
|
std::string qname(queue_name);
|
||
|
LibapiQueue<void*>* queue = find_queue(qname);
|
||
|
if (queue == NULL) return -1;
|
||
|
bool ret = queue->push(msg);
|
||
|
if (ret)
|
||
|
return 0;
|
||
|
else
|
||
|
return -1;
|
||
|
}
|