Пример #1
0
            internal static UInt32 GetInlineField(byte *pFields, EETypeOptionalFieldTag eTag, UInt32 uiDefaultValue)
            {
                if (pFields == null)
                {
                    return(uiDefaultValue);
                }

                bool isLastField = false;

                while (!isLastField)
                {
                    byte fieldHeader = NativePrimitiveDecoder.ReadUInt8(ref pFields);
                    isLastField = (fieldHeader & 0x80) != 0;
                    EETypeOptionalFieldTag eCurrentTag = (EETypeOptionalFieldTag)(fieldHeader & 0x7f);
                    UInt32 uiCurrentValue = NativePrimitiveDecoder.DecodeUnsigned(ref pFields);

                    // If we found a tag match return the current value.
                    if (eCurrentTag == eTag)
                    {
                        return(uiCurrentValue);
                    }
                }

                // Reached end of stream without getting a match. Field is not present so return default value.
                return(uiDefaultValue);
            }
Пример #2
0
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }

            if (!(obj is EETypeOptionalFieldsBuilder))
            {
                return(false);
            }

            EETypeOptionalFieldsBuilder other = obj as EETypeOptionalFieldsBuilder;

            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            for (EETypeOptionalFieldTag eTag = 0; eTag < EETypeOptionalFieldTag.Count; eTag++)
            {
                int index = (int)eTag;
                if (_rgFields[index]._fieldPresent != other._rgFields[index]._fieldPresent ||
                    (_rgFields[index]._fieldPresent && _rgFields[index]._value != other._rgFields[index]._value))
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #3
0
        internal int Encode()
        {
            EETypeOptionalFieldTag eLastTag = EETypeOptionalFieldTag.Count;

            for (EETypeOptionalFieldTag eTag = 0; eTag < EETypeOptionalFieldTag.Count; eTag++)
            {
                eLastTag = _rgFields[(int)eTag].m_fPresent ? eTag : eLastTag;
            }

            if (eLastTag == EETypeOptionalFieldTag.Count)
            {
                return(0);
            }

            _encoder = new NativePrimitiveEncoder();
            _encoder.Init();

            for (EETypeOptionalFieldTag eTag = 0; eTag < EETypeOptionalFieldTag.Count; eTag++)
            {
                if (!_rgFields[(int)eTag].m_fPresent)
                {
                    continue;
                }

                _encoder.WriteByte((byte)((byte)eTag | (eTag == eLastTag ? 0x80 : 0)));
                _encoder.WriteUnsigned(_rgFields[(int)eTag].m_uiValue);
            }

            return(_encoder.Size);
        }
Пример #4
0
        public override int GetHashCode()
        {
            int hash = 31;

            for (EETypeOptionalFieldTag eTag = 0; eTag < EETypeOptionalFieldTag.Count; eTag++)
            {
                hash = hash * 486187739 + (int)GetFieldValue(eTag, 0);
            }

            return(hash);
        }
Пример #5
0
        internal OptionalFieldsRuntimeBuilder(byte *pInitializeFromOptionalFields = null)
        {
            if (pInitializeFromOptionalFields == null)
            {
                return;
            }

            bool isLastField = false;

            while (!isLastField)
            {
                byte fieldHeader = NativePrimitiveDecoder.ReadUInt8(ref pInitializeFromOptionalFields);
                isLastField = (fieldHeader & 0x80) != 0;
                EETypeOptionalFieldTag eCurrentTag = (EETypeOptionalFieldTag)(fieldHeader & 0x7f);
                UInt32 uiCurrentValue = NativePrimitiveDecoder.DecodeUnsigned(ref pInitializeFromOptionalFields);

                _rgFields[(int)eCurrentTag].m_fPresent = true;
                _rgFields[(int)eCurrentTag].m_uiValue  = uiCurrentValue;
            }
        }
 internal void ClearField(EETypeOptionalFieldTag eTag)
 {
     _rgFields[(int)eTag]._fieldPresent = false;
 }
 internal void SetFieldValue(EETypeOptionalFieldTag eTag, UInt32 value)
 {
     _rgFields[(int)eTag]._fieldPresent = true;
     _rgFields[(int)eTag]._value = value;
 }
 internal UInt32 GetFieldValue(EETypeOptionalFieldTag eTag, UInt32 defaultValueIfNotFound)
 {
     return _rgFields[(int)eTag]._fieldPresent ? _rgFields[(int)eTag]._value : defaultValueIfNotFound;
 }
Пример #9
0
            internal static UInt32 GetInlineField(byte* pFields, EETypeOptionalFieldTag eTag, UInt32 uiDefaultValue)
            {
                if (pFields == null)
                    return uiDefaultValue;

                bool isLastField = false;
                while (!isLastField)
                {
                    byte fieldHeader = NativePrimitiveDecoder.ReadUInt8(ref pFields);
                    isLastField = (fieldHeader & 0x80) != 0;
                    EETypeOptionalFieldTag eCurrentTag = (EETypeOptionalFieldTag)(fieldHeader & 0x7f);
                    UInt32 uiCurrentValue = NativePrimitiveDecoder.DecodeUnsigned(ref pFields);

                    // If we found a tag match return the current value.
                    if (eCurrentTag == eTag)
                        return uiCurrentValue;
                }

                // Reached end of stream without getting a match. Field is not present so return default value.
                return uiDefaultValue;
            }
Пример #10
0
 internal void ClearField(EETypeOptionalFieldTag eTag)
 {
     _rgFields[(int)eTag].m_fPresent = false;
 }
Пример #11
0
 internal void SetFieldValue(EETypeOptionalFieldTag eTag, UInt32 value)
 {
     _rgFields[(int)eTag].m_fPresent = true;
     _rgFields[(int)eTag].m_uiValue  = value;
 }
Пример #12
0
 internal UInt32 GetFieldValue(EETypeOptionalFieldTag eTag, UInt32 defaultValueIfNotFound)
 {
     return(_rgFields[(int)eTag].m_fPresent ? _rgFields[(int)eTag].m_uiValue : defaultValueIfNotFound);
 }