예제 #1
0
        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());
            }
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
        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");
            }
        }
예제 #4
0
 private PropertyType Type()
 {
     return(PropertyType.getPropertyTypeOrNull(CurrentBlock()));
 }