Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <uu8lqk$3gtd0$1@i2pn2.org>
Deutsch   English   Français   Italiano  
<uu8lqk$3gtd0$1@i2pn2.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.misty.com!weretis.net!feeder6.news.weretis.net!i2pn.org!i2pn2.org!.POSTED!not-for-mail
From: fir <fir@grunge.pl>
Newsgroups: comp.lang.c
Subject: Re: macro for fir list?
Date: Sat, 30 Mar 2024 10:25:37 +0100
Organization: i2pn2 (i2pn.org)
Message-ID: <uu8lqk$3gtd0$1@i2pn2.org>
References: <uu3s0m$3av2s$1@i2pn2.org> <uu88uo$qv85$3@dont-email.me> <uu8k48$3gr5r$1@i2pn2.org> <uu8leu$3gsq5$1@i2pn2.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Sat, 30 Mar 2024 09:25:41 -0000 (UTC)
Injection-Info: i2pn2.org;
	logging-data="3700128"; mail-complaints-to="usenet@i2pn2.org";
	posting-account="+ydHcGjgSeBt3Wz3WTfKefUptpAWaXduqfw5xdfsuS0";
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0 SeaMonkey/2.24
X-Spam-Checker-Version: SpamAssassin 4.0.0
In-Reply-To: <uu8leu$3gsq5$1@i2pn2.org>
Bytes: 6127
Lines: 139

fir wrote:
> fir wrote:
>> Opus wrote:
>>> On 28/03/2024 14:40, fir wrote:
>>>>
>>>> you know famous fir list
>>>>
>>>> fir list its a list container i somewhat "invented",
>>>> i write "invented" as its reasonably simple thing but i never heard
>>>> anyone uses it so as for me i invented it for personal use and use it
>>>
>>> It's a pretty common thing though. It's just that it's not standard, so
>>> everyone does it pretty much in their own way.
>>>
>>> In my way, I avoid to realloc the 'dynamic array' everytime a new item
>>> is appended, as it can be a costly operation. I pre-allocate for a
>>> certain number of items, and keep track of the current number of items
>>> and the current size of the 'dynamic array'. If there is enough room
>>> left, I just add the item, no realloc needed. If there isn't, then I
>>> realloc, with not just room for 1 item, but a whole new block, for the
>>> same reason. You get the idea.
>>>
>>> This is a common way of dealing with such dynamic containers. (See: bump
>>> allocators, and all that...)
>>>
>>>> some could usually wrote a more convenient Add "method" not to pass
>>>> structures but just arguments and struct assigment do inside
>>>
>>>  From what I get - it's not fully clear - you'd like to directly pass a
>>> structure 'literal' to your function, rather than having to go via an
>>> intermediate local variable.
>>>
>>> This is exactly what C99 has brought, among other things, for over 20
>>> years. Do not hesitate to use it: compound literals.
>>>
>>> For instance with your code, you can do this instead:
>>>
>>> Fir_List_AddOne(&(struct Fir_List_Entry){ 11, 22 });
>>>
>>> Yes, the 'cast' in front of the braces is mandatory for compound
>>> literals.
>>>
>>> Note that your posted code is incorrect, you need to either refer to
>>> 'Fir_List_Entry' with 'struct Fir_List_Entry', or typedef it prior.
>>> I think omitting the 'struct' is allowed in C++, not so in C.
>>>
>>> Conversely, I'm not sure compound literals (which I find very handy) are
>>> available in C++. But if you were using C++, you wouldn't need to do the
>>> above anyway, so. Just mentioning it.
>>>
>>
>> i think teh idea is rather not obvius, i agree people use dynamic
>> alocation, more rarely they use reallock atc but the pure idea
>> of list like here is imo not much in use imo... - if that would be in
>> use it would be generally used as this is some kind of composition
>> pattern and that would substitule ways people usually du such things
>> in c largely...as to the line you say i may test it
>>
>> i coode in c++ mode and in c mode tu though in c++ more often
>>
>> checked seem not to work: error: taking adress of temporary
>>
>> as this list idea people may obviously take it uuse it and then say, oh,
>> i was using it - but in facy as i know how c people code (right from
>> this group etc) they dont use it, unless thay maybe begin using it in
>> last few years
>>
>> when i started using it (see my more historic post about 'chunks' and
>> 'splitter') i used the appproach with variable holding the preallocated
>> value... then i dropped it becouse reallock already stores such number
>> under the hood so this is kinde reapeating the same thing - but then
>> later it showed that stiill doubling it may speed things becouse
>> (as far as i remember becouse i dont remember exact values ) this
>> call to reallock even if this do almosc nothing still may cost if this
>> is in more time critical case
>>
>>
>>
>>
> note i presented somewhat complicated versions of it (for structures,
> longer names and indeksed a key (which is in fact dictionary)
>
> quite useble would be tiny crafted versions of it - most simple
>
>
> // "ints.h" - int list cntainer
>
>    int* ints = NULL; int ints_size = 0;
>    void ints_add(int val)  {
>       ints = (int*)realloc(ints, ++ints_size*sizeof(int));
>       ints[ints_size-1] = val;
>       return ;  }
>

(btw i consider such containers to be a part of my sickle.c library )

one could also write a one line add version, i hope its right

   int* ints = NULL; int ints_size = 0;

   void ints_add(int 
val){(ints=(int*)realloc(ints,++ints_size*sizeof(int)))[ints_size-1]=val;}

if that would be so common people wouldnt talk about crap c++ vector so much


> //main.c
>
>   void Test()
>    {
>
>
>      ints_add(100);
>      ints_add(101);
>      ints_add(102);
>      ints_add(114);
>
>      for(int i=0; i<ints_size;i++) printf("\n%d", ints[i]);
>
>      ints_size=0; //reset
>
>      ints_add(200);
>      ints_add(221);
>      ints_add(202);
>      ints_add(214);
>
>      for(int i=0; i<ints_size;i++) printf("\n%d", ints[i]);
>
>   }
>
> im not quite belive people use it as its such good idea if people would
> use it it should be regularelly known and used and i never seen nor hear
> of this (at least not before i get to use it few years ago)
>
> people rather use c__ vectror sh*t instead of that and that is better
>
> programming is a lot about composition and this changes composition
> a lot
>