private static CharacterSpan GetCharacterSpan(LocationSpan locationSpan, CharacterPositionFinder finder)
        {
            var startPos = finder.GetCharacterPosition(locationSpan.Start);
            var endPos   = finder.GetCharacterPosition(locationSpan.End);

            return(new CharacterSpan(startPos, endPos));
        }
        private void UseAllNetwork()
        {
            var locationSpan = new LocationSpan();

            foreach (var reach in _engineNet.Reaches)
            {
                AddLocation(reach, locationSpan);
            }
        }
        public void Add(string reachId)
        {
            var locationSpan = new LocationSpan()
            {
                ID = reachId
            };

            _locationSpans.Add(locationSpan);
        }
        public void WriteYaml(IEmitter emitter, object value, Type type)
        {
            SpanYamlTypeConverter spanConverter = new SpanYamlTypeConverter();
            LocationSpan          locationSpan  = (LocationSpan)value;

            emitter.Emit(new MappingStart(null, null, false, MappingStyle.Flow));
            emitter.Emit(new Scalar(null, "start"));
            spanConverter.WriteYaml(emitter, locationSpan.Start, typeof((int, int)));
            emitter.Emit(new Scalar(null, "end"));
            spanConverter.WriteYaml(emitter, locationSpan.End, typeof((int, int)));
            emitter.Emit(new MappingEnd());
        }
        private void AddLocation(EngineReach engineReach, LocationSpan locationsSpan)
        {
            var hdReach = _engineNet.HDModule.GetReach(engineReach);

            if (hdReach == null)
            {
                return;
            }

            var useAllReach = locationsSpan.StartChainage == Constants.DOUBLE_DELETE_VALUE ||
                              locationsSpan.EndChainage == Constants.DOUBLE_DELETE_VALUE;

            var location = new BedResistanceLocation()
            {
                Reach = hdReach
            };

            // Bed resistance toolbox modifies the resistance only on the H grid points.
            foreach (var hdGridPoint in hdReach.GridPoints)
            {
                var hdhGridPoint = hdGridPoint as IHDHGridPoint;
                if (hdhGridPoint == null)
                {
                    continue;
                }

                if (!locationsSpan.ContainsChainage(hdhGridPoint.GridPoint.Location.Chainage) && !useAllReach)
                {
                    continue;
                }

                location.GridPoints.Add(hdhGridPoint);
            }

            if (location.GridPoints.Count > 0)
            {
                _locations.Add(location);
            }
        }
        private static void ParseAttribute(XmlTextReader reader, Container parent, CharacterPositionFinder finder, IXmlFlavor flavor)
        {
            var attributeStartPos = new LineInfo(reader.LineNumber, reader.LinePosition);

            var name = flavor.GetName(reader);
            var type = flavor.GetType(reader);

            // important call to be able to read the attribute value
            reader.ReadAttributeValue();

            var content = flavor.GetContent(reader);

            var attributeEndPos = new LineInfo(reader.LineNumber, reader.LinePosition + content.Length);

            var startPos = finder.GetCharacterPosition(attributeStartPos);
            var endPos   = finder.GetCharacterPosition(attributeEndPos);

            var locationSpan = new LocationSpan(attributeStartPos, attributeEndPos);
            var span         = new CharacterSpan(startPos, endPos);

            var child = AddTerminalNode(parent, type, name, content, locationSpan, span);

            flavor.FinalAdjustAfterParsingComplete(child);
        }
        public void Add(string reachId, double startChainage, double endChainage)
        {
            var locationSpan = new LocationSpan(reachId, startChainage, endChainage);

            _locationSpans.Add(locationSpan);
        }
        private static TerminalNode AddTerminalNode(Container parent, string type, string name, string content, LocationSpan locationSpan, CharacterSpan span)
        {
            var child = new TerminalNode
            {
                Type         = type,
                Name         = name,
                Content      = content,
                LocationSpan = locationSpan,
                Span         = span,
            };

            parent.Children.Add(child);

            return(child);
        }