Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #18516

Re: What is the right way to do this simple thing

From cri@tiac.net (Richard Harter)
Newsgroups comp.lang.c
Subject Re: What is the right way to do this simple thing
Date 2012-03-11 04:46 +0000
Message-ID <4f5c2af2.1978932789@text.giganews.com> (permalink)
References (1 earlier) <d4eb653e-30b3-4393-92fc-17b7732575ec@fk28g2000vbb.googlegroups.com> <4f5bde4b.1959309002@text.giganews.com> <9s28jrFf51U2@mid.individual.net> <4f5bf4f9.1965115079@text.giganews.com> <9s2cmhFf52U1@mid.individual.net>

Show all headers | View raw


On Sun, 11 Mar 2012 14:15:52 +1300, Ian Collins <ian-news@hotmail.com>
wrote:

>On 03/11/12 01:44 PM, Richard Harter wrote:
>> On Sun, 11 Mar 2012 13:06:18 +1300, Ian Collins<ian-news@hotmail.com>
>> wrote:
>>
>>> On 03/11/12 12:31 PM, Richard Harter wrote:
>>>> On Sat, 10 Mar 2012 14:12:17 -0800 (PST), ImpalerCore
>>>> <jadill33@gmail.com>   wrote:
>>>>
>>>>> On Mar 10, 2:26 pm, cri@tiac.net (Richard Harter) wrote:
>>>>>> Suppose that I have some data that is pointer free. =A0It isn't
>>>>>> necessarily serialized in some format such as JSON but I would like to
>>>>>> be able to copy it from one from one machine to another compatible
>>>>>> machine and use it without trouble. Also I don't want to pass around
>>>>>> a collection of items and I want everything to be properly aligned.
>>>>
>>>> [snip remainder of statement, and comments on an approach]
>>>>
>>>> I thought of doing an align_max kind of thing but it seems to me that
>>>> there are problems with that.  One is that align_max is not a C89
>>>> thing and that is one of the constraints.  A second is that it gets a
>>>> bit cumbersome.
>>>>
>>>> I thought of using a bit of anti-social casting.  Start out with
>>>>
>>>>       struct load_package {
>>>>           data_type type;
>>>>           size_t    total_len;
>>>>           size_t    data_len;
>>>>           int       offset;
>>>>           T         data;
>>>>       };
>>>>
>>>> Then the package struct is the same as the load_package struct except
>>>> for the final char[] hack.  Compute the offset of the data, stuff it
>>>> in the struct, and blithely set
>>>>
>>>> 	pkg = (struct package *)&load_pkg;
>>>>
>>>> I think that works, modulo typoes, but it's a bit of a crock because
>>>> you need a separate struct for every data type.
>>>
>>> Why don't you just use the usual union in a struct technique?
>>
>> You might spell out what you think "the usual"  is; I looked at
>> several variations and it looked like there were subtle problems with
>> all of them.  Perhaps I missed something.
>
>struct load_package {
>   message_type type;       /* The type has access info    */
>   size_t       total_len;  /* Total length of the package */
>   size_t       data_len;   /* Length of the data          */
>   union {
>     payload_type1;
>     payload_type2;
>   } payload;
>};

Unless you have something in mind that I'm missing this won't do at
all.  First of all there is no guarantee of alignment - there may have
to be padding between data_len and the union.  Secondly I really hope
you aren't suggesting that every different payload type in a program
must be in that union.   

The point of the second bit of code that I did is that it does take
care of alignment and doesn't drag in stuff from all other
serializations.


Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-10 19:26 +0000
  Re: What is the right way to do this simple thing Don Y <this@isnotme.com> - 2012-03-10 12:57 -0700
  Re: What is the right way to do this simple thing ImpalerCore <jadill33@gmail.com> - 2012-03-10 14:12 -0800
    Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-10 23:31 +0000
      Re: What is the right way to do this simple thing Ian Collins <ian-news@hotmail.com> - 2012-03-11 13:06 +1300
        Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-11 00:44 +0000
          Re: What is the right way to do this simple thing Ian Collins <ian-news@hotmail.com> - 2012-03-11 14:15 +1300
            Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-11 04:46 +0000
              Re: What is the right way to do this simple thing Ian Collins <ian-news@hotmail.com> - 2012-03-11 21:27 +1300
                Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-11 17:23 +0000
                Re: What is the right way to do this simple thing Ian Collins <ian-news@hotmail.com> - 2012-03-12 10:01 +1300
                Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-13 21:18 +0000
                Re: What is the right way to do this simple thing Ian Collins <ian-news@hotmail.com> - 2012-03-14 10:23 +1300
              Re: What is the right way to do this simple thing Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-03-11 11:59 +0000
                Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-11 16:51 +0000
                Re: What is the right way to do this simple thing Gene <gene.ressler@gmail.com> - 2012-03-13 07:32 -0700
                Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-13 21:46 +0000
      Re: What is the right way to do this simple thing ImpalerCore <jadill33@gmail.com> - 2012-03-12 07:28 -0700
        Re: What is the right way to do this simple thing ImpalerCore <jadill33@gmail.com> - 2012-03-12 08:13 -0700
        Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-13 21:51 +0000
  Re: What is the right way to do this simple thing Tim Rentsch <txr@alumni.caltech.edu> - 2012-03-10 14:21 -0800
    Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-11 01:40 +0000
      Re: What is the right way to do this simple thing Tim Rentsch <txr@alumni.caltech.edu> - 2012-03-11 14:11 -0700
        Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-13 21:56 +0000
          Re: What is the right way to do this simple thing Tim Rentsch <txr@alumni.caltech.edu> - 2012-03-14 14:55 -0700
            Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-15 21:55 +0000
              Re: What is the right way to do this simple thing Tim Rentsch <txr@alumni.caltech.edu> - 2012-03-19 13:33 -0700
  Re: What is the right way to do this simple thing Malcolm McLean <malcolm.mclean5@btinternet.com> - 2012-03-10 15:21 -0800
    Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-11 00:47 +0000
  Re: What is the right way to do this simple thing Philip Lantz <prl@canterey.us> - 2012-03-11 01:07 -0800
    Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-11 16:14 +0000
  Re: What is the right way to do this simple thing Markus Wichmann <nullplan@gmx.net> - 2012-03-11 13:47 +0100
    Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-11 16:24 +0000
  Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-11 21:01 +0000
    Re: What is the right way to do this simple thing Anders Wegge Keller <wegge@wegge.dk> - 2012-03-12 00:05 +0100
      Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-13 21:57 +0000
    Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-11 23:06 +0000
      Re: What is the right way to do this simple thing Geoff <geoff@invalid.invalid> - 2012-03-11 17:34 -0700
        Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-13 22:00 +0000
          Re: What is the right way to do this simple thing Geoff <geoff@invalid.invalid> - 2012-03-13 18:12 -0700
            Re: What is the right way to do this simple thing cri@tiac.net (Richard Harter) - 2012-03-14 03:38 +0000
              Re: What is the right way to do this simple thing Geoff <geoff@invalid.invalid> - 2012-03-14 00:49 -0700

csiph-web