summaryrefslogtreecommitdiff
path: root/include/libcamera/base/object.h
AgeCommit message (Collapse)Author
2021-11-24libcamera: object: Avoid argument copies in invokeMethod()Laurent Pinchart
Template argument deduction results in the lvalue and lvalue reference arguments to the invokeMethod() function causing deduction of the Args template type to a non-reference type. This results in the argument being passed by value and copied. Fix this by using a cv-unqualified rvalue reference parameter type. The type is then deduced to an lvalue reference when the argument is an lvalue or lvalue reference, due to a combination of the special template argument deduction rule for rvalue reference parameter types: If P is an rvalue reference to a cv-unqualified template parameter (so-called forwarding reference), and the corresponding function call argument is an lvalue, the type lvalue reference to A is used in place of A for deduction. (https://en.cppreference.com/w/cpp/language/template_argument_deduction) and the reference collapsing rule (https://en.cppreference.com/w/cpp/language/reference#Reference_collapsing). Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2021-11-24libcamera: base: Convert to pragma onceKieran Bingham
Remove the verbose #ifndef/#define/#endif pattern for maintaining header idempotency, and replace it with a simple #pragma once. This simplifies the headers, and prevents redundant changes when header files get moved. Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
2021-06-25libcamera/base: Move extended base functionalityKieran Bingham
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>