[libcamera-devel] [PATCH v2 0/6] Delete Copy-Move-Assign

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Feb 11 21:55:08 CET 2021


Hi Kieran,

Thank you for the series.

On Thu, Feb 11, 2021 at 01:34:38PM +0000, Kieran Bingham wrote:
> Here's a series which has been niggling me on my task list since the
> topic came up which highlighted that the non-copyability of the
> FrameBufferAllocator had been incorrectly implemented.
> 
> We previously discussed providing a non-copyable class which could be inherited
> or the addition of a macro.
> 
> I've chosen to go down the macro route, because I think its clearer,
> easier to customise, and doesn't extend the inheritance (and thus
> increase the size) of classes.

Just a side note, inheriting doesn't necessarily increase the size of an
object, see https://en.cppreference.com/w/cpp/language/ebo.

> Along the way, the following tasks have occured:
> 
>  - Classes which delete their copy constructor and copy assignment
>    operator, have had those replaced by LIBCAMERA_DISABLE_COPY_AND_MOVE.
>    Where the existing copy/assignment deletion occured in public:, the
>    LIBCAMERA_DISABLE_COPY_AND_MOVE addition has been placed in private: so
>    that Doxygen does not complain. (and it should have the same effect)
> 
>  - The Buffer class deletes all of the copy, and move constructor and
>    assignment operators, so this has been kept. But as the only class
>    which goes this far, it seems to stand out on its own. I have simply
>    converted to the new usage, I didn't want to change any functionality
>    here.
> 
>  - Media objects deleted only their copy construtor. I believe this to
>    be an oversight, as if the copy constructor is deleted, then the copy
>    assignment operator should also be deleted. Therefore I see this macro
>    as a win here.

Yes, I think it was an oversight indeed. See
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rc-five.

>  - MappedBuffer : This did not delete it's copy constructor, and I
>    believe it should have - so I've added it. I have not done a thorough
>    search of the tree to find other instances that should also delete
>    anything yet though.

Agreed as well.

> I'm sure that more classes could be tightened up with the addition of
> these restrictions where necessary, or perhaps other variants might crop
> up. I'm not sure yet, but this can get the ball rolling in that case.
> 
> 
> Since the first v1 posting of this series, DELETE_COPY_MOVE_AND_ASSIGN
> is renamed to LIBCAMERA_DISABLE_COPY_AND_MOVE (using disable instead of
> deleted), and 'assign' has been removed from the macro names.
> 
> The extensible class was also merged during this time, so it is first
> renamed to be a generic class.h and these macros are added there.
> 
> Kieran Bingham (6):
>   libcamera: Move extensible to class
>   libcamera: class: Provide move and copy disablers
>   libcamera: buffer: Utilise DISABLE_COPY_AND_MOVE
>   libcamera: media_object: Utilise LIBCAMERA_DISABLE_COPY
>   libcamera: Utilise LIBCAMERA_DISABLE_COPY
>   libcamera: MappedBuffer: Disable copy and assignment
> 
>  include/libcamera/buffer.h                    | 10 +++----
>  include/libcamera/camera.h                    |  8 ++---
>  include/libcamera/camera_manager.h            |  6 ++--
>  include/libcamera/{extensible.h => class.h}   | 20 ++++++++++---
>  include/libcamera/controls.h                  |  7 ++---
>  include/libcamera/framebuffer_allocator.h     |  7 +++--
>  include/libcamera/internal/buffer.h           |  4 +++
>  .../libcamera/internal/byte_stream_buffer.h   |  4 +--
>  include/libcamera/internal/camera_sensor.h    |  6 ++--
>  include/libcamera/internal/file.h             |  6 ++--
>  include/libcamera/internal/log.h              |  6 +++-
>  include/libcamera/internal/media_object.h     |  9 ++++--
>  include/libcamera/internal/pipeline_handler.h |  4 +--
>  include/libcamera/internal/v4l2_subdevice.h   |  5 ++--
>  include/libcamera/internal/v4l2_videodevice.h |  6 ++--
>  include/libcamera/meson.build                 |  1 -
>  include/libcamera/request.h                   |  5 ++--
>  src/libcamera/{extensible.cpp => class.cpp}   | 29 ++++++++++++++++---
>  src/libcamera/meson.build                     |  2 +-
>  19 files changed, 94 insertions(+), 51 deletions(-)
>  rename include/libcamera/{extensible.h => class.h} (71%)
>  rename src/libcamera/{extensible.cpp => class.cpp} (85%)
> 
> -- 
> 2.25.1
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list