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


Groups > comp.lang.c > #5882

Re: Multiple Inheritance (Was Re: Reference counting)

From Dr Nick <3-nospam@temporary-address.org.uk>
Newsgroups comp.lang.c
Subject Re: Multiple Inheritance (Was Re: Reference counting)
Date 2011-06-12 07:22 +0100
Message-ID <87hb7vsh51.fsf@temporary-address.org.uk> (permalink)
References <4deb6008$0$28457$703f8584@textnews.kpn.nl> <slrniumpdo.bkn.angel+news@pearlgates.net> <2117f4ec-91e1-45ae-a7cc-4ae7c85603d6@bl1g2000vbb.googlegroups.com> <isv74r$s8b$1@dont-email.me>

Show all headers | View raw


Shao Miller <sha0.miller@gmail.com> writes:

> On 6/6/2011 10:07 PM, Gene wrote:
>> On Jun 5, 7:17 am, Angel<angel+n...@spamcop.net>  wrote:
>>> On 2011-06-05, daknok<radekslu...@gmail.com>  wrote:
>>>
>>>> ...
>>>> If I want to do simple reference counting for different structures I
>>>> would go like this:
>>>> ...
>>>> Though if I have about ten structs, I have ten different functions to
>>>> increase and decrease the reference count. Is it, in some way, possible
>>>> to just provide one function for increasing and one function for
>>>> decreasing the reference count which can be used for all structs with a
>>>> reference count?
>>>
>>> There are number of ways to do this. One of the easiest (but least
>>> flexible) is to start all your structures with the same reference
>>> variable, of the same type, like this:
>>>
>>> struct a
>>> {
>>>          int ref_count;
>>>          char *data;
>>>          char *more_data;
>>>
>>> };
>>>
>>> struct b
>>> {
>>>          int ref_count;
>>>          int number;
>>>          int another_number;
>>>
>>> };
>>>
>>> Now you can safely read the ref_count from any of these structures, for
>>> example like this:
>>>
>>> struct ref_count
>>> {
>>>          int ref_count;
>>>
>>> };
>>>
>>> void increase_refcount(void *data)
>>> {
>>>          ((struct refcount *) data)->refcount++;
>>>
>>> }
>>>
>>> You can safely pass either pointers to struct a or struct b to this
>>> function, and it will work as expected. The standard guarantees that
>>> shared fields at the beginning of structures are compatible. In a way,
>>> this is a primitive C implementation of inheritance.
>>
>> I asked about this here some time back.  The folks who know the
>> Standard well denied that this is portable.  The standard gives you
>> now way to rely on common prefixes of fields to be laid out the same
>> way in memory.  But you _can_ rely on casts between the first field
>> and an enclosing struct type to work correctly. So the fully portable
>> way is this:
>>
>
> Does anyone recall which thread this was asked about in?  I'm curious
> as to whether or not "the folks who know the Standard well" had
> offered concerns beyond alignment.

I asked about it as well when discussing a generic merge-sort that
relied on each structure starting with it's "struct this *next" pointer
(rather than ending as is traditional).  My sort function had a generic
struct of that sort that it cast all incoming structures to.

The consensus was not concerns about alignment - indeed, everybody felt
it would be almost impossible to find a system that it broke on - but
that it was *not* guaranteed by the standard.

IIRC (and I may well not do), if all of them went into a union somewhere
then it would have to work, and if you have multiple compilation units
nothing is going to know that there isn't such a union somewhere, but
nevertheless...
-- 
Online waterways route planner            | http://canalplan.eu
Plan trips, see photos, check facilities  | http://canalplan.org.uk

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


Thread

