Common System 0.2.0
Common interfaces and patterns for system integration
Loading...
Searching...
No Matches
executor.cppm
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
18module;
19
20#include <chrono>
21#include <cstddef>
22#include <functional>
23#include <future>
24#include <memory>
25#include <string>
26
28
29// Import result.core partition to reuse error_info, Result<T>, VoidResult
30import :result.core;
31
32// Internal type aliases for this partition (non-exported to avoid symbol duplication)
37} // namespace kcenon::common::interfaces
38
39export namespace kcenon::common::interfaces {
40
41// ============================================================================
42// IJob Interface
43// ============================================================================
44
49class IJob {
50public:
51 virtual ~IJob() = default;
52
57 virtual VoidResult execute() = 0;
58
63 virtual std::string get_name() const { return "unnamed_job"; }
64
69 virtual int get_priority() const { return 0; }
70};
71
72// ============================================================================
73// IExecutor Interface
74// ============================================================================
75
80class IExecutor {
81public:
82 virtual ~IExecutor() = default;
83
87 virtual Result<std::future<void>> execute(std::unique_ptr<IJob>&& job) = 0;
88
93 std::unique_ptr<IJob>&& job,
94 std::chrono::milliseconds delay) = 0;
95
99 virtual size_t worker_count() const = 0;
100
104 virtual bool is_running() const = 0;
105
109 virtual size_t pending_tasks() const = 0;
110
114 virtual void shutdown(bool wait_for_completion = true) = 0;
115};
116
117using ExecutorFactory = std::function<std::shared_ptr<IExecutor>()>;
118
124public:
125 virtual ~IExecutorProvider() = default;
126 virtual std::shared_ptr<IExecutor> get_executor() = 0;
127 virtual std::shared_ptr<IExecutor> create_executor(size_t worker_count) = 0;
128};
129
130// ============================================================================
131// IThreadPool Interface
132// ============================================================================
133
138class IThreadPool : public IExecutor {
139public:
140 virtual ~IThreadPool() = default;
141
142 virtual VoidResult resize(size_t new_size) = 0;
143 virtual size_t min_workers() const { return 1; }
144 virtual size_t max_workers() const { return 0; }
145 virtual VoidResult set_queue_capacity(size_t capacity) = 0;
146 virtual size_t get_queue_capacity() const = 0;
147 virtual bool is_queue_full() const = 0;
148 virtual size_t clear_pending_tasks() = 0;
149 virtual VoidResult start() = 0;
150 virtual VoidResult stop(bool wait_for_completion = true) = 0;
151 virtual VoidResult pause() = 0;
152 virtual VoidResult resume() = 0;
153 virtual bool is_paused() const = 0;
154 virtual size_t active_tasks() const = 0;
155 virtual size_t idle_workers() const = 0;
156 virtual size_t completed_tasks() const { return 0; }
157 virtual size_t failed_tasks() const { return 0; }
158};
159
160using ThreadPoolFactory = std::function<std::shared_ptr<IThreadPool>(size_t worker_count)>;
161
163public:
164 virtual ~IThreadPoolProvider() = default;
165 virtual std::shared_ptr<IThreadPool> get_thread_pool() = 0;
167 size_t worker_count, size_t queue_capacity = 0) = 0;
168};
169
170// ============================================================================
171// Database Interface (forward declaration only)
172// ============================================================================
173
175public:
176 virtual ~IDatabase() = default;
177};
178
179} // namespace kcenon::common::interfaces
Result type for error handling with member function support.
Definition core.cppm:165
Standard interface for database operations.
Interface for modules that provide executor implementations.
virtual std::shared_ptr< IExecutor > create_executor(size_t worker_count)=0
virtual std::shared_ptr< IExecutor > get_executor()=0
Abstract interface for task execution systems.
Definition executor.cppm:80
virtual void shutdown(bool wait_for_completion=true)=0
Shutdown the executor gracefully.
virtual size_t worker_count() const =0
Get the number of worker threads.
virtual Result< std::future< void > > execute_delayed(std::unique_ptr< IJob > &&job, std::chrono::milliseconds delay)=0
Execute a job with delay.
virtual bool is_running() const =0
Check if the executor is running.
virtual Result< std::future< void > > execute(std::unique_ptr< IJob > &&job)=0
Execute a job with Result-based error handling.
virtual size_t pending_tasks() const =0
Get the number of pending tasks.
Abstract job interface for task execution.
Definition executor.cppm:49
virtual VoidResult execute()=0
Execute the job.
virtual int get_priority() const
Get the priority of the job.
Definition executor.cppm:69
virtual std::string get_name() const
Get the name of the job.
Definition executor.cppm:63
Interface for modules that provide thread pool implementations.
virtual Result< std::shared_ptr< IThreadPool > > create_thread_pool(size_t worker_count, size_t queue_capacity=0)=0
virtual std::shared_ptr< IThreadPool > get_thread_pool()=0
Extended interface for thread pool implementations.
virtual bool is_queue_full() const =0
virtual size_t completed_tasks() const
virtual size_t idle_workers() const =0
virtual size_t active_tasks() const =0
virtual VoidResult stop(bool wait_for_completion=true)=0
virtual size_t get_queue_capacity() const =0
virtual VoidResult set_queue_capacity(size_t capacity)=0
virtual VoidResult resize(size_t new_size)=0
std::function< std::shared_ptr< IExecutor >()> ExecutorFactory
Factory function type for creating executor instances.
std::function< std::shared_ptr< IThreadPool >(size_t worker_count)> ThreadPoolFactory
Factory function type for creating thread pool instances.
Standard error information used by Result<T>.
Definition core.cppm:106