Snippet CSA - Custom Struct Allocator

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
SSA - Safety Struct Allocator

JASS:

//////////////////////////////////
//    ____   ____   
//   /  __| / ___|  /\     SAFETY STRUCT ALLOCATOR v1.0.1
//   \ \    \ \    /__\       by kingking
//   _\ \   _\ \  / || \
//  |___/  |___/ /_|  |_\
//
//  What is SSA?
//  It is a safety struct allocator.
//
//  Why use this?
//  This is safer than default struct allocator.
//
//  Who should use this?
//  Who want safety first.
//
//  When to use this?
//  Anywhere you like. =D
//
//  How to use this?
//  Put "implement CSA" in your struct.
//  Replace vars.onDestroy with vars.customDestroy
//  Replace struct.allocate with struct.get
//  Replace vars.destroy with vars.release
//  CSA featured structs must extends array for safety issues.
//
//  Features :
//  Recycle indexes
//  Double-free protection
//
//  Testing(If you want) :
//  Run in debug mode.
//  Release 2 same struct index. You can see error report.
//
//  Requirements :
//  Jasshelper (As new as possible)
///////////////////////////////////
library SafetyStructAllocator
    
   public struct METHODS extends array
        method customDestroy takes nothing returns nothing
        endmethod
    endstruct
    
endlibrary

    module SSA
        private static delegate SafetyStructAllocator_METHODS FUNCTIONS=0
        private static boolean array CSA_instantiated
        private static thistype array CSA_removedInstances
        private static integer CSA_removedCount = 0
        private static integer CSA_counter = 0
        private static integer CSA_this
        
        static method get takes nothing returns thistype
            if thistype.CSA_removedCount == 0 then
                set thistype.CSA_this = thistype.CSA_removedInstances[thistype.CSA_removedCount]
                set thistype.CSA_instantiated[thistype.CSA_this] = true
                set thistype.CSA_removedCount = thistype.CSA_removedCount - 1
                return thistype.CSA_this
            endif
            set thistype.CSA_counter = thistype.CSA_counter + 1
            return thistype.CSA_counter
        endmethod
        
        method release takes nothing returns nothing
            if thistype.CSA_instantiated[this] then
                call this.customDestroy()
                set thistype.CSA_instantiated[this] = false
                set thistype.CSA_removedCount = thistype.CSA_removedCount + 1
                set thistype.CSA_removedInstances[thistype.CSA_removedCount] = this
            debug else
                debug call BJDebugMsg("Double Free founded on #" + I2S(this) "!")
            endif
        endmethod
    endmodule


:thup:
 

lep

Active Member
Reaction score
8
Ehrm, that "speed" means the time passed between the two marks. Less time means faster computation.

Correct me if i'm wrong...
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
Yea, I was dreaming when creating this thing.

It is for safety but not for speed. Sorry for posting wrong infomation.
Changed the name to -> SSA (Safety Struct Allocator)
 

lep

Active Member
Reaction score
8
How is this "safer"?

It let you have more than 8191 instances. It uses more memory. It uses some hackish things like delegating on array-structs for some reasons. It probably gets fucked up when using oversized structs.

Realy, i don't see any benefit of using this.
 
Reaction score
456
My only comment for this is about the header. When will you guys stop using Ascii art for your scripts?
 

Romek

Super Moderator
Reaction score
964
> When will you guys stop using Ascii art for your scripts?
UAC was first! :p
My ASCII art looks somewhat decent though.

………………..,-~*’`¯lllllll`*~,
…………..,-~*`lllllllllllllllllllllllllll…
………,-~*lllllllllllllllllllllllllllllll…
……,-*lllllllllllllllllllllllllllllllll…
….;*`lllllllllllllllllllllllllll,-~*~-…
…..\lllllllllllllllllllllllllll/………\;;…
…...\lllllllllllllllllllll,-*………..`~-~…
…….\llllllllllll,-~*…………………)_-\..*`*;.…
……..\,-*`¯,*`)…………,-~*`~.………….../
……...|/.../…/~,…...-~*,-~*`;……………./.\
……../.../…/…/..,-,..*~,.`*~*…………….*...…
…….|.../…/…/.*`...\...……………………)….)¯`~,
…….|./…/…./…….)……,.)`*~-,……….../….|..)…
……/./.../…,*`-,…..`-,…*`….,---…...\…./…
…...(……….)`*~-,….`*`.,-~*.,-*……|…/.…/……
…….*-,…….`*-,...`~,..``.,,,-*……….|.,*.…
……….*,………`-,…)-,…………..,-*`...,-*….(`-

Anyway, how is this any safer than the default struct allocating?
Do note that, that also has double-free protection.
 

Azlier

Old World Ghost
Reaction score
461
Jasshelper's allocator is safer than this. You have accomplished nothing.

Well done! It's hard to accomplish less than nothing.
 

Romek

Super Moderator
Reaction score
964
Hmm.. Graveyarded. There's no point in this even being here.
Your resources are becoming somewhat of a joke.

If you're going to claim something is faster, let alone safer, at least do a test to be able to compare it to something else.
A simple:
JASS:
local Data d = Data.create()
call d.destroy()
call d.destroy()

Would've proven to you that the default deallocator does protect against double frees.

As well as this having no purpose whatsoever, the interface simply sucks, and nobody in their right mind would use something like this over the default allocator.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • WildTurkey WildTurkey:
    is there a stephen green in the house?
    +1
  • The Helper The Helper:
    What is up WildTurkey?
  • The Helper The Helper:
    Looks like Google fixed whatever mistake that made the recipes on the site go crazy and we are no longer trending towards a recipe site lol - I don't care though because it motivated me to spend alot of time on the site improving it and at least now the content people are looking at is not stupid and embarrassing like it was when I first got back into this like 5 years ago.
  • The Helper The Helper:
    Plus - I have a pretty bad ass recipe collection now! That section of the site is 10 thousand times better than it was before
  • The Helper The Helper:
    We now have a web designer at my job. A legit talented professional! I am going to get him to redesign the site theme. It is time.
  • Varine Varine:
    I got one more day of community service and then I'm free from this nonsense! I polished a cop car today for a funeral or something I guess
  • Varine Varine:
    They also were digging threw old shit at the sheriff's office and I tried to get them to give me the old electronic stuff, but they said no. They can't give it to people because they might use it to impersonate a cop or break into their network or some shit? idk but it was a shame to see them take a whole bunch of radios and shit to get shredded and landfilled
  • The Helper The Helper:
    whatever at least you are free
  • Monovertex Monovertex:
    How are you all? :D
    +1
  • Ghan Ghan:
    Howdy
  • 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 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