Initialize modules?

Executor

I see you
Reaction score
57
JASS:

module
   //someVars
   static boolexpr enumFunc
   static method someEnumFunc takes nothing returns false
      call KillUnit(GetFilterUnit())
      return false 
   endmethod
   static method someMethod takes nothing returns nothing
      call EnumUnitsInRange(GROUP,...,.enumFunc)
   endmethod

   moduleInitializer takes nothing returns nothing // < ===
      set .enumFunc = Condition(.someEnumFunc)
   endmoduleInitializer
endmodule


Does something like this exist? Or do I have to break the module up in [lib,module,global,lib init]?
 

Troll-Brain

You can change this now in User CP.
Reaction score
85
JassHelper manual from Vexorian said:
Since Jasshelper 0.9.Z.1, private onInit methods inside a module will be executed on init once per struct implementing it. Multiple onInit methods from multiple modules can coexist with the struct's onInit method as well.
So you can use a static method called onInit in your module.
But care, a module initializer is currently done before ANY OTHER initializer, regardless any library requires (silly idea from a silly request imho).
And it's not likely to be changed since Vexorian doesn't support vJass anymore.

Which means :

JASS:
library A initializer init requires B

private module m
  private static method onInit takes nothing returns nothing
    call BJDebugMsg("library A : module initializer")
  endmethod
endmodule

private struct s
   implement m
endstruct

private function init takes nothing returns nothing
   call BJDebugMsg("library A : library initializer")
endfunction

endlibrary

library B initializer init

private function init takes nothing returns nothing
   call BJDebugMsg("library B : library initializer")
endfunction

endlibrary


Will show :
"library A : module initializer"
"library B : library initializer"
"library A : library initializer"

But hopefully if you also use a module with an initializer inside the library B it will show :

"library B : module initializer"
"library A : module initializer"
"library B : library initializer"
"library A : library initializer"

So if you really want an initializer for module you may want to don't use anymore library initializer, but instead an empty struct which implement a module initializer, or eventually just implement the module initializer inside some of your already created struct, but i don't recommend that for the code maintenance and read of it.
 

Jesus4Lyf

Good Idea™
Reaction score
397
But care, a module initializer is currently done before ANY OTHER initializer, regardless any library requires (silly idea from a silly request imho).
It's beyond silly. It's absurd.
In all my libraries I now have to implement their initialisation as a module. :)

You should not be able to initialise before a requirement has initialised, but unfortunately someone depended on this ridiculous behaviour and Vex listened. Now stuff would break if it were to change, of course.

Using a struct extending an array is a useful way of doing this without side effects.
 

Troll-Brain

You can change this now in User CP.
Reaction score
85
Here is the keyword "at the moment", but what about later ?
That's better to forget library initializers now, in order to prevent odd eventual future bugs.
 

Troll-Brain

You can change this now in User CP.
Reaction score
85
At very least the blue version, didn't checked the others.

Vexorian said:
"Blue" TimerUtils DEFAULT
(When USE_HASH_TABLE is set to true)
Uses a hashtable object from wc3 patch 1.24b+ or later. These things are very fast though not as fast as just an array lookup. So it is the 'slowest'...

... But it is the safest! There are no limits to the number of timers you can have.
False.

Once you have reached the limit QUANTITY, you're fucked.
So then i would just use a faster version if i need to care about the number of timers ...
 

Bribe

vJass errors are legion
Reaction score
67
You need that many timers? For what?

Personally, I think any good recycler should not be allocating a huge stack of live timers, rather, if the timers reach a certain point, they should be flagged to be destroyed when done. What if, at the beginning of the game, you need 100, but for the rest of the game you only need two. The other 98 are wasting RAM. That's why I implement my own recycling systems instead of use others'.
 

Jesus4Lyf

Good Idea™
Reaction score
397
>There are no limits to the number of timers you can have.
Actually, I noticed that that is false as well. There is no point to the blue version of timer utils in its current state.

>You need that many timers? For what?
Irrelevant to it being wrong.

>The other 98 are wasting RAM.
No one cares about those little shreds of RAM. If it doesn't take 100 MB, it doesn't make a difference.
 

Jesus4Lyf

Good Idea™
Reaction score
397
My crappy little computer cares :p
You need to seriously re-evaluate the performance impact of having idle timers in memory. I had a 5 year old laptop which cared far more about the computing power required to destroy/create timers than about the minuscule amount of RAM required to stash them. :)

That is to say, destroy/create timers and monitor when they should be destroyed/created... as you suggested.

If you have any proof that having 100 timers in RAM doing nothing impacts the performance of your map (whatsoever), I'm most interested...
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
Tested on 9 years old pentium 4 1.6GHz + 1GB SD RAM + sucky Intel Graphic. Same fps with 0 timers and 500 timers.
 

Bribe

vJass errors are legion
Reaction score
67
Hmm... no wonder TimerUtils is so popular, if people can get away with that.
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
If you really want to use TimerUtils, I recommend TimerUtils Purple. It has 4096 timers limitation, far more than Blue and it is faster than Blue too.
 

Bribe

vJass errors are legion
Reaction score
67
I do not see myself importing it in the forseeable future, but thank you.
 

Jesus4Lyf

Good Idea™
Reaction score
397
Tested on 9 years old pentium 4 1.6GHz + 1GB SD RAM + sucky Intel Graphic. Same fps with 0 timers and 500 timers.
Of course, this is a crappy test.
I recommend TimerUtils Purple. It has 4096 timers limitation, far more than Blue and it is faster than Blue too.
Of course, this is an unsubstantiated claim (without presenting any evidence).
Hmm... no wonder TimerUtils is so popular, if people can get away with that.
This is a mediocre conclusion. You can get away with that with hashtable attachment and any form of recycling.

The point being made is irrelevant to TU - it's that RAM consumption by recycling timers does not matter. :)
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
Of course, this is an unsubstantiated claim (without presenting any evidence).
Tested by using Stopwatch native.
 
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

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top