View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003306 | unreal | module api | public | 2007-04-28 08:50 | 2015-08-08 16:03 |
Reporter | syzop | Assigned To | syzop | ||
Priority | normal | Severity | feature | Reproducibility | N/A |
Status | resolved | Resolution | fixed | ||
OS | ALL | OS Version | ALL | ||
Product Version | 3.3-alpha0 | ||||
Fixed in Version | 3.4-beta2 | ||||
Summary | 0003306: Attaching objects to clients/channels for modules | ||||
Description | Add the ability to add objects (an integer, string, any structure) to clients and channels. This is needed for various modules to make things easy and fast. | ||||
Additional Information | For stuff like a codepage module, you'll have to store for each user 'this user has codepage X'. Other modules have similar requirements. While in my module I've used various methods, it's simpeler to do in the core (besides, others seem to find it too much of a hassle.. possibly rightfully so ;p). The technique: We shouldn't be using stuff like anope or other progs that let you attach a string to a structure in.. well.. however it works. We should use something like my extcmodes slot system (see Unreal3.3*!), this means that clients and channels get some slots assigned (like 10, or 16, etc..) which then can be filled by modules. This costs some memory but that outweighs the far bigger benefits. chptr->moddata[mymodulechanslot] sptr->moddata[mymoduleuserslot] Advantages vs other aproaches are the same as why we're using it for extcmodes: * much less memory defragmentation: all reference-data is besides eachother (granted, if the data references to something, then that data is not near) * extremely fast: fastest possible method, especially for properties like numbers, but it works fine for strings and struct/binary data as well. it's faster due to the memory layout. Only disadvantage: * Static amount of slots allocated per-user/per-channel. This is not much of a problem, because if we'd allocate.. say.. 10 slots per-channel for stuff (that's 10x4=40 or 10x8=80 bytes), this is already less than if you'd store 2 or 3 properties using any other method that stores moddata than slots (because every malloc() uses like 8 or 16 bytes extra, and you have to store next/prev pointers as well which are another 8 or 16 bytes, plus the modowner.. another 8 or so, etc.. this brings you easily at 40 bytes for just one entry). in short: slots! :) | ||||
Tags | No tags attached. | ||||
3rd party modules | |||||
Date Modified | Username | Field | Change |
---|---|---|---|
2007-04-28 08:50 | syzop | New Issue | |
2007-04-28 08:53 | syzop | Additional Information Updated | |
2007-04-28 08:55 | syzop | Status | new => acknowledged |
2015-08-08 16:03 | syzop | Note Added: 0018593 | |
2015-08-08 16:03 | syzop | Status | acknowledged => resolved |
2015-08-08 16:03 | syzop | Fixed in Version | => 3.4-beta2 |
2015-08-08 16:03 | syzop | Resolution | open => fixed |
2015-08-08 16:03 | syzop | Assigned To | => syzop |
2017-01-06 15:48 | syzop | Category | module => module api |