image_framework_ymj/image_framework/thead/LibapiQueues.cpp

104 lines
2.6 KiB
C++
Raw Normal View History

2024-12-06 16:25:16 +08:00
#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;
}