add doxygen via opencode

This commit is contained in:
2026-02-27 23:42:09 +03:00
parent 1739836a18
commit b53ef184dc
63 changed files with 3374 additions and 681 deletions

View File

@@ -1,9 +1,12 @@
/*! \file pipipelinethread.h
* \ingroup Thread
* \~\brief
* \~english Class for create multihread pipeline
* \~russian Класс для создания многопоточного конвейера
*/
//! \file pipipelinethread.h
//! \ingroup Thread
//! \brief
//! \~english Class for creating multithread pipeline
//! \~russian Класс для создания многопоточного конвейера
//!
//! \details
//! \~english Pipeline thread for processing data through stages in separate threads.
//! \~russian Конвейерный поток для обработки данных через этапы в отдельных потоках.
/*
PIP - Platform Independent Primitives
Class for create multihread pipeline
@@ -31,16 +34,22 @@
#include "pithread.h"
//! \~english Pipeline thread template class
//! \~russian Шаблонный класс конвейерного потока
template<typename Tin, typename Tout>
class PIPipelineThread: public PIThread {
PIOBJECT_SUBCLASS(PIPipelineThread, PIThread);
public:
//! \~english Constructs pipeline thread
//! \~russian Создает конвейерный поток
PIPipelineThread() {
cnt = 0;
max_size = 0;
wait_next_pipe = false;
}
//! \~english Destroys pipeline thread
//! \~russian Уничтожает конвейерный поток
~PIPipelineThread() {
stop();
cv.notifyAll();
@@ -49,6 +58,8 @@ public:
terminate();
}
}
//! \~english Connect to next pipeline stage
//! \~russian Подключает к следующему этапу конвейера
template<typename T>
void connectTo(PIPipelineThread<Tout, T> * next) {
CONNECT3(void, Tout, bool, bool *, this, calculated, next, enqueue);
@@ -72,9 +83,21 @@ public:
}
mutex.unlock();
}
//! \~english Enqueue data for processing
//! \~russian Добавляет данные в очередь на обработку
void enqueue(const Tin & v, bool wait = false) { enqueue(v, wait, nullptr); }
//! \~english Returns pointer to counter
//! \~russian Возвращает указатель на счетчик
const ullong * counterPtr() const { return &cnt; }
//! \~english Returns items processed counter
//! \~russian Возвращает количество обработанных элементов
ullong counter() const { return cnt; }
//! \~english Returns if input queue is empty
//! \~russian Возвращает пустая ли входная очередь
bool isEmpty() {
bool ret;
mutex.lock();
@@ -82,6 +105,9 @@ public:
mutex.unlock();
return ret;
}
//! \~english Returns input queue size
//! \~russian Возвращает размер входной очереди
int queSize() {
int ret;
mutex.lock();
@@ -89,6 +115,9 @@ public:
mutex.unlock();
return ret;
}
//! \~english Clear input queue
//! \~russian Очищает входную очередь
void clear() {
mutex.lock();
mutex_wait.lock();
@@ -97,6 +126,9 @@ public:
mutex_wait.unlock();
mutex.unlock();
}
//! \~english Stop calculation
//! \~russian Останавливает вычисления
void stopCalc(int wait_delay = 100) {
if (isRunning()) {
stop();
@@ -108,6 +140,9 @@ public:
}
}
}
//! \~english Returns last processed result
//! \~russian Возвращает последний обработанный результат
Tout getLast() {
Tout ret;
mutex_last.lock();
@@ -116,8 +151,12 @@ public:
return ret;
}
//! \~english Returns max queue size
//! \~russian Возвращает максимальный размер очереди
uint maxQueSize() { return max_size; }
//! \~english Set max queue size
//! \~russian Устанавливает максимальный размер очереди
void setMaxQueSize(uint count) {
mutex.lock();
max_size = count;
@@ -125,10 +164,17 @@ public:
mutex.unlock();
}
//! \~english Returns if waiting for next pipeline
//! \~russian Возвращает ожидает ли следующий конвейер
bool isWaitNextPipe() { return wait_next_pipe; }
//! \~english Set waiting for next pipeline
//! \~russian Устанавливает ожидание следующего конвейера
void setWaitNextPipe(bool wait) { wait_next_pipe = wait; }
protected:
//! \~english Processing function - must be implemented
//! \~russian Функция обработки - должна быть реализована
virtual Tout calc(Tin & v, bool & ok) = 0;
uint max_size;