Файл: Space race/libs/Editor_files/Iterator.js
Строк: 73
<?php
var pgli = pgli || {};
pgli.lang = pgli.lang || {};
pgli.lang.Iterator = gamecore.Base.extend('Iterator',
// Static
{
MAX_ITERATIONS: 1000,
COMPARATORS: {
"<": 0,
">": 1,
"<=": 2,
">=": 3
},
genComparatorMethod: function(type)
{
switch(type)
{
case 0:
return function(a, b){ return a < b };
case 1:
return function(a, b){ return a > b };
case 2:
return function(a, b){ return a <= b };
case 3:
return function(a, b){ return a >= b };
default:
return function(a, b){ return false };
}
},
genStepMethod: function(type, scope, attr)
{
switch(type)
{
case 1:
case 3:
return function(){ return --scope[attr] };
case 0:
case 2:
default:
return function(){ return ++scope[attr] };
}
}
},
// Instance
{
varname: "i",
start: 0,
end: 1,
comparator: 0,
compMethod: null,
stepMethod: null,
step: 0,
iter: 0,
init: function(name, start, comparator, end)
{
var static = pgli.lang.Iterator;
if(comparator in static.COMPARATORS)
this.comparator = static.COMPARATORS[comparator];
else
this.comparator = static.COMPARATORS["<"];
this.start = start;
this.end = end;
this.step = start;
this.varname = name;
this.compMethod = static.genComparatorMethod(this.comparator);
this.stepMethod = static.genStepMethod(this.comparator, this, "step");
},
loop: function()
{
return (this.iter < pgli.lang.Iterator.MAX_ITERATIONS && this.compMethod(this.step, this.end));
},
next: function()
{
++this.iter;
return this.stepMethod();
},
toString: function()
{
return "Iterator("+this.varname+") "+this.start+" - "+this.step+" - "+this.end;
}
});
?>