Snippet Number Stack

Nestharus

o-o
Reaction score
84
JASS:

//Requires
//  BigInt          hiveworkshop.com/forums/jass-functions-413/system-bigint-188973/
//  Base            hiveworkshop.com/forums/submissions-414/snippet-base-188814/
//  Ascii           wc3c.net/showthread.php?t=110153
//  Table           hiveworkshop.com/forums/jass-functions-413/snippet-new-table-188084/
library NumberStack uses BigInt
    /***********************************************************************
    *
    *   struct NumberStack extends array
    *
    *       readonly string string
    *           -   The NumberStack as a string
    *
    *       readonly integer remaining
    *           -   Remaining number in stack (does not pop it, just returns it)
    *
    *       static method create takes Base base returns NumberStack
    *           -   Returned value is a BigInt
    *
    *       method destroy takes nothing returns nothing
    *           -   Destroys number stack
    *
    *       static method convert takes string str, Base base returns NumberStack
    *           -   Converts string into NumberStack
    *
    *       method push takes integer value, integer maxValue returns nothing
    *           -   Adds new number to NumberStack
    *           -   Value is the value of the number and maxValue is the max
    *           -   that the number can be
    *
    *       method pop takes integer maxValue returns integer
    *           -   Pops value from NumberStack and returns it
    *           -   Numbers are popped in the reverse order of when they were pushed
    *
    *           Visual
    *               Push 3 -> 3
    *               Push 4 -> 4,3
    *               Push 1 -> 1,4,3
    *
    *               Pop -> 4,3 returns 1
    *               Pop -> 3 returns 4
    *               Pop -> 0 returns 3
    *
    ***********************************************************************/
    struct NumberStack extends array
        static method create takes Base base returns NumberStack
            return BigInt.create(base)
        endmethod
        static method convert takes string str, Base base returns NumberStack
            return BigInt.convertString(str,base)
        endmethod
        method push takes integer value, integer maxValue returns nothing
            call BigInt(this).multiply(maxValue+1)
            call BigInt(this).add(value,0)
        endmethod
        method pop takes integer maxValue returns integer
            return BigInt(this).divide(maxValue+1)
        endmethod
        method operator string takes nothing returns string
            return BigInt(this).toString()
        endmethod
        method destroy takes nothing returns nothing
            call BigInt(this).destroy()
        endmethod
        method operator remaining takes nothing returns integer
            return BigInt(this).toInt()
        endmethod
    endstruct
endlibrary

//Insecure Save
/*****************************************************
//the passed in value is like an encryption key
//no repeated values allowed
//bigger this passed in value, smaller the code will be
local NumberStack c = NumberStack.create(Base["abcdefghijklmnopqrstuvwxyz"])

call c.push(10,10)  //push 10 on to stack
call c.push(20,20)  //push 20 on to stack
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,0,60,c.string)

call c.destroy()
*****************************************************/

//Insecure Load
/*****************************************************
local NumberStack c = NumberStack.convert(GetEventPlayerChatString(),Base["abcdefghijklmnopqrstuvwxyz"])

call c.pop(20)      //20
call c.pop(10)      //10

call c.destroy()
*****************************************************/
 
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