Reference counting daknok <radekslupik@gmail.com> - 2011-06-05 12:52 +0200
  Re: Reference counting Angel <angel+news@spamcop.net> - 2011-06-05 11:17 +0000
    Re: Reference counting Gene <gene.ressler@gmail.com> - 2011-06-06 20:07 -0700
      Multiple Inheritance (Was Re: Reference counting) Shao Miller <sha0.miller@gmail.com> - 2011-06-11 03:57 -0500
        Re: Multiple Inheritance (Was Re: Reference counting) Dr Nick <3-nospam@temporary-address.org.uk> - 2011-06-12 07:22 +0100
  Re: Reference counting China Blue Angels <chine.bleu@yahoo.com> - 2011-06-05 05:07 -0700
  Re: Reference counting "BartC" <bc@freeuk.com> - 2011-06-05 13:14 +0100
    Re: Reference counting daknok <daknok@example.com> - 2011-06-05 14:22 +0200
      Re: Reference counting "BartC" <bc@freeuk.com> - 2011-06-05 14:45 +0100
        Re: Reference counting daknok <daknok@example.com> - 2011-06-05 17:01 +0200
          Re: Reference counting Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-06-05 18:06 -0400
          Re: Reference counting Dr Nick <3-nospam@temporary-address.org.uk> - 2011-06-12 07:25 +0100
  Re: Reference counting daknok <daknok@example.com> - 2011-06-05 15:29 +0200
  Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-05 12:17 -0500
  Re: Reference counting cri@tiac.net (Richard Harter) - 2011-06-05 17:11 +0000
  Re: Reference counting ImpalerCore <jadill33@gmail.com> - 2011-06-10 11:30 -0700
    Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-10 16:04 -0400
    Re: Reference counting James Kuyper <jameskuyper@verizon.net> - 2011-06-10 22:56 -0400
      Re: Reference counting ImpalerCore <jadill33@gmail.com> - 2011-06-11 12:36 -0700
        Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-11 17:23 -0500
          Re: Reference counting luser- -droog <mijoryx@yahoo.com> - 2011-06-12 15:15 -0700
            Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-12 21:13 -0500
              Re: Reference counting "Chris M. Thomasson" <cristom@charter.net> - 2011-06-13 12:37 -0700
                Re: Reference counting "Chris M. Thomasson" <cristom@charter.net> - 2011-06-13 12:54 -0700
                Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-13 16:40 -0500
          Re: Reference counting ImpalerCore <jadill33@gmail.com> - 2011-06-13 07:34 -0700
            Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-13 14:26 -0500
              Re: Reference counting ImpalerCore <jadill33@gmail.com> - 2011-06-13 12:47 -0700
                Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-13 17:33 -0500
                Re: Reference counting ImpalerCore <jadill33@gmail.com> - 2011-06-14 12:14 -0700
                Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-15 02:16 -0500
                Re: Reference counting "Chris M. Thomasson" <cristom@charter.net> - 2011-06-15 15:34 -0700
                Re: Reference counting "Chris M. Thomasson" <cristom@charter.net> - 2011-06-15 15:42 -0700
                Re: Reference counting "Chris M. Thomasson" <cristom@charter.net> - 2011-06-16 13:45 -0700
                Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-16 17:02 -0500
                Re: Reference counting "Chris M. Thomasson" <cristom@charter.net> - 2011-06-16 15:18 -0700
                Re: Reference counting "Chris M. Thomasson" <cristom@charter.net> - 2011-06-16 16:01 -0700
                Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-16 18:44 -0500
                Re: Reference counting "Chris M. Thomasson" <cristom@charter.net> - 2011-06-16 17:11 -0700
                Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-16 18:39 -0500
        Re: Reference counting "Chris M. Thomasson" <cristom@charter.net> - 2011-06-11 16:51 -0700
          Re: Reference counting "Chris M. Thomasson" <cristom@charter.net> - 2011-06-11 18:28 -0700
            Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-12 16:10 -0500
            Re: Reference counting ImpalerCore <jadill33@gmail.com> - 2011-06-13 07:36 -0700
      Re: Reference counting Tim Rentsch <txr@alumni.caltech.edu> - 2011-06-14 15:00 -0700
  Re: Reference counting luser- -droog <mijoryx@yahoo.com> - 2011-06-13 21:46 -0700
    Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-14 03:19 -0500
      Re: Reference counting Angel <angel+news@spamcop.net> - 2011-06-14 07:31 +0000
        Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-14 05:02 -0500
        Re: Reference counting Keith Thompson <kst-u@mib.org> - 2011-06-14 09:03 -0700
          Re: Reference counting luser- -droog <mijoryx@yahoo.com> - 2011-06-14 10:23 -0700
            Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-14 13:46 -0500
          Re: Reference counting Tim Rentsch <txr@alumni.caltech.edu> - 2011-06-14 15:05 -0700
            Re: Reference counting Keith Thompson <kst-u@mib.org> - 2011-06-14 16:44 -0700
              Re: Reference counting Tim Rentsch <txr@alumni.caltech.edu> - 2011-06-15 06:54 -0700
                Re: Reference counting Keith Thompson <kst-u@mib.org> - 2011-06-15 08:46 -0700
                Re: Reference counting pete <pfiland@mindspring.com> - 2011-06-15 22:19 -0400
                Re: Reference counting James Kuyper <jameskuyper@verizon.net> - 2011-06-15 23:03 -0400
                Re: Reference counting Tim Rentsch <txr@alumni.caltech.edu> - 2011-06-19 14:48 -0700
        Re: Reference counting Seebs <usenet-nospam@seebs.net> - 2011-06-14 17:16 +0000
    Re: Reference counting luser- -droog <mijoryx@yahoo.com> - 2011-06-14 20:53 -0700
      Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-16 18:49 -0500
  Re: Reference counting "io_x" <a@b.c.invalid> - 2011-06-14 08:30 +0200
    Re: Reference counting "io_x" <a@b.c.invalid> - 2011-06-14 09:15 +0200
      Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-14 04:21 -0500
      Re: Reference counting "io_x" <a@b.c.invalid> - 2011-06-16 10:35 +0200
        Re: Reference counting Ian Collins <ian-news@hotmail.com> - 2011-06-16 20:36 +1200
        Re: Reference counting "io_x" <a@b.c.invalid> - 2011-06-16 11:21 +0200
          Re: Reference counting "io_x" <a@b.c.invalid> - 2011-06-19 17:57 +0200
          Re: Reference counting "io_x" <a@b.c.invalid> - 2011-06-19 20:01 +0200
            Re: Reference counting Keith Thompson <kst-u@mib.org> - 2011-06-19 11:07 -0700
            Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-19 23:15 -0500
              Re: Reference counting "io_x" <a@b.c.invalid> - 2011-06-20 08:21 +0200
        Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-16 19:05 -0500
          Re: Reference counting Ian Collins <ian-news@hotmail.com> - 2011-06-17 12:09 +1200
  Re: Reference counting luser- -droog <mijoryx@yahoo.com> - 2011-06-15 08:40 -0700
  Re: Reference counting "christian.bau" <christian.bau@cbau.wanadoo.co.uk> - 2011-06-16 11:08 -0700
    Re: Reference counting Shao Miller <sha0.miller@gmail.com> - 2011-06-16 14:42 -0400

csiph-web