class com.miian.toolbox.PrtEncoder{ private static var default_alphabet= "abcdefghijklmnopqrstuvwxyz-"+//<([{,:+*!'@$|^/"+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ+"+//>)]}.;-%?`#&_~\\"+ "0123456789"; private static var base64_alphabet= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ "abcdefghijklmnopqrstuvwxyz"+ "123456789+/="; private static var system_alphabet= "0123456789"+ "abcdefghijklmnopqrstuvwxyz"; private static var _default_encoder; private static var powerTable; private var ascii_table; private var sys2ab_table; private var ab2sys_table; private var _alphabet; private var _scaleRadix; private var _maxScale; private var defaultRadix; private function PrtEncoder(){ initEncoder(default_alphabet,10,2); } public static function getInstance(){ if(_default_encoder==undefined){ _default_encoder=new PrtEncoder(); } return _default_encoder; } public static function encode(source){ if(typeof(source)=="string"){ return getInstance().num2str(Number(source)); }else if(typeof(source)=="number"){ return getInstance().num2str(source); }else{ return getInstance().encodeArray(source); } } public static function decode(str){ var r=getInstance().decodeArray(str); if(r.length==0){ return r[0]; }else{ return r; } } public static function encode2DAry(ary){ var t=[ary[0][0],ary[0][1]]; for(var i=1;idefaultRadix) { return defaultRadix; }else{ return radix; } } public function getScaleIndex(n){ if(n==Math.floor(n)){ return 0; }else{ var s=n.toString().length-n.toString().lastIndexOf(".")-1; if(s>_maxScale){ s=_maxScale; } return s; } } private function power(radix,i){ if(powerTable==undefined){ powerTable=[]; } if(powerTable[radix]==undefined){ powerTable[radix]=[1]; } if(i>powerTable[radix].length-1){ var l=powerTable[radix].length; for(var j=l;jmaxScale){ scale=maxScale; } //trace("encode "+scale+" "+radix); return int2str(scale, _scaleRadix, radix*2)+ int2str(Math.round(n * power(10, scale)), radix); }else{ return int2str(n, radix); //return tostr(n, radix, 0); } } public function tostr(n, radix, offset){ //radix=rectifyRadix(radix); var s=signed2int(n).toString(radix); var r=""; var i; for(i=0;i=_alphabet.length) { s += index2char(mod, offset); //trace("end "+s); } else { s += index2char(radix+mod, offset); //trace("digi "+s); } //trace(": "+n+" "+mod+" "+s); n = Math.floor(n/radix); }while (n>0) //trace("- "+s); return s; } public function extractNumber(str, i, radix) { radix=rectifyRadix(radix); var s = ""; do { var c = str.charAt(i); //if(c=radix); return s; } public function extractScale(str, i, radix){ var s=""; var radix2=radix*2; var c; while((c=char2index(str.charAt(i)))>=radix2){ s+=str.charAt(i); i++; } if(s==""){ return; }else{ return str2int(s, _scaleRadix, radix2); } } public function str2num(s, radix){ //radix=rectifyRadix(radix); var scale=extractScale(s,0,radix); if(scale==undefined){ scale=0; } //trace("decode "+scale); return str2int(s, radix)/power(10, scale); //return toint(s, radix, 0); } public function str2int(s, radix, offset) { //trace(s); //radix=rectifyRadix(radix); if(offset==undefined){ offset=0; } var x = 0; //trace(s.length); var c=0; for (var j = 1; j<=s.length; j++) { var d = char2index(s.charAt(j-1),offset); if (d>=radix && d=radix*2){ continue; } //trace("j "+j+" "+s.charAt(j-1)+" "+d); if (d <0) { return x; } x += power(radix, c)*d; c++; } x=int2signed(x); //trace("decode "+x); return x; } public function encodeArray(ary, radix) { var s = ""; var t=[]; var lastScale=0; radix=rectifyRadix(radix); var radix2=radix*2; for (var i = 0; i