}
#endif
-#ifdef D___Scanner______next____
-struct ArrayObject * CALL01(___Scanner______next____, struct ___Scanner___ * ___this___) {
+#ifdef D___Scanner______nextInt____
+int CALL01(___Scanner______nextInt____, struct ___Scanner___ * ___this___) {
int pos = VAR(___this___)->___currentpos___;
-#if defined(MULTICORE_GC)||defined(PMC_GC)
- struct ArrayObject * result= allocate_newarray(NULL, CHARARRAYTYPE, 10);
-#else
- struct ArrayObject * result=allocate_newarray(CHARARRAYTYPE, 10);
-#endif
int i = 0;
- while(true) { //(VAR(___this___)->___sourcename___[pos]==' ')||(VAR(___this___)->___sourcename___[pos]=='\n')){
+ unsigned char * filearray = (unsigned char *)(VAR(___this___)->___filearray___);
+ while((filearray[pos]==' ')||(filearray[pos]=='\n')){
pos++;
}
+ int value = 0;
+ bool isNeg=false;
+ int radix = 10;
+
+ if (filearray[pos]=='-') {
+ isNeg=true;
+ pos++;
+ }
+ bool cont=true;
do {
- ((short *)(((char *)&result->___length___)+sizeof(int)))[i++]='\0';//(short)VAR(___this___)->___sourcename___[pos++]; // TODO
- }while(true);//(VAR(___this___)->___sourcename___[pos]!=' ')&&(VAR(___this___)->___sourcename___[pos]!='\n'));
+ unsigned char b=filearray[pos];
+ int val;
+ if (b>='0'&&b<='9')
+ val=b-'0';
+ else if (b>='a'&&b<='z')
+ val=10+b-'a';
+ else if (b>='A'&&b<='Z')
+ val=10+b-'A';
+ else {
+ cont=false;
+ }
+ if (cont) {
+ if (val>=radix)
+ printf("Error in Scanner.nextInt(): val >= radix");
+ value=value*radix+val;
+ pos++;
+ }
+ }while(cont);
+ if (isNeg)
+ value=-value;
+
+ VAR(___this___)->___currentpos___ = pos;
+ return value;
+}
+#endif
+
+#ifdef D___Scanner______nextDouble____
+double CALL01(___Scanner______nextDouble____, struct ___Scanner___ * ___this___) {
+ int pos = VAR(___this___)->___currentpos___;
+ int i = 0;
+ unsigned char * filearray = (unsigned char *)(VAR(___this___)->___filearray___);
+ while((filearray[pos]==' ')||(filearray[pos]=='\n')){
+ pos++;
+ }
+ double value = 0.0;
+ bool isNeg=false;
+ int radix = 10;
+
+ if (filearray[pos]=='-') {
+ isNeg=true;
+ pos++;
+ } else if(filearray[pos]=='+') {
+ pos++;
+ }
+ bool cont=true;
+ // TODO
+ /*do {
+ unsigned char b=filearray[pos];
+ int val;
+ if (b>='0'&&b<='9')
+ val=b-'0';
+ else if (b>='a'&&b<='z')
+ val=10+b-'a';
+ else if (b>='A'&&b<='Z')
+ val=10+b-'A';
+ else {
+ cont=false;
+ }
+ if (cont) {
+ if (val>=radix)
+ System.error();
+ value=value*radix+val;
+ pos++;
+ }
+ }while(cont)*/
+ if (isNeg)
+ value=-value;
+
VAR(___this___)->___currentpos___ = pos;
- return result;
+ return value;
}
#endif