/// <summary> /// Merges all the given sources. /// </summary> /// <param name="sources">The sources.</param> /// <param name="resolutionType">The resolution type.</param> /// <returns>A merged stream.</returns> public static OsmStreamSource Merge(this IEnumerable <IEnumerable <OsmGeo> > sources, ConflictResolutionType resolutionType = ConflictResolutionType.FirstStream) { OsmStreamSource previous = null; foreach (var source in sources) { var osmSource = new OsmEnumerableStreamSource(source); if (previous == null) { previous = osmSource; } else { var next = new OsmStreamFilterMerge(resolutionType); next.RegisterSource(previous); next.RegisterSource(osmSource); previous = next; } } return(previous); }
public void TestMergeWays() { var stream1 = new OsmGeo[] { new Way() { Id = 1 } }; var stream2 = new OsmGeo[] { new Way() { Id = 2 } }; var merge = new OsmStreamFilterMerge(); merge.RegisterSource(stream1); merge.RegisterSource(stream2); var result = new List <OsmGeo>(merge); Assert.AreEqual(2, result.Count); Assert.AreEqual(1, result[0].Id); Assert.AreEqual(2, result[1].Id); }
public void TestMergeOneEmpty() { var stream1 = new OsmGeo[0]; var stream2 = new OsmGeo[] { new Node() { Id = 1 }, new Way() { Id = 1 }, new Relation() { Id = 1 } }; var merge = new OsmStreamFilterMerge(); merge.RegisterSource(stream1); merge.RegisterSource(stream2); var result = new List <OsmGeo>(merge); Assert.AreEqual(3, result.Count); Assert.AreEqual(1, result[0].Id); Assert.AreEqual(OsmGeoType.Node, result[0].Type); Assert.AreEqual(1, result[1].Id); Assert.AreEqual(OsmGeoType.Way, result[1].Type); Assert.AreEqual(1, result[2].Id); Assert.AreEqual(OsmGeoType.Relation, result[2].Type); }
public void TestMergeNotSorted() { var stream1 = new OsmGeo[] { new Node() { Id = 1 } }; var stream2 = new OsmGeo[] { new Node() { Id = 4 }, new Node() { Id = 2 } }; var merge = new OsmStreamFilterMerge(); merge.RegisterSource(stream1); merge.RegisterSource(stream2); Assert.Catch <Streams.Exceptions.StreamNotSortedException>(() => { merge.ToList(); }); }
/// <summary> /// Merges a stream with the given other stream. /// </summary> public static OsmStreamSource Merge(this IEnumerable <OsmGeo> source, ConflictResolutionType resolutionType, OsmStreamSource other) { var merged = new OsmStreamFilterMerge(resolutionType); merged.RegisterSource(source); merged.RegisterSource(other); return(merged); }
/// <summary> /// Merges the given sources into this source. /// </summary> public static OsmStreamSource Merge(this IEnumerable <OsmGeo> source, ConflictResolutionType resolutionType, params IEnumerable <OsmGeo>[] sources) { var merge = new OsmStreamFilterMerge(resolutionType); for (var i = 0; i < sources.Length; i++) { merge.RegisterSource(sources[i]); } return(merge); }
/// <summary> /// Merges the given sources into this source. /// </summary> public static OsmStreamSource Merge(this IEnumerable <OsmGeo> source, ConflictResolutionType resolutionType, params OsmStreamSource[] sources) { if (sources.Length == 0) { return(new OsmEnumerableStreamSource(source)); } var merged = new OsmStreamFilterMerge(resolutionType); merged.RegisterSource(source); merged.RegisterSource(sources[0]); for (var s = 1; s < sources.Length; s++) { var next = new OsmStreamFilterMerge(resolutionType); next.RegisterSource(merged); next.RegisterSource(sources[s]); merged = next; } return(merged); }
public void TestMergeConflict() { var stream1 = new OsmGeo[] { new Node() { Id = 1, Version = 1 }, new Way() { Id = 1, Version = 1 }, new Relation() { Id = 1, Version = 1 } }; var stream2 = new OsmGeo[] { new Node() { Id = 1 }, new Node() { Id = 2 }, new Way() { Id = 1 }, new Way() { Id = 2 }, new Relation() { Id = 1 }, new Relation() { Id = 2 } }; var merge = new OsmStreamFilterMerge(); merge.RegisterSource(stream1); merge.RegisterSource(stream2); var result = new List <OsmGeo>(merge); Assert.AreEqual(6, result.Count); Assert.AreEqual(1, result[0].Id); Assert.AreEqual(1, result[0].Version); Assert.AreEqual(OsmGeoType.Node, result[0].Type); Assert.AreEqual(2, result[1].Id); Assert.AreEqual(OsmGeoType.Node, result[1].Type); Assert.AreEqual(1, result[2].Id); Assert.AreEqual(1, result[2].Version); Assert.AreEqual(OsmGeoType.Way, result[2].Type); Assert.AreEqual(2, result[3].Id); Assert.AreEqual(OsmGeoType.Way, result[3].Type); Assert.AreEqual(1, result[4].Id); Assert.AreEqual(1, result[4].Version); Assert.AreEqual(OsmGeoType.Relation, result[4].Type); Assert.AreEqual(2, result[5].Id); Assert.AreEqual(OsmGeoType.Relation, result[5].Type); }