Vector Natives

Natives
native VectorCreate     takes integer size returns integer
native VectorDestroy    takes integer vector returns nothing
native VectorClear      takes integer vector returns nothing
native VectorGetSize    takes integer vector returns integer
native VectorSetSize    takes integer vector, integer size returns nothing
native VectorGet        takes integer vector, integer index returns integer
native VectorSet        takes integer vector, integer index, integer value returns nothing
native VectorPushBack   takes integer vector, integer value returns nothing
native VectorPopBack    takes integer vector returns nothing
native VectorBack       takes integer vector returns integer
native VectorEmpty      takes integer vector returns boolean

vJass Library
library VectorAPI
    native VectorCreate     takes integer size returns integer
    native VectorDestroy    takes integer vector returns nothing
    native VectorClear      takes integer vector returns nothing
    native VectorGetSize    takes integer vector returns integer
    native VectorSetSize    takes integer vector, integer size returns nothing
    native VectorGet        takes integer vector, integer index returns integer
    native VectorSet        takes integer vector, integer index, integer value returns nothing
    native VectorPushBack   takes integer vector, integer value returns nothing
    native VectorPopBack    takes integer vector returns nothing
    native VectorBack       takes integer vector returns integer
    native VectorEmpty      takes integer vector returns boolean
    
    struct vector
        static method create takes integer size returns vector
            return VectorCreate(size)
        endmethod
        
        method operator size takes nothing returns integer
            return VectorGetSize(this)
        endmethod
        
        method operator size= takes integer newsize returns nothing
            call VectorSetSize(this, newsize)
        endmethod
        
        method copy takes nothing returns vector
         local vector iv = vector.create(this.size)
         local integer i = 0
            loop
                exitwhen i >= this.size
                set iv[i] = this[i]
                set i = i + 1
            endloop
            return iv
        endmethod
        
        method operator [] takes integer index returns integer
            if(index >= this.size) then
          debug call BJDebugMsg("|cffff0000" + SCOPE_PREFIX + "Error: Reading out of bounds!|r")
                return 0
            endif
            return VectorGet(this, index)
        endmethod
        
        method operator []= takes integer index, integer value returns nothing
            if(index >= this.size) then
                set this.size = index + 1
            endif
            call VectorSet(this, index, value)
        endmethod
        
        method destroy takes nothing returns nothing
            call VectorDestroy(this)
        endmethod
        
        method clear takes nothing returns nothing
            call VectorClear(this)
        endmethod
        
        method push takes integer value returns nothing
            call VectorPushBack(this, value)
        endmethod
        
        method pop takes nothing returns nothing
            call VectorPopBack(this)
        endmethod
        
        method peek takes nothing returns integer
            return VectorBack(this)
        endmethod
        
        method empty takes nothing returns boolean
            return VectorEmpty(this)
        endmethod
    endstruct
endlibrary