Exemple #1
0
        private int GetSizeOfOneObjectToBuffer()
        {
            int  size;
            byte objType = GetBssomTypeFromStreamPack.Get(stream, buffer);

            buffer[0] = objType;
            position++;

            if (!BssomBinaryPrimitives.TryGetPrimitiveTypeSizeFromStaticTypeSizes(objType,
                                                                                  out size))
            {
                switch (objType)
                {
                case BssomType.StringCode:
                    size = (int)ReadVariableNumberCore();
                    break;

                case BssomType.NativeCode:
                {
                    ReadStreamToBuffer(1);
                    objType = buffer[position - 1];
                    if (objType == NativeBssomType.CharCode)
                    {
                        size = BssomBinaryPrimitives.CharSize;
                    }
                    else if (objType == NativeBssomType.DateTimeCode)
                    {
                        size = BssomBinaryPrimitives.NativeDateTimeSize;
                    }
                    else if (objType == NativeBssomType.DecimalCode)
                    {
                        size = BssomBinaryPrimitives.DecimalSize;
                    }
                    else if (objType == NativeBssomType.GuidCode)
                    {
                        size = BssomBinaryPrimitives.GuidSize;
                    }
                    else
                    {
                        throw BssomSerializationOperationException.UnexpectedCodeRead(objType);
                    }

                    break;
                }

                case BssomType.Map1:
                case BssomType.Map2:
                case BssomType.Array2:
                    size = (int)ReadVariableNumberCore();
                    break;

                case BssomType.Array1:
                {
                    ReadStreamToBuffer(1);
                    if (buffer[position - 1] /*elementType*/ == BssomType.NativeCode)
                    {
                        ReadStreamToBuffer(1);
                    }

                    size = (int)ReadVariableNumberCore();
                    break;
                }

                default:
                    throw BssomSerializationOperationException.UnexpectedCodeRead(objType);
                }
            }

            return(size);
        }