private Value ReadValue() { PropertyType type = type(); if (type == null) { return(Values.NO_VALUE); } switch (type.innerEnumValue) { case PropertyType.InnerEnum.BOOL: return(ReadBoolean()); case PropertyType.InnerEnum.BYTE: return(ReadByte()); case PropertyType.InnerEnum.SHORT: return(ReadShort()); case PropertyType.InnerEnum.INT: return(ReadInt()); case PropertyType.InnerEnum.LONG: return(ReadLong()); case PropertyType.InnerEnum.FLOAT: return(ReadFloat()); case PropertyType.InnerEnum.DOUBLE: return(ReadDouble()); case PropertyType.InnerEnum.CHAR: return(ReadChar()); case PropertyType.InnerEnum.SHORT_STRING: return(ReadShortString()); case PropertyType.InnerEnum.SHORT_ARRAY: return(ReadShortArray()); case PropertyType.InnerEnum.STRING: return(ReadLongString()); case PropertyType.InnerEnum.ARRAY: return(ReadLongArray()); case PropertyType.InnerEnum.GEOMETRY: return(GeometryValue()); case PropertyType.InnerEnum.TEMPORAL: return(TemporalValue()); default: throw new System.InvalidOperationException("Unsupported PropertyType: " + type.name()); } }
public override bool Next() { while (true) { //Figure out number of blocks of record int numberOfBlocks = NumberOfBlocks; while (_block < numberOfBlocks) { //We have just read a record, so we are at the beginning if (_block == INITIAL_POSITION) { _block = 0; } else { //Figure out the type and how many blocks that are used long current = CurrentBlock(); PropertyType type = PropertyType.getPropertyTypeOrNull(current); if (type == null) { break; } _block += type.calculateNumberOfBlocksUsed(current); } //nothing left, need to read a new record if (_block >= numberOfBlocks || Type() == null) { break; } return(true); } if (_next == NO_ID) { return(false); } Property(this, _next, _page); _next = NextProp; _block = INITIAL_POSITION; } }
public override ValueGroup PropertyType() { PropertyType type = type(); if (type == null) { return(ValueGroup.NO_VALUE); } switch (type.innerEnumValue) { case PropertyType.InnerEnum.BOOL: return(ValueGroup.BOOLEAN); case PropertyType.InnerEnum.BYTE: case PropertyType.InnerEnum.SHORT: case PropertyType.InnerEnum.INT: case PropertyType.InnerEnum.LONG: case PropertyType.InnerEnum.FLOAT: case PropertyType.InnerEnum.DOUBLE: return(ValueGroup.NUMBER); case PropertyType.InnerEnum.STRING: case PropertyType.InnerEnum.CHAR: case PropertyType.InnerEnum.SHORT_STRING: return(ValueGroup.TEXT); case PropertyType.InnerEnum.TEMPORAL: case PropertyType.InnerEnum.GEOMETRY: case PropertyType.InnerEnum.SHORT_ARRAY: case PropertyType.InnerEnum.ARRAY: // value read is needed to get correct value group since type is not fine grained enough to match all ValueGroups return(PropertyValue().valueGroup()); default: throw new System.NotSupportedException("not implemented"); } }
private PropertyType Type() { return(PropertyType.getPropertyTypeOrNull(CurrentBlock())); }