コード例 #1
0
        public void IterableContainer()
        {
            IFudgeFieldContainer msg = StandardFudgeMessages.CreateMessageAllNames(fudgeContext);
            int fieldCount           = 0;

            foreach (IFudgeField field in msg)
            {
                fieldCount++;
            }
            Assert.Equal(msg.GetNumFields(), fieldCount);
        }
コード例 #2
0
        private object DeserializeList <T>(IFudgeFieldContainer msg, IFudgeDeserializer deserializer) where T : class
        {
            var result = new List <T>(msg.GetNumFields());

            deserializer.Register(msg, result);
            foreach (var field in msg)
            {
                if (field.Ordinal == null && field.Name == null)
                {
                    result.Add(DeserializeField <T>(field, deserializer, typeData.SubTypeData.Kind));
                }
            }
            return(result);
        }
コード例 #3
0
        private object DeserializeDictionary <K, V>(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
            where K : class
            where V : class
        {
            var result = new Dictionary <K, V>(msg.GetNumFields());

            deserializer.Register(msg, result);

            var keys   = new List <K>();
            var values = new List <V>();

            foreach (var field in msg)
            {
                if (field.Ordinal == 1)
                {
                    keys.Add(DeserializeField <K>(field, deserializer, typeData.SubTypeData.Kind));
                }
                else if (field.Ordinal == 2)
                {
                    values.Add(DeserializeField <V>(field, deserializer, typeData.SubType2Data.Kind));
                }
                else if (field.Ordinal == -1 || field.Ordinal == -2)
                {
                    //TODO should be able to use these type hints to read non-generic maps like FRJ-81
                }
                else
                {
                    throw new FudgeRuntimeException("Sub-message doesn't contain a map (bad field " + field + ")");
                }
            }

            int nVals = Math.Min(keys.Count, values.Count);         // Consistent with Java implementation, rather than throwing an exception if they don't match

            for (int i = 0; i < nVals; i++)
            {
                result[keys[i]] = values[i];
            }

            return(result);
        }
コード例 #4
0
        private object DeserializeArray <T>(IFudgeFieldContainer msg, IFudgeDeserializer deserializer) where T : class
        {
            var result = new T[msg.GetNumFields()];

            deserializer.Register(msg, result);

            int index = 0;

            foreach (var field in msg)
            {
                if (field.Ordinal == null && field.Name == null)
                {
                    result[index++] = DeserializeField <T>(field, deserializer, typeData.SubTypeData.Kind);
                }
                else
                {
                    //See FRN-92
                    throw new FudgeRuntimeException("Unexpected element (bad field " + field + ")");
                }
            }
            return(result);
        }