mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-19 10:25:05 +03:00
libcamera/base: Move extended base functionality
Move the functionality for the following components to the new base support library: - BoundMethod - EventDispatcher - EventDispatcherPoll - Log - Message - Object - Signal - Semaphore - Thread - Timer While it would be preferable to see these split to move one component per commit, these components are all interdependent upon each other, which leaves us with one big change performing the move for all of them. Reviewed-by: Hirokazu Honda <hiroh@chromium.org> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
6410d1d37c
commit
27aff949fb
161 changed files with 390 additions and 366 deletions
71
include/libcamera/base/object.h
Normal file
71
include/libcamera/base/object.h
Normal file
|
@ -0,0 +1,71 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2019, Google Inc.
|
||||
*
|
||||
* object.h - Base object
|
||||
*/
|
||||
#ifndef __LIBCAMERA_BASE_OBJECT_H__
|
||||
#define __LIBCAMERA_BASE_OBJECT_H__
|
||||
|
||||
#include <list>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include <libcamera/base/bound_method.h>
|
||||
|
||||
namespace libcamera {
|
||||
|
||||
class Message;
|
||||
template<typename... Args>
|
||||
class Signal;
|
||||
class SignalBase;
|
||||
class Thread;
|
||||
|
||||
class Object
|
||||
{
|
||||
public:
|
||||
Object(Object *parent = nullptr);
|
||||
virtual ~Object();
|
||||
|
||||
void deleteLater();
|
||||
|
||||
void postMessage(std::unique_ptr<Message> msg);
|
||||
|
||||
template<typename T, typename R, typename... FuncArgs, typename... Args,
|
||||
typename std::enable_if_t<std::is_base_of<Object, T>::value> * = nullptr>
|
||||
R invokeMethod(R (T::*func)(FuncArgs...), ConnectionType type,
|
||||
Args... args)
|
||||
{
|
||||
T *obj = static_cast<T *>(this);
|
||||
auto *method = new BoundMethodMember<T, R, FuncArgs...>(obj, this, func, type);
|
||||
return method->activate(args..., true);
|
||||
}
|
||||
|
||||
Thread *thread() const { return thread_; }
|
||||
void moveToThread(Thread *thread);
|
||||
|
||||
Object *parent() const { return parent_; }
|
||||
|
||||
protected:
|
||||
virtual void message(Message *msg);
|
||||
|
||||
private:
|
||||
friend class SignalBase;
|
||||
friend class Thread;
|
||||
|
||||
void notifyThreadMove();
|
||||
|
||||
void connect(SignalBase *signal);
|
||||
void disconnect(SignalBase *signal);
|
||||
|
||||
Object *parent_;
|
||||
std::vector<Object *> children_;
|
||||
|
||||
Thread *thread_;
|
||||
std::list<SignalBase *> signals_;
|
||||
unsigned int pendingMessages_;
|
||||
};
|
||||
|
||||
} /* namespace libcamera */
|
||||
|
||||
#endif /* __LIBCAMERA_BASE_OBJECT_H__ */
|
Loading…
Add table
Add a link
Reference in a new issue