public RawIndex()

in src/main/java/org/apache/sysds/runtime/iogen/RawIndex.java [44:143]


	public RawIndex(String raw) {
		this.raw = raw;
		this.rawLength = raw.length();
		this.numberBitSet = new BitSet(rawLength);
		this.dotBitSet = new BitSet(rawLength);
		this.eBitSet = new BitSet(rawLength);
		this.plusMinusBitSet = new BitSet(rawLength);
		this.reservedPositions = new BitSet(rawLength);
		this.backupReservedPositions = new BitSet(rawLength);
		this.actualNumericValues = null;
		this.dotActualNumericValues = null;
		this.dotEActualNumericValues = new HashMap<>();

		for(int i = 0; i < this.rawLength; i++) {
			switch(raw.charAt(i)) {
				case '0':
				case '1':
				case '2':
				case '3':
				case '4':
				case '5':
				case '6':
				case '7':
				case '8':
				case '9':
					this.numberBitSet.set(i);
					break;
				case '+':
				case '-':
					this.plusMinusBitSet.set(i);
					break;
				case '.':
					this.dotBitSet.set(i);
					break;
				case 'e':
				case 'E':
					this.eBitSet.set(i);
					break;
			}
		}
		// Clean unnecessary sets
		// Clean for "."
		for(int i = dotBitSet.nextSetBit(0); i != -1; i = dotBitSet.nextSetBit(i + 1)) {
			boolean flag = false;
			if(i > 0) {
				if(i < rawLength - 2) {
					flag = !numberBitSet.get(i - 1) && !numberBitSet.get(i + 1) && !plusMinusBitSet.get(i + 1) && !eBitSet.get(i + 1);
				}
			}
			else if(i == rawLength - 1) {
				flag = !numberBitSet.get(i - 1);
			}
			else if(i == 0) {
				if(i < rawLength - 2) {
					flag = !numberBitSet.get(i + 1) && !plusMinusBitSet.get(i + 1) && !eBitSet.get(i + 1);
				}
				else if(i == rawLength - 1) {
					flag = true;
				}
			}

			if(flag)
				dotBitSet.set(i, false);
		}

		// Clean for "+/-"
		for(int i = plusMinusBitSet.nextSetBit(0); i != -1; i = plusMinusBitSet.nextSetBit(i + 1)) {
			boolean flag;
			if(i < rawLength - 1) {
				flag = numberBitSet.get(i + 1);
				if(!flag && i < rawLength - 2)
					flag = dotBitSet.get(i + 1) && numberBitSet.get(i + 2);
			}
			else {
				flag = false;
			}
			if(!flag)
				plusMinusBitSet.set(i, false);
		}

		// Clean for "e/E"
		for(int i = eBitSet.nextSetBit(0); i != -1; i = eBitSet.nextSetBit(i + 1)) {
			boolean flag = false;
			if((i == 1 && !numberBitSet.get(0)) || i == 0 || i == rawLength - 1) {
				flag = false;
			}
			else if(i > 1 && i < rawLength - 2) {
				flag = numberBitSet.get(i - 1) || (numberBitSet.get(i - 2) && dotBitSet.get(i - 1));
				if(flag)
					flag = numberBitSet.get(i + 1) || (numberBitSet.get(i + 2) && plusMinusBitSet.get(i + 1));
			}
			else if(i == rawLength - 2) {
				flag = numberBitSet.get(rawLength - 1);
			}
			if(!flag)
				eBitSet.set(i, false);
		}
		if(numberBitSet.cardinality() > 0)
			extractNumericDotEActualValues();
	}