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()
*****************************************************/