Snippet typedef integer as int

weaaddar

New Member
Reaction score
6
Hi all, this is quiet a silly little trick and its more or less a bit of laziness.

Here is the library, I'm not even going to bother spoilering it, because well there is no code involved.
JASS:
library int
{
    public struct int[]
    {
    }
}


You can now declare int types. You can then use int in places where integer might be used, and visa versa. But more importantly, you can now attach methods to int. So you might want to go and give yourself a toString method.
JASS:
        method toString()->string
        {
            return I2S(this);
        }

You can now treat the int as a first class object, and go myInt.toString()


One caveat, you can no longer use < or > against native integers. You can define < method so that you can compare against other ints, but that won't help you against say 7.This is pretty annoying, but == and <= work. And it isn't hard to switch around usage (shift the target +1 or -1).

Is this useless, probably, but its just a fun little abuse.

Anyway here is just an example code section

JASS:
library int
{
    public struct int[]
    {
        method toString()-&gt;string
        {
            return I2S(this);
        }
        
        method operator&lt;(int other)-&gt;boolean
        {
            return integer(this) &lt; integer(other);
        }
    }
    private function onInit()
    {
        int x = 7;
        int y = 6;
        x+=3;
        if(x &lt;= 34)
            if(x &gt; y) BJDebugMsg(x.toString());
    }
}

This code inlines cleanly::
JASS:
// okay so there are lots of extra parens, but I doubt that hurts anything.
    function int__onInit takes nothing returns nothing
        local integer x=7
        local integer y=6
        set x=x + 3
        if ( x &lt;= 34 ) then
            if ( (((y)) &lt; ((x))) ) then // INLINED!!
                call BJDebugMsg((I2S((x)))) // INLINED!!
            endif
        endif
    endfunction
 

Lyerae

I keep popping up on this site from time to time.
Reaction score
105
I can't read Zinc. vJASS ver?
For readabilty. :)
 

Romek

Super Moderator
Reaction score
963
Go, go, captain obvious? :p
Anybody who knows that structs are nothing but integers will know that it's possible to do this.

...Or they should, anyway. :rolleyes:
 
Reaction score
341
It's obvious once you see it being put to use this way.

But I honestly wouldn't have thought of it as an integer wrapper.

It most likely will end up being graveyarded, but it is a useful reference nonetheless.
 

Romek

Super Moderator
Reaction score
963
I thought of this the moment I knew that structs were integers.
I'm surprised anyone didn't.

Thing is, the only thing this really achieves if the shortening of the word 'integer'.
It's faster to simply write I2S than it is to write .toString, and there's no advantage of using the latter. You also can't use raw values with these without typecasting.

Also, I'm sure you'll eventually run into typecasting problems when using something like this anyway.

GY'd.
 

weaaddar

New Member
Reaction score
6
Nope. I actually use this on almost all my coding, and just eventually switch everything from int->integer with a mass replace. I'm okay with it being graveyarded, I just thought I would share as its a fun little trick :)
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      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