Giter Site home page Giter Site logo

linked list with signals about collections-c HOT 6 OPEN

srdja avatar srdja commented on May 20, 2024 1
linked list with signals

from collections-c.

Comments (6)

mame98 avatar mame98 commented on May 20, 2024 2

Yeah seems right... I will work on your solution tomorrow...

from collections-c.

mame98 avatar mame98 commented on May 20, 2024 1

Yeah, I will work on this soon...

from collections-c.

ankurdh avatar ankurdh commented on May 20, 2024

Hi @mame98 ,

Thats a good point. I think it's the best to implement a wrapper around the base linked list. This will help us keep the linked list clean with only the functions it's supposed to provide.

  • Ankur

from collections-c.

srdja avatar srdja commented on May 20, 2024

This is not bad idea. The most convinient way to implement this would be to keep the callback pointers in the container structure and just call them from appropriate functions if they are set. Two extra pointers shouldn't make much of a difference unless you're using lots of small containers, where the container structures themselves use a significant portion memory.

So basically if you wanted to set a callback you would do something like this:

ArrayConf ac;
array_conf_init(&ac);

ac.on_add     = my_add_callback;
ac.on_remove  = my_remove_callback;

Array *array;
array_new_conf(&ac, &array); // make a new array with this configuration

This is pretty easy to implement. We just need to add some extra function pointers to container and conf structures and then make sure to call them from appropriate function if they are set.

enum cc_stat array_add(Array *a, void *e) {
    ....
    if (a->on_add) 
        a->on_add() // call if set
}

... and so on

from collections-c.

mame98 avatar mame98 commented on May 20, 2024

Okay, I think the way @ankurdh suggested is a bit better, because as you said that if you do not want the callbacks you are wasting memory.
You would just need to have some small wrapper functions which call the list functions but also trigger the callbacks...

So I would create a small structure like:

typedef struct
{
    List *list;
    on_add;
    on_delete;
    and so on...
}WatchList;

Then you would just implement an (inline) function to get the List from this WatchList. Also if there would be a small function to convert a 'normal' list to a WatchList it would be pretty easy to use...

What do you think?

from collections-c.

srdja avatar srdja commented on May 20, 2024

I don't think that the solution @ankurdh proposed is practical. For one you wouldn't be able to use a List and WatchList interchangeably. Any peace of code that expects a List wouldn't be able to use the WatchList because its essentially a different container with a different API. Another thing is that the wrapper seems redundant because if the caller already knows that it's calling a function that will trigger a callback then you might as well just pass a regular List and a callback to that caller. The point is that this approach just needlessly complicates matters without much benefit.

This type of thing makes sense in languages that have some kind of inheritance where you can pass around a super type and where you can have modified behaviour in sub types, but trying to do this in C is really ugly.

from collections-c.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.