コード例 #1
0
        internal static TzdbStreamData FromStream([NotNull] Stream stream)
        {
            Preconditions.CheckNotNull(stream, nameof(stream));
            int version = new BinaryReader(stream).ReadInt32();

            if (version != AcceptedVersion)
            {
                throw new InvalidNodaDataException("Unable to read stream with version " + version);
            }
            Builder builder = new Builder();

            foreach (TzdbStreamField field in TzdbStreamField.ReadFields(stream))
            {
                //[TzdbStreamFieldId.StringPool] = (builder, field) => builder.HandleStringPoolField(field),
                //[TzdbStreamFieldId.TimeZone] = (builder, field) => builder.HandleZoneField(field),
                //[TzdbStreamFieldId.TzdbIdMap] = (builder, field) => builder.HandleTzdbIdMapField(field),
                //[TzdbStreamFieldId.TzdbVersion] = (builder, field) => builder.HandleTzdbVersionField(field),
                //[TzdbStreamFieldId.CldrSupplementalWindowsZones] = (builder, field) => builder.HandleSupplementalWindowsZonesField(field),
                //[TzdbStreamFieldId.ZoneLocations] = (builder, field) => builder.HandleZoneLocationsField(field),
                //[TzdbStreamFieldId.Zone1970Locations] = (builder, field) => builder.HandleZone1970LocationsField(field)
                switch (field.Id)
                {
                case TzdbStreamFieldId.StringPool:
                    builder.HandleStringPoolField(field);
                    break;

                case TzdbStreamFieldId.TimeZone:
                    builder.HandleZoneField(field);
                    break;

                case TzdbStreamFieldId.TzdbIdMap:
                    builder.HandleTzdbIdMapField(field);
                    break;

                case TzdbStreamFieldId.TzdbVersion:
                    builder.HandleTzdbVersionField(field);
                    break;

                case TzdbStreamFieldId.CldrSupplementalWindowsZones:
                    // skipping
                    break;

                case TzdbStreamFieldId.ZoneLocations:
                    builder.HandleZoneLocationsField(field);
                    break;

                case TzdbStreamFieldId.Zone1970Locations:
                    builder.HandleZone1970LocationsField(field);
                    break;
                }
            }
            return(new TzdbStreamData(builder));
        }
コード例 #2
0
        internal static TzdbStreamData FromStream([NotNull] Stream stream)
        {
            Preconditions.CheckNotNull(stream, nameof(stream));
            int version = new BinaryReader(stream).ReadInt32();

            if (version != AcceptedVersion)
            {
                throw new InvalidNodaDataException("Unable to read stream with version " + version);
            }
            Builder builder = new Builder();

            foreach (var field in TzdbStreamField.ReadFields(stream))
            {
                // Only handle fields we know about
                if (FieldHandlers.TryGetValue(field.Id, out Action <Builder, TzdbStreamField> handler))
                {
                    handler(builder, field);
                }
            }
            return(new TzdbStreamData(builder));
        }