[libcamera-devel] [PATCH] libcamera: request: Add operator<<()

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Jun 3 22:27:57 CEST 2022


Hi Jacopo,

On Fri, Jun 03, 2022 at 06:12:11PM +0200, Jacopo Mondi wrote:
> On Fri, Jun 03, 2022 at 03:46:45PM +0300, Laurent Pinchart wrote:
> > On Fri, Jun 03, 2022 at 11:32:24AM +0200, Jacopo Mondi via libcamera-devel wrote:
> > > With the recent addition of operator<<() to most libcamera core classes
> > > to replace usage of the toString() function, the Request class was left
> > > behind.
> > >
> > > Add operator<<() for the Request class.
> > >
> > > Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> > > ---
> > >  include/libcamera/request.h |  3 +++
> > >  src/libcamera/request.cpp   | 12 ++++++++++++
> > >  2 files changed, 15 insertions(+)
> > >
> > > diff --git a/include/libcamera/request.h b/include/libcamera/request.h
> > > index 1eb537e9b09b..dffde1536cad 100644
> > > --- a/include/libcamera/request.h
> > > +++ b/include/libcamera/request.h
> > > @@ -9,6 +9,7 @@
> > >
> > >  #include <map>
> > >  #include <memory>
> > > +#include <ostream>
> > >  #include <stdint.h>
> > >  #include <string>
> > >  #include <unordered_set>
> > > @@ -75,4 +76,6 @@ private:
> > >  	Status status_;
> > >  };
> > >
> > > +std::ostream &operator<<(std::ostream &out, const Request &r);
> > > +
> > >  } /* namespace libcamera */
> > > diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
> > > index 5704972d86af..f630f0818cbd 100644
> > > --- a/src/libcamera/request.cpp
> > > +++ b/src/libcamera/request.cpp
> > > @@ -594,4 +594,16 @@ std::string Request::toString() const
> > >  	return ss.str();
> > >  }
> > >
> > > +/**
> > > + * \brief Insert a text representation of a Request into an output stream
> > > + * \param[in] out The output stream
> > > + * \param[in] r The Request
> > > + * \return The output stream \a out
> > > + */
> > > +std::ostream &operator<<(std::ostream &out, const Request &r)
> > > +{
> > > +	out << r.toString();
> > > +	return out;
> >
> > Request::toString() already uses an std::stringstream, it's thus better
> > do to this the other way around, move the implementation to operator<<()
> > and implement toString() as a wrapper. See V4L2SubdeviceFormat for
> > instance.
> 
> If not that we need
>          r._d()->pending_.size()
> which is private.
> 
> Either we expose the pendin buffers array (so far we only have
> Request::Private::hasPendingBuffers()) or we keep it the way it is.

You can fix this by making the operator<<() function a friend of the
Request class. That's a very valid use case for a friend statement, as
operator<<() is meant to operate on an instance of the Request class.

> > > +}
> > > +
> > >  } /* namespace libcamera */

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list