struct allocator queries

hgkjfhfdsj

Active Member
Reaction score
55
i was looking through the jass conversion of a vjass code and i found a few questions/ in of further elaboration

JASS:
function s__MeatHook___Data__allocate takes nothing returns integer
 local integer this=si__MeatHook___Data_F
    if (this!=0) then
        set si__MeatHook___Data_F=si__MeatHook___Data_V[this]
    else
        set si__MeatHook___Data_I=si__MeatHook___Data_I+1
        set this=si__MeatHook___Data_I
    endif
    if (this>8190) then
        call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,1000.,"Unable to allocate id for an object of type: MeatHook___Data")
        return 0
    endif

   set s__MeatHook___Data_extending[this]= false //fields
   set s__MeatHook___Data_linknumber[this]=0 //fields
    set si__MeatHook___Data_V[this]=-1
 return this
endfunction

//Generated destructor of MeatHook___Data
function s__MeatHook___Data_deallocate takes integer this returns nothing
    if this==null then
            call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,1000.,"Attempt to destroy a null struct of type: MeatHook___Data")
        return
    elseif (si__MeatHook___Data_V[this]!=-1) then
            call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,1000.,"Double free of type: MeatHook___Data")
        return
    endif
    set si__MeatHook___Data_V[this]=si__MeatHook___Data_F
    set si__MeatHook___Data_F=this
endfunction


what is the purpose of ....Data_F? i cant seem to see the logic behind the Data_F in the allocation process :confused:
initial value i saw was set to 0
ty.

EDIT
after rereading it i understood something.. i think..
correct me if im wrong. ive gathered that,
allocator works like a singly linked list (?):
V[this] holds either -1(in use), or the head's next node
I = index allocator
F = head of recycled indexes

EDIT2
JASS:
globals
    integer instanceCount = 0
    integer array recycle
    integer recycleCount = 0
endglobals

function allocate takes nothing returns integer
    if (recycleCount != 0) then
        set recycleCount = recycleCount - 1
        return recycle[recycleCount]
    endif
    set instanceCount = instanceCount + 1
    return instanceCount
endfunction

function deallocate takes integer this returns nothing
    set recycle[recycleCount] = this
    set recycleCount = recycleCount + 1
endfunction


found in (posted by nestharus) -- which allocator method would be most preferred for a vanilla jass user implementing pseudo/selfmade structs? :(.
 

Bribe

vJass errors are legion
Reaction score
67
JASS:
after rereading it i understood something.. i think..
correct me if im wrong. ive gathered that,
allocator works like a singly linked list (?):
V[this] holds either -1(in use), or the head's next node
I = index allocator
F = head of recycled indexes


Yes across the board.

which allocator method would be most preferred for a vanilla jass user implementing pseudo/selfmade structs? .

The standard ones by Vexorian have double-free protection, which is good to have. Though if you have an array struct like nestharus, you cannot have stub methods/ extends struct/ extends interface/ onDestroy recognition/ any kind of inheritance. You have to forge it all with modules/ delegates, which can be taxing on the map file size if you have a huge module you have to import many times just for inheritance.
 

Nestharus

o-o
Reaction score
84
Actually Bribe, the map size would be less to the same by making it from scratch = P. Remember, stub methods and etc have to be translated into JASS code = ).

most of the time, doing it from scratch = less code and is more efficient for the occasion

The only issue with doing it from scratch is that it's tedious ; O.
 

Bribe

vJass errors are legion
Reaction score
67
If you have a 700-line long parent struct and have to convert it to a module to be imported into many would-be "child structs", you are increasing your map file size by way more than you would with the alternative. One of the reasons the gazillion-line-long Spell Struct freaks me out so much.
 

Bribe

vJass errors are legion
Reaction score
67
You know how it's a pretty simple process to extend a parent struct? The idea behind this whole thing is to make it a simple, user-friendly process to use a callback system I developed.

Look at a parent struct that calls an overridable "onLoop" method. The user only has to do:

JASS:
struct child extends parent
    method onLoop takes nothing returns nothing
        call BJDebugMsg(I2S(this))
    endmethod
endstruct


And, instead of doing parent.create(), they do child.create().

Is there something this simple for a user to pick up on that uses user-crafted delegates/triggers?
 

