<div dir="ltr"><div dir="ltr">Hi Laurent,<div><br></div><div>Thank you for your review feedback.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 27 Apr 2021 at 08:18, Laurent Pinchart <<a href="mailto:laurent.pinchart@ideasonboard.com">laurent.pinchart@ideasonboard.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Naush,<br>
<br>
Thank you for the patch.<br>
<br>
On Mon, Apr 19, 2021 at 02:34:50PM +0100, Naushir Patuck wrote:<br>
> Add a new Merge method to the Metadata class. This will move all<br>
> key/value pairs between a source and destination metadata object. Once<br>
> complete, the source Metadata object will be empty.<br>
> <br>
> Signed-off-by: Naushir Patuck <<a href="mailto:naush@raspberrypi.com" target="_blank">naush@raspberrypi.com</a>><br>
> ---<br>
>  src/ipa/raspberrypi/controller/metadata.hpp | 12 ++++++++++++<br>
>  1 file changed, 12 insertions(+)<br>
> <br>
> diff --git a/src/ipa/raspberrypi/controller/metadata.hpp b/src/ipa/raspberrypi/controller/metadata.hpp<br>
> index 319f2320fc70..1d3e941b3e52 100644<br>
> --- a/src/ipa/raspberrypi/controller/metadata.hpp<br>
> +++ b/src/ipa/raspberrypi/controller/metadata.hpp<br>
> @@ -75,6 +75,18 @@ public:<br>
>               return *this;<br>
>       }<br>
>  <br>
> +     void Merge(Metadata &other)<br>
> +     {<br>
> +             std::lock_guard<std::mutex> lock(mutex_);<br>
> +             std::lock_guard<std::mutex> other_lock(other.mutex_);<br>
> +<br>
> +             for (auto const &kv: other.data_)<br>
> +                     data_[kv.first] = std::move(kv.second);<br>
<br>
Can't you use<br>
<br>
                data_.merge(other.data_);<br></blockquote><div><br></div><div>Sadly not.  std::map::merge() will not overwrite elements that are present</div><div>in the destination, which is what I want.  None of the insert type methods</div><div>do actually.  I toyed with doing something like:</div><div><br></div><div>other.data_.merge(data_);</div><div>std::swap(other.data_, data_);</div><div><br></div><div>which would achieve what I want, but thought it might look a bit cryptic.</div><div>Not sure about any performance benefits from using this construct vs</div><div>the explicit loop.</div><div><br></div><div>Perhaps I should be a bit clearer with the method name, and call it</div><div>Overwrite()?  Thoughts?</div><div><br></div><div>Regards,</div><div>Naush</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
N<br>
<br>
> +<br>
> +             /* Render the other object as empty now! */<br>
> +             other.data_.clear();<br>
> +     }<br>
> +<br>
>       template<typename T><br>
>       T *GetLocked(std::string const &tag)<br>
>       {<br>
<br>
-- <br>
Regards,<br>
<br>
Laurent Pinchart<br>
</blockquote></div></div>