[Spice-devel] [PATCH 12/17] Convert message writing from C style to C++ style

Christophe de Dinechin cdupontd at redhat.com
Mon Feb 26 11:05:56 UTC 2018


Good idea. Will do it that way.

> On 26 Feb 2018, at 11:05, Lukáš Hrázký <lhrazky at redhat.com> wrote:
> 
> Get rid of the 'make()' method and the 'msg' member, create the payload
> on the stack in 'write()' and write the header and message in two
> writes.
> ---
> It does split the write for FormatMessage into two, but makes the code a
> bit simpler I think. It reduces the number of combinations the messages
> are constructed/written. Untested, but should work...
> 
> src/spice-streaming-agent.cpp | 25 ++++++-------------------
> 1 file changed, 6 insertions(+), 19 deletions(-)
> 
> diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
> index c174ea4..109b683 100644
> --- a/src/spice-streaming-agent.cpp
> +++ b/src/spice-streaming-agent.cpp
> @@ -95,12 +95,10 @@ struct Message
>               .padding = 0,     // Workaround GCC bug "sorry: not implemented"
>               .type = Info::type,
>               .size = (uint32_t) (Info::size(payload...) - sizeof(hdr))
> -          }),
> -          msg(Info::make(payload...))
> +          })
>     { }
> 
>     StreamDevHeader hdr;
> -    Payload         msg;
> };
> 
> 
> @@ -112,13 +110,10 @@ struct FormatMessage : Message<StreamMsgFormat, FormatMessage>
>     {
>         return sizeof(FormatMessage);
>     }
> -    static StreamMsgFormat make(unsigned w, unsigned h, uint8_t c)
> -    {
> -        return StreamMsgFormat{ .width = w, .height = h, .codec = c, .padding1 = {} };
> -    }
>     size_t write(Stream &stream, unsigned w, unsigned h, uint8_t c)
>     {
> -        return stream.write_all(this, sizeof(*this));
> +        StreamMsgFormat msg{ .width = w, .height = h, .codec = c, .padding1 = {} };
> +        return stream.write_all(&hdr, sizeof(hdr)) + stream.write_all(&msg, sizeof(msg));
>     }
> };
> 
> @@ -131,10 +126,6 @@ struct FrameMessage : Message<StreamMsgData, FrameMessage>
>     {
>         return sizeof(FrameMessage) + length;
>     }
> -    static StreamMsgData make(const void *frame, size_t length)
> -    {
> -        return StreamMsgData();
> -    }
>     size_t write(Stream &stream, const void *frame, size_t length)
>     {
>         return stream.write_all(&hdr, sizeof(hdr)) + stream.write_all(frame, length);
> @@ -158,10 +149,9 @@ struct X11CursorMessage : Message<StreamMsgCursorSet, X11CursorMessage>
>     {
>         return sizeof(X11CursorMessage) + sizeof(uint32_t) * pixel_size(cursor);
>     }
> -    static StreamMsgCursorSet make(XFixesCursorImage *cursor)
> +    size_t write(Stream &stream, XFixesCursorImage *cursor)
>     {
> -        return StreamMsgCursorSet
> -        {
> +        StreamMsgCursorSet msg{
>             .width = cursor->width,
>             .height = cursor->height,
>             .hot_spot_x = cursor->xhot,
> @@ -170,10 +160,7 @@ struct X11CursorMessage : Message<StreamMsgCursorSet, X11CursorMessage>
>             .padding1 = { },
>             .data = { }
>         };
> -    }
> -    size_t write(Stream &stream, XFixesCursorImage *cursor)
> -    {
> -        return stream.write_all(&hdr, sizeof(hdr)) + stream.write_all(pixels.get(), hdr.size);
> +        return stream.write_all(&hdr, sizeof(hdr)) + stream.write_all(&msg, sizeof(msg)) + stream.write_all(pixels.get(), hdr.size);
>     }
>     void fill_pixels(XFixesCursorImage *cursor)
>     {
> -- 
> 2.16.1
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel



More information about the Spice-devel mailing list