hgkjfhfdsj

Active Member
Reaction score
55
You have to forge it all with modules/ delegates, which can be taxing on the map file size if you have a huge module you have to import many times just for inheritance.
cant do that anyways..mac users, gotta do the c&p way -___-

ill go for the array struct.. not that i really need any kind of inheritance (or something) atm..

ty both :)
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Ghan Ghan:
    Still lurking
    +3
  • The Helper The Helper:
    I am great and it is fantastic to see you my friend!
    +1
  • The Helper The Helper:
    If you are new to the site please check out the Recipe and Food Forum https://www.thehelper.net/forums/recipes-and-food.220/
  • Monovertex Monovertex:
    How come you're so into recipes lately? Never saw this much interest in this topic in the old days of TH.net
  • Monovertex Monovertex:
    Hmm, how do I change my signature?
  • tom_mai78101 tom_mai78101:
    Signatures can be edit in your account profile. As for the old stuffs, I'm thinking it's because Blizzard is now under Microsoft, and because of Microsoft Xbox going the way it is, it's dreadful.
  • The Helper The Helper:
    I am not big on the recipes I am just promoting them - I use the site as a practice place promoting stuff
    +2
  • Monovertex Monovertex:
    @tom_mai78101 I must be blind. If I go on my profile I don't see any area to edit the signature; If I go to account details (settings) I don't see any signature area either.
  • The Helper The Helper:
    You can get there if you click the bell icon (alerts) and choose preferences from the bottom, signature will be in the menu on the left there https://www.thehelper.net/account/preferences
  • The Helper The Helper:
    I think I need to split the Sci/Tech news forum into 2 one for Science and one for Tech but I am hating all the moving of posts I would have to do
  • The Helper The Helper:
    What is up Old Mountain Shadow?
  • The Helper The Helper:
    Happy Thursday!
    +1
  • Varine Varine:
    Crazy how much 3d printing has come in the last few years. Sad that it's not as easily modifiable though
  • Varine Varine:
    I bought an Ender 3 during the pandemic and tinkered with it all the time. Just bought a Sovol, not as easy. I'm trying to make it use a different nozzle because I have a fuck ton of Volcanos, and they use what is basically a modified volcano that is just a smidge longer, and almost every part on this thing needs to be redone to make it work
  • Varine Varine:
    Luckily I have a 3d printer for that, I guess. But it's ridiculous. The regular volcanos are 21mm, these Sovol versions are about 23.5mm
  • Varine Varine:
    So, 2.5mm longer. But the thing that measures the bed is about 1.5mm above the nozzle, so if I swap it with a volcano then I'm 1mm behind it. So cool, new bracket to swap that, but THEN the fan shroud to direct air at the part is ALSO going to be .5mm to low, and so I need to redo that, but by doing that it is a little bit off where it should be blowing and it's throwing it at the heating block instead of the part, and fuck man
  • Varine Varine:
    I didn't realize they designed this entire thing to NOT be modded. I would have just got a fucking Bambu if I knew that, the whole point was I could fuck with this. And no one else makes shit for Sovol so I have to go through them, and they have... interesting pricing models. So I have a new extruder altogether that I'm taking apart and going to just design a whole new one to use my nozzles. Dumb design.
  • Varine Varine:
    Can't just buy a new heatblock, you need to get a whole hotend - so block, heater cartridge, thermistor, heatbreak, and nozzle. And they put this fucking paste in there so I can't take the thermistor or cartridge out with any ease, that's 30 dollars. Or you can get the whole extrudor with the direct driver AND that heatblock for like 50, but you still can't get any of it to come apart
  • Varine Varine:
    Partsbuilt has individual parts I found but they're expensive. I think I can get bits swapped around and make this work with generic shit though
  • Ghan Ghan:
    Heard Houston got hit pretty bad by storms last night. Hope all is well with TH.
  • The Helper The Helper:
    Power back on finally - all is good here no damage
    +2
  • V-SNES V-SNES:
    Happy Friday!
    +1
  • The Helper The Helper:
    New recipe is another summer dessert Berry and Peach Cheesecake - https://www.thehelper.net/threads/recipe-berry-and-peach-cheesecake.194169/

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top