From d48d5e00ee28d0546297760e58d7b85ccbb6685e Mon Sep 17 00:00:00 2001 From: Boris Gerretzen Date: Fri, 8 Nov 2024 12:28:42 +0100 Subject: [PATCH] Feature/streaming (#2) * streaming * wip * refactors * More tests, added materialize * tidy * Update license text with actual license * Bounding box calculatinos * Change example program --------- Co-authored-by: Boris --- GdsGenerator/.gitignore | 1 + GdsGenerator/Program.cs | 86 +-- .../BufferedStreamBenchmark.cs | 104 +++ GdsSharp.Benchmarks/FloatToIntBenchmark.cs | 59 ++ .../GdsSharp.Benchmarks.csproj | 38 + GdsSharp.Benchmarks/Program.cs | 3 + GdsSharp.Lib.Test/AssemblyInfo.cs | 1 + GdsSharp.Lib.Test/Assets/gds3d_example.gds | Bin 0 -> 1796096 bytes GdsSharp.Lib.Test/GdsParserTests.cs | 12 +- GdsSharp.Lib.Test/GdsSharp.Lib.Test.csproj | 3 +- GdsSharp.Lib.Test/GdsTokenizerTests.cs | 128 ---- GdsSharp.Lib.Test/GdsWriterTests.cs | 14 +- GdsSharp.Lib.Test/IntegrationTests.cs | 30 +- GdsSharp.Lib.Test/VectorExtensionsTests.cs | 3 - .../Abstractions/GdsStreamOperator.cs | 2 +- GdsSharp.Lib/Binary/GdsBinaryReader.cs | 8 +- GdsSharp.Lib/Builders/BezierBuilder.cs | 3 +- GdsSharp.Lib/Builders/CircleBuilder.cs | 3 +- GdsSharp.Lib/Builders/PathBuilder.cs | 70 +- GdsSharp.Lib/Builders/RectBuilder.cs | 3 +- GdsSharp.Lib/Extensions.cs | 12 +- GdsSharp.Lib/GdsBoundingBox.cs | 48 ++ GdsSharp.Lib/GdsFile.cs | 70 ++ GdsSharp.Lib/GdsParser.cs | 220 +++--- GdsSharp.Lib/{NonTerminals => }/GdsPoint.cs | 19 +- GdsSharp.Lib/GdsSharp.Lib.csproj | 14 +- GdsSharp.Lib/GdsTokenizer.cs | 47 -- GdsSharp.Lib/GdsWriter.cs | 2 +- GdsSharp.Lib/Lexing/GdsTokenReference.cs | 6 + GdsSharp.Lib/Lexing/GdsTokenStream.cs | 131 ++++ GdsSharp.Lib/{ => Lexing}/GdsTokenWriter.cs | 27 +- .../NonTerminals/Abstractions/IGdsElement.cs | 17 + .../Elements/GdsArrayReferenceElement.cs | 13 + .../Elements/GdsBoundaryElement.cs | 15 +- .../NonTerminals/Elements/GdsBoxElement.cs | 6 + .../NonTerminals/Elements/GdsElement.cs | 8 + .../NonTerminals/Elements/GdsNodeElement.cs | 6 + .../NonTerminals/Elements/GdsPathElement.cs | 26 + .../Elements/GdsStructureReferenceElement.cs | 13 + .../NonTerminals/Elements/GdsTextElement.cs | 5 + .../NonTerminals/{ => Enum}/GdsFormatType.cs | 2 +- GdsSharp.Lib/NonTerminals/GdsFile.cs | 32 - GdsSharp.Lib/NonTerminals/GdsStructure.cs | 29 +- GdsSharp.Lib/ParseException.cs | 6 +- .../Terminals/Records/GdsRecordNoData.cs | 1 + GdsSharp.Lib/Terminals/Records/GdsRecordXy.cs | 23 +- GdsSharp.sln | 6 + LICENSE | 661 +++++------------- README.md | 1 + build/_build.csproj.DotSettings | 5 +- 50 files changed, 1063 insertions(+), 979 deletions(-) create mode 100644 GdsGenerator/.gitignore create mode 100644 GdsSharp.Benchmarks/BufferedStreamBenchmark.cs create mode 100644 GdsSharp.Benchmarks/FloatToIntBenchmark.cs create mode 100644 GdsSharp.Benchmarks/GdsSharp.Benchmarks.csproj create mode 100644 GdsSharp.Benchmarks/Program.cs create mode 100644 GdsSharp.Lib.Test/AssemblyInfo.cs create mode 100644 GdsSharp.Lib.Test/Assets/gds3d_example.gds delete mode 100644 GdsSharp.Lib.Test/GdsTokenizerTests.cs create mode 100644 GdsSharp.Lib/GdsBoundingBox.cs create mode 100644 GdsSharp.Lib/GdsFile.cs rename GdsSharp.Lib/{NonTerminals => }/GdsPoint.cs (83%) delete mode 100644 GdsSharp.Lib/GdsTokenizer.cs create mode 100644 GdsSharp.Lib/Lexing/GdsTokenReference.cs create mode 100644 GdsSharp.Lib/Lexing/GdsTokenStream.cs rename GdsSharp.Lib/{ => Lexing}/GdsTokenWriter.cs (94%) rename GdsSharp.Lib/NonTerminals/{ => Enum}/GdsFormatType.cs (71%) delete mode 100644 GdsSharp.Lib/NonTerminals/GdsFile.cs diff --git a/GdsGenerator/.gitignore b/GdsGenerator/.gitignore new file mode 100644 index 0000000..ca89e77 --- /dev/null +++ b/GdsGenerator/.gitignore @@ -0,0 +1 @@ +mine \ No newline at end of file diff --git a/GdsGenerator/Program.cs b/GdsGenerator/Program.cs index c2d97a4..5743b0f 100644 --- a/GdsGenerator/Program.cs +++ b/GdsGenerator/Program.cs @@ -1,4 +1,5 @@ using System.Numerics; +using GdsSharp.Lib; using GdsSharp.Lib.Builders; using GdsSharp.Lib.NonTerminals; using GdsSharp.Lib.NonTerminals.Elements; @@ -11,56 +12,53 @@ Version = 600 }; -var structure = new GdsStructure +var elements = new List { - Name = "Example structure", - Elements = - [ - // Generate a line from a Bézier curve with width 20. - // When using BuildPolygon the curve will be a GdsBoundaryElement. - new BezierBuilder() - .AddPoint(0, 0) - .AddPoint(0, 1000) - .AddPoint(1000, 1000) - .AddPoint(1000, 0) - .BuildPolygon(200), + // Generate a line from a Bézier curve with width 20. + // When using BuildPolygon the curve will be a GdsBoundaryElement. + new BezierBuilder() + .AddPoint(0, 0) + .AddPoint(0, 1000) + .AddPoint(1000, 1000) + .AddPoint(1000, 0) + .BuildPolygon(200), - // When using BuildLine the curve will be a GdsPathElement. - new BezierBuilder() - .AddPoint(-3000, 0) - .AddPoint(-3000, 1000) - .AddPoint(-2000, 1000) - .AddPoint(-2000, 0) - .BuildLine(200), + // When using BuildLine the curve will be a GdsPathElement. + new BezierBuilder() + .AddPoint(-3000, 0) + .AddPoint(-3000, 1000) + .AddPoint(-2000, 1000) + .AddPoint(-2000, 0) + .BuildLine(200), - // Create a rectangle - RectBuilder.CreateRect(-3100, -1000, 4200, 1000), + // Create a rectangle + RectBuilder.CreateRect(-3100, -1000, 4200, 1000), - // Create a circle - CircleBuilder.CreateCircle(-1000, 744, 350, 128), + // Create a circle + CircleBuilder.CreateCircle(-1000, 744, 350, 128), - // Create a polygon by manually specifying the points - new GdsElement + // Create a polygon by manually specifying the points + new() + { + Element = new GdsBoundaryElement { - Element = new GdsBoundaryElement - { - Points = - [ - new GdsPoint(-1250, 0), - new GdsPoint(-1250, 500), - new GdsPoint(-1000, 250), - new GdsPoint(-750, 500), - new GdsPoint(-750, 0), - new GdsPoint(-1250, 0) - ] - } + Points = + [ + new GdsPoint(-1250, 0), + new GdsPoint(-1250, 500), + new GdsPoint(-1000, 250), + new GdsPoint(-750, 500), + new GdsPoint(-750, 0), + new GdsPoint(-1250, 0) + ], + NumPoints = 6 } - ] + } }; // Use the path builder to create a path // Returns an IEnumerable of GdsElement because the path may be split into multiple elements -structure.Elements.AddRange( +elements.AddRange( new PathBuilder( 100f, new Vector2(-3100, -3300), @@ -98,9 +96,15 @@ // Build the path in sections of 200 vertices // This is the 'official' maximum number of vertices per element in GDSII // In practice, the number of vertices per element can be much higher - .Build(maxVertices: 200) + .Build(200) ); -file.Structures.Add(structure); +var structure = new GdsStructure +{ + Name = "Example structure", + Elements = elements +}; + +file.Structures = [structure]; using var write = File.OpenWrite("example.gds"); file.WriteTo(write); \ No newline at end of file diff --git a/GdsSharp.Benchmarks/BufferedStreamBenchmark.cs b/GdsSharp.Benchmarks/BufferedStreamBenchmark.cs new file mode 100644 index 0000000..c0bcc3f --- /dev/null +++ b/GdsSharp.Benchmarks/BufferedStreamBenchmark.cs @@ -0,0 +1,104 @@ +using BenchmarkDotNet.Attributes; +using GdsSharp.Lib; +using GdsSharp.Lib.Builders; +using GdsSharp.Lib.NonTerminals; +using GdsSharp.Lib.NonTerminals.Elements; + +namespace GdsSharp.Benchmarks; + +public class BufferedStreamBenchmark +{ + + [GlobalSetup] + public void Setup() + { + var file = new GdsFile + { + LibraryName = "Test", + PhysicalUnits = 1e-6, + UserUnits = 1, + }; + + var structure = new GdsStructure + { + Name = "My structure", + }; + + var pb = new PathBuilder(1000f); + for (var i = 0; i < 1000; i++) + { + pb.Straight(1000, vertices: 10000); + } + + structure.Elements = pb.Build(); + file.Structures = new[] { structure }; + + using var fs = new FileStream("example.gds", FileMode.Create, FileAccess.Write); + file.WriteTo(fs); + } + + [GlobalCleanup] + public void Cleanup() + { + File.Delete("example.gds"); + } + + private Stream _stream = null!; + + [IterationSetup] + public void IterationSetup() + { + _stream = new FileStream("example.gds", FileMode.Open, FileAccess.Read); + } + + [IterationCleanup] + public void IterationCleanup() + { + _stream.Dispose(); + } + + [Benchmark] + public GdsFile NoBuffer() + { + var file = GdsFile.From(_stream); + + file.Structures = file.Structures.ToList(); + foreach(var structure in file.Structures) + { + structure.Elements = structure.Elements.ToList(); + foreach (var element in structure.Elements) + { + if (element is not {Element: GdsBoundaryElement b}) continue; + + b.Points = b.Points.ToList(); + } + } + + return file; + } + + + [Benchmark] + [Arguments(4*1024)] + [Arguments(32*1024)] + public GdsFile Buffer(int size) + { + var bufferedStream = new BufferedStream(_stream, size); + + var file = GdsFile.From(bufferedStream); + + file.Structures = file.Structures.ToList(); + foreach(var structure in file.Structures) + { + structure.Elements = structure.Elements.ToList(); + foreach (var element in structure.Elements) + { + if (element is not {Element: GdsBoundaryElement b}) continue; + + b.Points = b.Points.ToList(); + } + } + + return file; + } +} \ No newline at end of file diff --git a/GdsSharp.Benchmarks/FloatToIntBenchmark.cs b/GdsSharp.Benchmarks/FloatToIntBenchmark.cs new file mode 100644 index 0000000..a3dfcec --- /dev/null +++ b/GdsSharp.Benchmarks/FloatToIntBenchmark.cs @@ -0,0 +1,59 @@ +using BenchmarkDotNet.Attributes; + +namespace GdsSharp.Benchmarks; + +public class FloatToIntBenchmark +{ + private readonly float[] _xs = new float[1000]; + private readonly float[] _ys = new float[1000]; + + [GlobalSetup] + public void Setup() + { + var random = new Random(); + for (int i = 0; i < _xs.Length; i++) + { + _xs[i] = (float)random.NextDouble() * 1000; + _ys[i] = (float)random.NextDouble() * 1000; + } + } + + [Benchmark] + public IntPoint[] FloatToIntRound() + { + var points = new IntPoint[_xs.Length]; + for (int i = 0; i < _xs.Length; i++) + { + points[i] = new IntPoint + { + X = (int)MathF.Round(_xs[i]), + Y = (int)MathF.Round(_ys[i]) + }; + } + + return points; + } + + [Benchmark] + public IntPoint[] FloatToIntAdd() + { + var points = new IntPoint[_xs.Length]; + for (int i = 0; i < _xs.Length; i++) + { + points[i] = new IntPoint + { + X = (int)(_xs[i] + 0.5f), + Y = (int)(_ys[i] + 0.5f) + }; + } + + return points; + } + + + public struct IntPoint + { + public int X; + public int Y; + } +} \ No newline at end of file diff --git a/GdsSharp.Benchmarks/GdsSharp.Benchmarks.csproj b/GdsSharp.Benchmarks/GdsSharp.Benchmarks.csproj new file mode 100644 index 0000000..f3fab56 --- /dev/null +++ b/GdsSharp.Benchmarks/GdsSharp.Benchmarks.csproj @@ -0,0 +1,38 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GdsSharp.Benchmarks/Program.cs b/GdsSharp.Benchmarks/Program.cs new file mode 100644 index 0000000..af5ba4f --- /dev/null +++ b/GdsSharp.Benchmarks/Program.cs @@ -0,0 +1,3 @@ +using BenchmarkDotNet.Running; + +BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args); \ No newline at end of file diff --git a/GdsSharp.Lib.Test/AssemblyInfo.cs b/GdsSharp.Lib.Test/AssemblyInfo.cs new file mode 100644 index 0000000..4952ec1 --- /dev/null +++ b/GdsSharp.Lib.Test/AssemblyInfo.cs @@ -0,0 +1 @@ +[assembly: Parallelizable(ParallelScope.All)] \ No newline at end of file diff --git a/GdsSharp.Lib.Test/Assets/gds3d_example.gds b/GdsSharp.Lib.Test/Assets/gds3d_example.gds new file mode 100644 index 0000000000000000000000000000000000000000..b0a73e06c40daf95e4bf33d372f87d3b8d47b815 GIT binary patch literal 1796096 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

D9?FVe0EZN_S2<2=V9^LN%7cE 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 z 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 - + + diff --git a/GdsSharp.Lib.Test/GdsTokenizerTests.cs b/GdsSharp.Lib.Test/GdsTokenizerTests.cs deleted file mode 100644 index 2a95e81..0000000 --- a/GdsSharp.Lib.Test/GdsTokenizerTests.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System.Reflection; -using GdsSharp.Lib.Terminals.Records; - -namespace GdsSharp.Lib.Test; - -public class GdsTokenizerTests -{ - private Stream _stream1 = null!; - private Stream _stream2 = null!; - private Stream _stream3 = null!; - private Stream _stream4 = null!; - - [SetUp] - public void SetUp() - { - _stream1 = Assembly.GetExecutingAssembly().GetManifestResourceStream("GdsSharp.Lib.Test.Assets.example.cal") ?? - throw new NullReferenceException(); - _stream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("GdsSharp.Lib.Test.Assets.inv.gds2") ?? - throw new NullReferenceException(); - _stream3 = Assembly.GetExecutingAssembly().GetManifestResourceStream("GdsSharp.Lib.Test.Assets.nand2.gds2") ?? - throw new NullReferenceException(); - _stream4 = Assembly.GetExecutingAssembly().GetManifestResourceStream("GdsSharp.Lib.Test.Assets.xor.gds2") ?? - throw new NullReferenceException(); - } - - [Test] - public void TokenizeDoesntCrashOnExample1() - { - var tokenizer = new GdsTokenizer(_stream1); - var tokens = tokenizer.Tokenize().ToList(); - Assert.That(tokens, Has.Count.EqualTo(76)); - - Assert.That(tokens.FirstOfType().Value, Is.EqualTo(5)); - - Assert.Multiple(() => - { - var bgnLib = tokens.FirstOfType(); - Assert.That(bgnLib.LastModificationTimeYear, Is.EqualTo(98)); - Assert.That(bgnLib.LastModificationTimeMonth, Is.EqualTo(8)); - Assert.That(bgnLib.LastModificationTimeDay, Is.EqualTo(25)); - Assert.That(bgnLib.LastModificationTimeHour, Is.EqualTo(15)); - Assert.That(bgnLib.LastModificationTimeMinute, Is.EqualTo(53)); - Assert.That(bgnLib.LastModificationTimeSecond, Is.EqualTo(12)); - Assert.That(bgnLib.LastAccessTimeYear, Is.EqualTo(98)); - Assert.That(bgnLib.LastAccessTimeMonth, Is.EqualTo(8)); - Assert.That(bgnLib.LastAccessTimeDay, Is.EqualTo(25)); - Assert.That(bgnLib.LastAccessTimeHour, Is.EqualTo(15)); - Assert.That(bgnLib.LastAccessTimeMinute, Is.EqualTo(53)); - Assert.That(bgnLib.LastAccessTimeSecond, Is.EqualTo(12)); - }); - - Assert.That(tokens.FirstOfType().Value, Is.EqualTo("TEMPEGS.DB")); - - Assert.That(tokens.FirstOfType().UserUnits, Is.EqualTo(0.01)); - Assert.That(tokens.FirstOfType().PhysicalUnits, Is.EqualTo(1e-08)); - - Assert.Multiple(() => - { - var bgnStr = tokens.FirstOfType(); - Assert.That(bgnStr.CreationTimeYear, Is.EqualTo(98)); - Assert.That(bgnStr.CreationTimeMonth, Is.EqualTo(8)); - Assert.That(bgnStr.CreationTimeDay, Is.EqualTo(25)); - Assert.That(bgnStr.CreationTimeHour, Is.EqualTo(15)); - Assert.That(bgnStr.CreationTimeMinute, Is.EqualTo(53)); - Assert.That(bgnStr.CreationTimeSecond, Is.EqualTo(12)); - Assert.That(bgnStr.LastModificationTimeYear, Is.EqualTo(98)); - Assert.That(bgnStr.LastModificationTimeMonth, Is.EqualTo(8)); - Assert.That(bgnStr.LastModificationTimeDay, Is.EqualTo(25)); - Assert.That(bgnStr.LastModificationTimeHour, Is.EqualTo(15)); - Assert.That(bgnStr.LastModificationTimeMinute, Is.EqualTo(53)); - Assert.That(bgnStr.LastModificationTimeSecond, Is.EqualTo(12)); - }); - - Assert.That(tokens.FirstOfType().Value, Is.EqualTo("AAP")); - - Assert.Multiple(() => - { - var xy = tokens.FirstOfType(); - Assert.That(xy.Coordinates[0], Is.EqualTo((-920000, 452000))); - Assert.That(xy.Coordinates[1], Is.EqualTo((656500, 765500))); - Assert.That(xy.Coordinates[2], Is.EqualTo((175000, -174000))); - Assert.That(xy.Coordinates[3], Is.EqualTo((-756000, -198000))); - Assert.That(xy.Coordinates[4], Is.EqualTo((-920000, 452000))); - }); - - Assert.Multiple(() => - { - var strans = tokens.FirstOfType(); - Assert.That(strans.Reflection, Is.False); - Assert.That(strans.AbsoluteMagnification, Is.False); - Assert.That(strans.AbsoluteAngle, Is.False); - }); - - Assert.That(tokens.FirstOfType().Value, Is.EqualTo(1875)); - - Assert.Multiple(() => - { - var presentation = tokens.FirstOfType(); - Assert.That(presentation.FontNumber, Is.Zero); - Assert.That(presentation.VerticalPresentation, Is.EqualTo(2)); - Assert.That(presentation.HorizontalPresentation, Is.Zero); - }); - } - - [Test] - public void TokenizeDoesntCrashOnExample2() - { - var tokenizer = new GdsTokenizer(_stream2); - var tokens = tokenizer.Tokenize().ToList(); - Assert.That(tokens, Has.Count.EqualTo(425)); - } - - [Test] - public void TokenizeDoesntCrashOnExample3() - { - var tokenizer = new GdsTokenizer(_stream3); - var tokens = tokenizer.Tokenize().ToList(); - Assert.That(tokens, Has.Count.EqualTo(1229)); - } - - [Test] - public void TokenizeDoesntCrashOnExample4() - { - var tokenizer = new GdsTokenizer(_stream4); - var tokens = tokenizer.Tokenize().ToList(); - Assert.That(tokens, Has.Count.EqualTo(1229)); - } -} \ No newline at end of file diff --git a/GdsSharp.Lib.Test/GdsWriterTests.cs b/GdsSharp.Lib.Test/GdsWriterTests.cs index 76c7efb..2702c11 100644 --- a/GdsSharp.Lib.Test/GdsWriterTests.cs +++ b/GdsSharp.Lib.Test/GdsWriterTests.cs @@ -1,4 +1,5 @@ using System.Reflection; +using GdsSharp.Lib.Lexing; using GdsSharp.Lib.Terminals; using GdsSharp.Lib.Terminals.Abstractions; using GdsSharp.Lib.Terminals.Records; @@ -29,21 +30,20 @@ public void TestWriterWritesHeaders() [TestCase("inv.gds2")] [TestCase("nand2.gds2")] [TestCase("xor.gds2")] - // [TestCase("osu018_stdcells.gds2")] + [TestCase("gds3d_example.gds")] public void TestWriterWritesIdentical(string manifestFile) { - var streamIn = new MemoryStream(); - var streamOut = new MemoryStream(); + using var streamIn = new MemoryStream(); + using var streamOut = new MemoryStream(); - var fileStream = + using var fileStream = Assembly.GetExecutingAssembly().GetManifestResourceStream($"GdsSharp.Lib.Test.Assets.{manifestFile}") ?? throw new NullReferenceException(); fileStream.CopyTo(streamIn); fileStream.Position = 0; - var parser = new GdsTokenizer(fileStream); - var tokens = parser.Tokenize().ToList(); - GdsWriter.Write(tokens, streamOut); + using var tokenStream = new GdsTokenStream(fileStream); + GdsWriter.Write(tokenStream, streamOut); // remove padding var bytesIn = streamIn.ToArray(); diff --git a/GdsSharp.Lib.Test/IntegrationTests.cs b/GdsSharp.Lib.Test/IntegrationTests.cs index 3c7804e..2b93397 100644 --- a/GdsSharp.Lib.Test/IntegrationTests.cs +++ b/GdsSharp.Lib.Test/IntegrationTests.cs @@ -1,5 +1,7 @@ using System.Reflection; using FluentAssertions; +using GdsSharp.Lib.Lexing; +using GdsSharp.Lib.NonTerminals.Elements; namespace GdsSharp.Lib.Test; @@ -9,25 +11,27 @@ public class IntegrationTests [TestCase("inv.gds2")] [TestCase("nand2.gds2")] [TestCase("xor.gds2")] - // [TestCase("osu018_stdcells.gds2")] + [TestCase("gds3d_example.gds")] public void TestRoundTrip(string manifestFile) { - var fileStream = + using var fileStream = Assembly.GetExecutingAssembly().GetManifestResourceStream($"GdsSharp.Lib.Test.Assets.{manifestFile}") ?? throw new NullReferenceException(); - - var tokenizer = new GdsTokenizer(fileStream); - var tokens = tokenizer.Tokenize().ToList(); - - var parser = new GdsParser(tokens); + using var tokenStream = new GdsTokenStream(fileStream); + var parser = new GdsParser(tokenStream); var file = parser.Parse(); - - var tokenWriter = new GdsTokenWriter(file); - var tokensNew = tokenWriter.Tokenize().ToList(); - - var parserNew = new GdsParser(tokensNew); + + using var ms = new MemoryStream(); + file.WriteTo(ms); + ms.Position = 0; + + using var tokenStreamNew = new GdsTokenStream(ms); + var parserNew = new GdsParser(tokenStreamNew); var fileNew = parserNew.Parse(); - + + file.Materialize(); + fileNew.Materialize(); + file.Should().BeEquivalentTo(fileNew); } } \ No newline at end of file diff --git a/GdsSharp.Lib.Test/VectorExtensionsTests.cs b/GdsSharp.Lib.Test/VectorExtensionsTests.cs index baf97ba..df5639f 100644 --- a/GdsSharp.Lib.Test/VectorExtensionsTests.cs +++ b/GdsSharp.Lib.Test/VectorExtensionsTests.cs @@ -2,11 +2,8 @@ namespace GdsSharp.Lib.Test; -[TestFixture] public class VectorExtensionsTests { - private const float TwoPi = 2 * MathF.PI; - [Test] public void Rotate_Rotate90Degrees_CorrectResult() { diff --git a/GdsSharp.Lib/Abstractions/GdsStreamOperator.cs b/GdsSharp.Lib/Abstractions/GdsStreamOperator.cs index f1a15b5..d7defa7 100644 --- a/GdsSharp.Lib/Abstractions/GdsStreamOperator.cs +++ b/GdsSharp.Lib/Abstractions/GdsStreamOperator.cs @@ -14,7 +14,7 @@ public class GdsStreamOperator /// static GdsStreamOperator() { - var assembly = Assembly.GetAssembly(typeof(GdsTokenizer)); + var assembly = Assembly.GetAssembly(typeof(GdsStreamOperator)); if (assembly is null) throw new InvalidOperationException("Could not get assembly"); // Get compiled activator for all records diff --git a/GdsSharp.Lib/Binary/GdsBinaryReader.cs b/GdsSharp.Lib/Binary/GdsBinaryReader.cs index 7ece0b5..06d69e1 100644 --- a/GdsSharp.Lib/Binary/GdsBinaryReader.cs +++ b/GdsSharp.Lib/Binary/GdsBinaryReader.cs @@ -6,7 +6,7 @@ namespace GdsSharp.Lib.Binary; public class GdsBinaryReader : BinaryReader { - public GdsBinaryReader(Stream input) : base(input) + public GdsBinaryReader(Stream input) : base(input, Encoding.UTF8, true) { } @@ -69,4 +69,10 @@ public string ReadAsciiString(int length) while (str.EndsWith('\0')) str = str[..^1]; // Remove trailing nulls return str; } + + protected override void Dispose(bool disposing) + { + // Do nothing, we don't want to close the stream + // Somehow setting leaveOpen to true does not work. + } } \ No newline at end of file diff --git a/GdsSharp.Lib/Builders/BezierBuilder.cs b/GdsSharp.Lib/Builders/BezierBuilder.cs index ff17132..bd41691 100644 --- a/GdsSharp.Lib/Builders/BezierBuilder.cs +++ b/GdsSharp.Lib/Builders/BezierBuilder.cs @@ -125,7 +125,8 @@ public GdsElement BuildPolygon(int width, int numVertices = 64) { Element = new GdsBoundaryElement { - Points = offsetPoints.ToList() + Points = offsetPoints.ToList(), + NumPoints = offsetPoints.Length } }; diff --git a/GdsSharp.Lib/Builders/CircleBuilder.cs b/GdsSharp.Lib/Builders/CircleBuilder.cs index d107616..9afed01 100644 --- a/GdsSharp.Lib/Builders/CircleBuilder.cs +++ b/GdsSharp.Lib/Builders/CircleBuilder.cs @@ -61,7 +61,8 @@ public static GdsElement CreateCircle(int x, int y, int radius, int numPoints = Points = pointsPerSector .Select(kvp => kvp.Key % 2 == 0 ? kvp.Value : kvp.Value.Reverse()) .SelectMany(p => SampleEquidistant(p, numPoints / 8)) - .ToList() + .ToList(), + NumPoints = numPoints } }; diff --git a/GdsSharp.Lib/Builders/PathBuilder.cs b/GdsSharp.Lib/Builders/PathBuilder.cs index a254803..58ac6ab 100644 --- a/GdsSharp.Lib/Builders/PathBuilder.cs +++ b/GdsSharp.Lib/Builders/PathBuilder.cs @@ -1,7 +1,6 @@ using System.Numerics; using GdsSharp.Lib.NonTerminals; using GdsSharp.Lib.NonTerminals.Elements; -using SoftCircuits.Collections; namespace GdsSharp.Lib.Builders; @@ -124,73 +123,47 @@ public IEnumerable Build(int maxVertices = 200) { if (maxVertices < 4) throw new ArgumentException("maxVerticesPerElement must be at least 4 to form a valid polygon.", nameof(maxVertices)); + + var ap = GetPathPoints(); - var allPoints = GetPolygonPoints().ToList(); - - var currentIndex = 0; - while (currentIndex < allPoints.Count / 2) + foreach (var points in ap.Chunk(maxVertices/2)) { - // Check how much we can fit in this element - var numPoints = Math.Min(maxVertices, (allPoints.Count/2 - currentIndex)*2) / 2; - numPoints = Math.Max(2, numPoints); + var allPoints = new GdsPoint[points.Length * 2]; + for(var i = 0; i < points.Length; i++) + { + allPoints[i] = new GdsPoint(points[i].Point + points[i].Width * points[i].Normal); + allPoints[allPoints.Length - i - 1] = new GdsPoint(points[i].Point - points[i].Width * points[i].Normal); + } + - // Get the points from the up and down leg of the polygon - var pointsUp = allPoints.GetRange(currentIndex, numPoints); - var pointsDown = allPoints.GetRange(allPoints.Count - currentIndex - numPoints, numPoints).ToList(); - pointsUp.AddRange(pointsDown); - yield return new GdsElement { Element = new GdsBoundaryElement { - Points = pointsUp + Points = allPoints.ToList(), + NumPoints = allPoints.Length, } }; - - // Make sure we start at the last point of the previous element - currentIndex += numPoints-1; - } - } - - ///

- /// Builds a polygon from the path. - /// - /// - private IEnumerable GetPolygonPoints() - { - var segments = GetPathPoints(); - - List meshUp = new(); - List meshDown = new(); - - foreach (var (_, points) in segments) - foreach (var (point, normal, width) in points) - { - meshUp.Add(new GdsPoint(point + normal * width / 2)); - meshDown.Insert(0, new GdsPoint(point - normal * width / 2)); } - - return meshUp.Concat(meshDown); } - /// /// Generates a list of points for each segment in the path. /// /// List of points per segment. - private OrderedDictionary> GetPathPoints() + protected IEnumerable GetPathPoints() { - var points = new OrderedDictionary>(); var position = _initialPosition; var heading = _initialHeading; var currentWidth = _initialWidth; + var unitYAngle = Vector2.UnitY.Angle(); + foreach (var segment in _pathSegments) { - var segmentPoints = new List(); - Vector2? lastPosition = null; Vector2? lastHeading = null; + var rotationAngle = unitYAngle - heading.Angle(); for (var i = 0; i <= segment.Vertices; i++) { var t = i / (float)segment.Vertices; @@ -201,7 +174,6 @@ private OrderedDictionary> GetPathPoints() var width = segment.Width?.Invoke(t); // Correct the point and derivative for the heading - var rotationAngle = Vector2.UnitY.Angle() - heading.Angle(); point = point.Rotate(-rotationAngle); derivative = derivative.Rotate(-rotationAngle); @@ -210,18 +182,14 @@ private OrderedDictionary> GetPathPoints() currentWidth = width ?? currentWidth; var normal = new Vector2(-derivative.Y, derivative.X); - segmentPoints.Add(new GdsPathPoint(point + position, normal, currentWidth)); + yield return new GdsPathPoint(point + position, normal, currentWidth); } if (lastPosition.HasValue) position += lastPosition.Value; if (lastHeading.HasValue) heading = lastHeading.Value; - - points.Add(segment, segmentPoints); } - - return points; } /// @@ -231,7 +199,7 @@ private OrderedDictionary> GetPathPoints() /// Function that defines the derivative of the segment. /// Function that defines the width of the segment. /// Number of vertices of the segment. - private record struct GdsPathSegment(Func Path, Func Derivative, Func? Width, int Vertices); + protected record struct GdsPathSegment(Func Path, Func Derivative, Func? Width, int Vertices); /// /// Represents a single point in the path. @@ -239,5 +207,5 @@ private record struct GdsPathSegment(Func Path, FuncThe coordinates of the point. /// The normal of the point. /// The width at the point. - private record struct GdsPathPoint(Vector2 Point, Vector2 Normal, float Width); + protected record struct GdsPathPoint(Vector2 Point, Vector2 Normal, float Width); } \ No newline at end of file diff --git a/GdsSharp.Lib/Builders/RectBuilder.cs b/GdsSharp.Lib/Builders/RectBuilder.cs index 63eaf1d..0f146fb 100644 --- a/GdsSharp.Lib/Builders/RectBuilder.cs +++ b/GdsSharp.Lib/Builders/RectBuilder.cs @@ -29,7 +29,8 @@ public static GdsElement CreateRect(int x, int y, int width, int height) new(x + width, y + height), new(x, y + height), new(x, y) - } + }, + NumPoints = 5 } }; diff --git a/GdsSharp.Lib/Extensions.cs b/GdsSharp.Lib/Extensions.cs index 96e7bed..2b3df9e 100644 --- a/GdsSharp.Lib/Extensions.cs +++ b/GdsSharp.Lib/Extensions.cs @@ -3,18 +3,8 @@ namespace GdsSharp.Lib; -public static class Extensions +public static class GdsExtensions { - public static List AsGdsPoints(this List<(int x, int y)> coordinates) - { - return coordinates.ConvertAll(c => new GdsPoint(c.x, c.y)); - } - - public static List<(int x, int y)> AsTuplePoints(this List coordinates) - { - return coordinates.ConvertAll(c => (c.X, c.Y)); - } - /// /// Rotates a vector by the given angle in radians. /// diff --git a/GdsSharp.Lib/GdsBoundingBox.cs b/GdsSharp.Lib/GdsBoundingBox.cs new file mode 100644 index 0000000..d4c6e4f --- /dev/null +++ b/GdsSharp.Lib/GdsBoundingBox.cs @@ -0,0 +1,48 @@ +namespace GdsSharp.Lib; + +public readonly struct GdsBoundingBox +{ + public GdsPoint Min { get; } + public GdsPoint Max { get; } + + public bool IsEmpty => Min is { X: 0, Y: 0 } && Max is { X: 0, Y: 0 }; + + public GdsBoundingBox(GdsPoint min, GdsPoint max) + { + Min = min; + Max = max; + } + + public GdsBoundingBox(IEnumerable points) + { + if (!points.Any()) return; + + Min = new GdsPoint(int.MaxValue, int.MaxValue); + Max = new GdsPoint(int.MinValue, int.MinValue); + + foreach (var point in points) + { + Min = new GdsPoint(Math.Min(Min.X, point.X), Math.Min(Min.Y, point.Y)); + Max = new GdsPoint(Math.Max(Max.X, point.X), Math.Max(Max.Y, point.Y)); + } + } + + public GdsBoundingBox(IEnumerable boundingBoxes) + { + if (!boundingBoxes.Any()) return; + + Min = new GdsPoint(int.MaxValue, int.MaxValue); + Max = new GdsPoint(int.MinValue, int.MinValue); + + foreach (var boundingBox in boundingBoxes) + { + Min = new GdsPoint(Math.Min(Min.X, boundingBox.Min.X), Math.Min(Min.Y, boundingBox.Min.Y)); + Max = new GdsPoint(Math.Max(Max.X, boundingBox.Max.X), Math.Max(Max.Y, boundingBox.Max.Y)); + } + } + + public static GdsBoundingBox operator *(GdsBoundingBox a, double b) + { + return new GdsBoundingBox(new GdsPoint(a.Min.X * b, a.Min.Y * b), new GdsPoint(a.Max.X * b, a.Max.Y * b)); + } +} \ No newline at end of file diff --git a/GdsSharp.Lib/GdsFile.cs b/GdsSharp.Lib/GdsFile.cs new file mode 100644 index 0000000..f6137d7 --- /dev/null +++ b/GdsSharp.Lib/GdsFile.cs @@ -0,0 +1,70 @@ +using GdsSharp.Lib.Lexing; +using GdsSharp.Lib.NonTerminals; +using GdsSharp.Lib.NonTerminals.Enum; + +namespace GdsSharp.Lib; + +public class GdsFile +{ + public short Version { get; set; } = 5; + public required string LibraryName { get; set; } + public DateTime LastModificationTime { get; set; } = DateTime.Now; + public DateTime LastAccessTime { get; set; } = DateTime.Now; + public List ReferencedLibraries { get; set; } = new(); + public List Fonts { get; set; } = new(); + public string? AttributeDefinitionFile { get; set; } + public short Generations { get; set; } = 3; + public required double UserUnits { get; set; } + public required double PhysicalUnits { get; set; } + public GdsFormatType FormatType { get; set; } = GdsFormatType.GdsArchive; + public IEnumerable Structures { get; set; } = new List(); + + public GdsStructure? GetStructure(string name) + { + return Structures.FirstOrDefault(s => s.Name == name); + } + + public static GdsFile From(Stream stream) + { + using var tokenStream = new GdsTokenStream(stream); + var parser = new GdsParser(tokenStream); + return parser.Parse(); + } + + public void WriteTo(Stream stream) + { + var tokenWriter = new GdsTokenWriter(this); + GdsWriter.Write(tokenWriter.Tokenize(), stream); + } + + /// + /// Materializes all structures in the GDS file. + /// + public void Materialize() + { + var structures = Structures.ToList(); + foreach (var structure in structures) + { + structure.Materialize(); + } + + Structures = structures; + } + + /// + /// Gets the bounding box of a structure. + /// Note that currently rotation and other transformations are not taken into account. + /// Note that text elements are not taken into account. + /// + /// The name of the structure. + /// The bounding box of the structure. + /// Thrown when the structure with the given name is not found. + public GdsBoundingBox GetBoundingBox(string structureName) + { + var structure = GetStructure(structureName); + if (structure == null) + throw new KeyNotFoundException($"Structure with name '{structureName}' not found."); + + return structure.GetBoundingBox(GetStructure); + } +} \ No newline at end of file diff --git a/GdsSharp.Lib/GdsParser.cs b/GdsSharp.Lib/GdsParser.cs index bd280f4..ad19981 100644 --- a/GdsSharp.Lib/GdsParser.cs +++ b/GdsSharp.Lib/GdsParser.cs @@ -1,7 +1,9 @@ -using GdsSharp.Lib.NonTerminals; +using GdsSharp.Lib.Lexing; +using GdsSharp.Lib.NonTerminals; using GdsSharp.Lib.NonTerminals.Abstractions; using GdsSharp.Lib.NonTerminals.Elements; using GdsSharp.Lib.NonTerminals.Enum; +using GdsSharp.Lib.Terminals; using GdsSharp.Lib.Terminals.Abstractions; using GdsSharp.Lib.Terminals.Records; @@ -9,12 +11,11 @@ namespace GdsSharp.Lib; public class GdsParser { - private readonly Queue _queue; - private int _tokenOffset; + private readonly GdsTokenStream _queue; - public GdsParser(IEnumerable tokens) + public GdsParser(GdsTokenStream tokens) { - _queue = new Queue(tokens); + _queue = tokens; } /// @@ -24,18 +25,15 @@ public GdsParser(IEnumerable tokens) /// If the token stream is invalid. public GdsFile Parse() { - var header = Get(); - var bgnLib = Get(); - var libName = Get(); - var refLibs = GetOrDefault(); - var fonts = GetOrDefault(); + var header = Get().Record; + var bgnLib = Get().Record; + var libName = Get().Record; + var refLibs = GetOrDefault()?.Record; + var fonts = GetOrDefault()?.Record; // var attrTable = ExpectOrDefault(); - var generations = GetOrDefault(); - var format = IsNext() ? Get() : null; - var units = Get(); - - var structures = new List(); - while (_queue.Peek() is not GdsRecordNoData { Type: GdsRecordNoDataType.EndLib }) structures.Add(ParseGdsStructure()); + var generations = GetOrDefault()?.Record; + var format = GetOrDefault()?.Record; + var (units, unitsReference) = Get(); var file = new GdsFile { @@ -46,7 +44,8 @@ public GdsFile Parse() LastAccessTime = new DateTime(bgnLib.LastAccessTimeYear, bgnLib.LastAccessTimeMonth, bgnLib.LastAccessTimeDay, bgnLib.LastAccessTimeHour, bgnLib.LastAccessTimeMinute, bgnLib.LastAccessTimeSecond), PhysicalUnits = units.PhysicalUnits, - UserUnits = units.UserUnits + UserUnits = units.UserUnits, + Structures = ParseStructures(unitsReference.Offset + unitsReference.Header.Length) }; if (refLibs is not null) @@ -61,8 +60,6 @@ public GdsFile Parse() if (format is not null) file.FormatType = (GdsFormatType)format.Value; - file.Structures = structures; - return file; } @@ -74,13 +71,13 @@ public GdsFile Parse() /// Expected token type. /// Peeked token of type . /// If peeked token is not of expected type. - private T Peek() + private (T Record, GdsTokenReference reference) Peek() where T : IGdsRecord { - var token = _queue.Peek(); - if (token is not T record) throw new ParseException(typeof(T), token, _tokenOffset); + var reference = _queue.Peek(); + if (reference.Record is not T record) throw new ParseException(typeof(T), reference.Record, reference.Offset); - return record; + return (record, reference); } /// @@ -89,14 +86,13 @@ private T Peek() /// Expected token type. /// Next token of type . /// If next token is not of expected type. - private T Get() + private (T Record, GdsTokenReference Reference) Get() where T : IGdsRecord { - var token = _queue.Dequeue(); - _tokenOffset++; - if (token is not T record) throw new ParseException(typeof(T), token, _tokenOffset); + var reference = _queue.Dequeue(); + if (reference.Record is not T record) throw new ParseException(typeof(T), reference.Record, reference.Offset); - return record; + return (record, reference); } /// @@ -108,12 +104,12 @@ private T Get() /// Next token of type , or if next token is not of expected /// type. /// - private T? GetOrDefault() + private (T Record, GdsHeader Header)? GetOrDefault() where T : IGdsRecord { - if (!IsNext()) return default; - _tokenOffset++; - return (T)_queue.Dequeue(); + if (!IsNext()) return null; + var reference = _queue.Dequeue(); + return ((T)reference.Record, reference.Header); } /// @@ -124,7 +120,7 @@ private T Get() private bool IsNext() where T : IGdsRecord { - return _queue.Peek() is T; + return _queue.Peek().Record is T; } /// @@ -135,8 +131,8 @@ private bool IsNext() /// If next token is not of expected type. private void GetNoData(GdsRecordNoDataType type) { - var token = Get(); - if (token.Type != type) throw new ParseException(type, token.Type, _tokenOffset); + var reference = Get(); + if (reference.Record.Type != type) throw new ParseException(type, reference.Record.Type, reference.Reference.Offset); } /// @@ -165,14 +161,14 @@ private GdsProperty ParseGdsProperty() { return new GdsProperty { - Attribute = Get().Value, - Value = Get().Value + Attribute = Get().Record.Value, + Value = Get().Record.Value }; } private GdsStrans ParseTransformation() { - var strans = Get(); + var strans = Get().Record; var returnObj = new GdsStrans { @@ -181,10 +177,10 @@ private GdsStrans ParseTransformation() AbsoluteMagnification = strans.AbsoluteMagnification }; - if (GetOrDefault() is { } mag) + if (GetOrDefault()?.Record is { } mag) returnObj.Magnification = mag.Value; - if (GetOrDefault() is { } angle) + if (GetOrDefault()?.Record is { } angle) returnObj.Angle = angle.Value; return returnObj; @@ -193,16 +189,16 @@ private GdsStrans ParseTransformation() private GdsBoxElement ParseGdsBoxElement() { GetNoData(GdsRecordNoDataType.Box); - var flags = GetOrDefault(); - var plex = GetOrDefault(); - var layer = Get(); - var boxType = Get(); - var xy = Get(); + var flags = GetOrDefault()?.Record; + var plex = GetOrDefault()?.Record; + var layer = Get().Record; + var boxType = Get().Record; + var xy = Get().Record; var elem = new GdsBoxElement { BoxType = boxType.Value, Layer = layer.Value, - Points = xy.Coordinates.AsGdsPoints() + Points = xy.Coordinates.ToList() }; FillElement(elem, flags, plex); @@ -213,16 +209,16 @@ private GdsBoxElement ParseGdsBoxElement() private GdsNodeElement ParseGdsNodeElement() { GetNoData(GdsRecordNoDataType.Node); - var flags = GetOrDefault(); - var plex = GetOrDefault(); - var layer = Get(); - var nodeType = Get(); - var xy = Get(); + var flags = GetOrDefault()?.Record; + var plex = GetOrDefault()?.Record; + var layer = Get().Record; + var nodeType = Get().Record; + var xy = Get().Record; var elem = new GdsNodeElement { Layer = layer.Value, - Points = xy.Coordinates.AsGdsPoints(), + Points = xy.Coordinates.ToList(), NodeType = nodeType.Value }; @@ -234,23 +230,23 @@ private GdsNodeElement ParseGdsNodeElement() private GdsTextElement ParseGdsTextElement() { GetNoData(GdsRecordNoDataType.Text); - var flags = GetOrDefault(); - var plex = GetOrDefault(); - var layer = Get(); - var textType = Get(); - var presentation = GetOrDefault(); - var pathType = GetOrDefault(); - var width = GetOrDefault(); + var flags = GetOrDefault()?.Record; + var plex = GetOrDefault()?.Record; + var layer = Get().Record; + var textType = Get().Record; + var presentation = GetOrDefault()?.Record; + var pathType = GetOrDefault()?.Record; + var width = GetOrDefault()?.Record; var transformation = IsNext() ? ParseTransformation() : null; - var xy = Get(); - var str = Get(); + var xy = Get().Record; + var str = Get().Record; var elem = new GdsTextElement { Text = str.Value, Layer = layer.Value, TextType = textType.Value, - Points = xy.Coordinates.AsGdsPoints() + Points = xy.Coordinates.ToList() }; FillElement(elem, flags, plex); @@ -274,18 +270,18 @@ private GdsTextElement ParseGdsTextElement() private GdsArrayReferenceElement ParseGdsArrayReferenceElement() { GetNoData(GdsRecordNoDataType.Aref); - var flags = GetOrDefault(); - var plex = GetOrDefault(); - var name = Get(); + var flags = GetOrDefault()?.Record; + var plex = GetOrDefault()?.Record; + var name = Get().Record; var transformation = IsNext() ? ParseTransformation() : null; - var colRow = Get(); - var xy = Get(); + var colRow = Get().Record; + var xy = Get().Record; var elem = new GdsArrayReferenceElement { Columns = colRow.NumCols, Rows = colRow.NumRows, - Points = xy.Coordinates.AsGdsPoints(), + Points = xy.Coordinates.ToList(), // TODO StructureName = name.Value }; @@ -299,16 +295,16 @@ private GdsArrayReferenceElement ParseGdsArrayReferenceElement() private GdsStructureReferenceElement ParseGdsStructureReferenceElement() { GetNoData(GdsRecordNoDataType.Sref); - var flags = GetOrDefault(); - var plex = GetOrDefault(); - var name = Get(); + var flags = GetOrDefault()?.Record; + var plex = GetOrDefault()?.Record; + var name = Get().Record; var transformation = IsNext() ? ParseTransformation() : null; - var xy = Get(); + var xy = Get().Record; var elem = new GdsStructureReferenceElement { StructureName = name.Value, - Points = xy.Coordinates.AsGdsPoints() + Points = xy.Coordinates.ToList() // TDOO }; FillElement(elem, flags, plex); @@ -321,19 +317,19 @@ private GdsStructureReferenceElement ParseGdsStructureReferenceElement() private GdsPathElement ParseGdsPathElement() { GetNoData(GdsRecordNoDataType.Path); - var flags = GetOrDefault(); - var plex = GetOrDefault(); - var layer = Get(); - var dataType = Get(); - var pathType = GetOrDefault(); - var width = GetOrDefault(); - var xy = Get(); + var flags = GetOrDefault()?.Record; + var plex = GetOrDefault()?.Record; + var layer = Get().Record; + var dataType = Get().Record; + var pathType = GetOrDefault()?.Record; + var width = GetOrDefault()?.Record; + var xy = Get().Record; var elem = new GdsPathElement { DataType = dataType.Value, Layer = layer.Value, - Points = xy.Coordinates.AsGdsPoints() + Points = xy.Coordinates.ToList() // TODO }; FillElement(elem, flags, plex); @@ -348,17 +344,18 @@ private GdsPathElement ParseGdsPathElement() private GdsBoundaryElement ParseGdsBoundaryElement() { GetNoData(GdsRecordNoDataType.Boundary); - var flags = GetOrDefault(); - var plex = GetOrDefault(); - var layer = Get(); - var dataType = Get(); - var xy = Get(); + var flags = GetOrDefault()?.Record; + var plex = GetOrDefault()?.Record; + var layer = Get().Record; + var dataType = Get().Record; + var xy = Get().Record; var elem = new GdsBoundaryElement { DataType = dataType.Value, Layer = layer.Value, - Points = xy.Coordinates.AsGdsPoints() + Points = xy.Coordinates, + NumPoints = xy.NumPoints }; FillElement(elem, flags, plex); @@ -368,7 +365,7 @@ private GdsBoundaryElement ParseGdsBoundaryElement() private GdsElement ParseGdsElement() { - var token = Peek(); + var (token, reference) = Peek(); IGdsElement elem = token.Type switch { @@ -379,11 +376,11 @@ private GdsElement ParseGdsElement() GdsRecordNoDataType.Sref => ParseGdsStructureReferenceElement(), GdsRecordNoDataType.Path => ParseGdsPathElement(), GdsRecordNoDataType.Boundary => ParseGdsBoundaryElement(), - _ => throw new ParseException(token.Type, _tokenOffset) + _ => throw new ParseException(token.Type, reference.Offset) }; var properties = new List(); - while (_queue.Peek() is not GdsRecordNoData { Type: GdsRecordNoDataType.EndEl }) properties.Add(ParseGdsProperty()); + while (_queue.Peek().Record is not GdsRecordNoData { Type: GdsRecordNoDataType.EndEl }) properties.Add(ParseGdsProperty()); GetNoData(GdsRecordNoDataType.EndEl); @@ -394,15 +391,33 @@ private GdsElement ParseGdsElement() }; } + private IEnumerable ParseElements(long offset) + { + var oldPosition = _queue.SetPosition(offset); + try + { + while (_queue.Peek().Record is not GdsRecordNoData { Type: GdsRecordNoDataType.EndStr }) + yield return ParseGdsElement(); + GetNoData(GdsRecordNoDataType.EndStr); + } + finally + { + _queue.SetPosition(oldPosition); + } + } + private GdsStructure ParseGdsStructure() { - var bgnStr = Get(); - var name = Get(); + var bgnStr = Get().Record; + var (name, reference) = Get(); - var elements = new List(); - while (_queue.Peek() is not GdsRecordNoData { Type: GdsRecordNoDataType.EndStr }) elements.Add(ParseGdsElement()); + var elements = ParseElements(reference.Offset + reference.Header.Length); + + // Skip elements until the end of the structure + while (_queue.Dequeue().Record is not GdsRecordNoData { Type: GdsRecordNoDataType.EndStr }) + { + } - GetNoData(GdsRecordNoDataType.EndStr); return new GdsStructure { Name = name.Value, @@ -414,5 +429,20 @@ private GdsStructure ParseGdsStructure() }; } + private IEnumerable ParseStructures(long position) + { + var oldPosition = _queue.SetPosition(position); + try + { + while (_queue.Peek().Record is not GdsRecordNoData { Type: GdsRecordNoDataType.EndLib }) + yield return ParseGdsStructure(); + GetNoData(GdsRecordNoDataType.EndLib); + } + finally + { + _queue.SetPosition(oldPosition); + } + } + #endregion } \ No newline at end of file diff --git a/GdsSharp.Lib/NonTerminals/GdsPoint.cs b/GdsSharp.Lib/GdsPoint.cs similarity index 83% rename from GdsSharp.Lib/NonTerminals/GdsPoint.cs rename to GdsSharp.Lib/GdsPoint.cs index 3a3d776..36f8524 100644 --- a/GdsSharp.Lib/NonTerminals/GdsPoint.cs +++ b/GdsSharp.Lib/GdsPoint.cs @@ -1,8 +1,8 @@ using System.Numerics; -namespace GdsSharp.Lib.NonTerminals; +namespace GdsSharp.Lib; -public struct GdsPoint +public readonly struct GdsPoint { public GdsPoint(int x, int y) { @@ -20,8 +20,14 @@ public GdsPoint(float x, float y) Y = (int)MathF.Round(y); } - public int X { get; set; } - public int Y { get; set; } + public GdsPoint(double x, double y) + { + X = (int)Math.Round(x); + Y = (int)Math.Round(y); + } + + public readonly int X; + public readonly int Y; public static GdsPoint operator +(GdsPoint a, GdsPoint b) => new(a.X + b.X, a.Y + b.Y); public static GdsPoint operator -(GdsPoint a, GdsPoint b) => new(a.X - b.X, a.Y - b.Y); @@ -38,4 +44,9 @@ public GdsPoint(float x, float y) public static GdsPoint operator *(int a, GdsPoint b) => new(a * b.X, a * b.Y); public static GdsPoint operator /(int a, GdsPoint b) => new(a / b.X, a / b.Y); public static GdsPoint operator %(int a, GdsPoint b) => new(a % b.X, a % b.Y); + + public override string ToString() + { + return $"({X}, {Y})"; + } } \ No newline at end of file diff --git a/GdsSharp.Lib/GdsSharp.Lib.csproj b/GdsSharp.Lib/GdsSharp.Lib.csproj index b0ca84d..56f7bb3 100644 --- a/GdsSharp.Lib/GdsSharp.Lib.csproj +++ b/GdsSharp.Lib/GdsSharp.Lib.csproj @@ -11,13 +11,19 @@ README.md LICENSE true - https://github.com/BorisGerretzen/GdsSharp + https://github.com/BorisGerretzen/GdsSharp.git Boris Gerretzen GDSII, calma, eda, photomask, lithography, ic + A C# library for reading, editing, and writing Calma GDSII files. git - + + true + true + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + + True @@ -29,8 +35,4 @@ - - - - diff --git a/GdsSharp.Lib/GdsTokenizer.cs b/GdsSharp.Lib/GdsTokenizer.cs deleted file mode 100644 index 568f968..0000000 --- a/GdsSharp.Lib/GdsTokenizer.cs +++ /dev/null @@ -1,47 +0,0 @@ -using GdsSharp.Lib.Abstractions; -using GdsSharp.Lib.Binary; -using GdsSharp.Lib.Terminals; -using GdsSharp.Lib.Terminals.Abstractions; - -namespace GdsSharp.Lib; - -public class GdsTokenizer : GdsStreamOperator -{ - private readonly GdsBinaryReader _reader; - - public GdsTokenizer(Stream stream) - { - _reader = new GdsBinaryReader(stream); - } - - /// - /// Tokenizes the stream. - /// - /// Cancellation token. - /// IEnumerable of the found tokens. - /// If an invalid record code is found or lengths mismatch. - public IEnumerable Tokenize(CancellationToken token = default) - { - while (!token.IsCancellationRequested && _reader.BaseStream.Position < _reader.BaseStream.Length) - { - var currentHeader = new GdsHeader(); - ((IGdsSimpleRead)currentHeader).Read(_reader, currentHeader); - - // Stop when padding is reached - if (currentHeader is { Code: 0, Length: 0 }) yield break; - - // Get record - if (!Activators.TryGetValue(currentHeader.Code, out var activator)) - throw new InvalidOperationException( - $"Could not find activator for code 0x{currentHeader.Code:X} ({currentHeader.Code}) at position 0x{_reader.BaseStream.Position:X} ({_reader.BaseStream.Position})"); - var record = activator.Invoke(); - - if (record is IGdsReadableRecord readableRecord) readableRecord.Read(_reader, currentHeader); - if (record.GetLength() != currentHeader.NumToRead) - throw new InvalidOperationException( - $"Record length mismatch at position 0x{_reader.BaseStream.Position:X} ({_reader.BaseStream.Position}), expected {currentHeader.NumToRead}, got {record.GetLength()}"); - - yield return record; - } - } -} \ No newline at end of file diff --git a/GdsSharp.Lib/GdsWriter.cs b/GdsSharp.Lib/GdsWriter.cs index 830e68f..d2dc23b 100644 --- a/GdsSharp.Lib/GdsWriter.cs +++ b/GdsSharp.Lib/GdsWriter.cs @@ -2,7 +2,7 @@ using GdsSharp.Lib.Binary; using GdsSharp.Lib.Terminals; using GdsSharp.Lib.Terminals.Abstractions; - +using GdsSharp.Lib.Terminals.Records; namespace GdsSharp.Lib; public class GdsWriter : GdsStreamOperator diff --git a/GdsSharp.Lib/Lexing/GdsTokenReference.cs b/GdsSharp.Lib/Lexing/GdsTokenReference.cs new file mode 100644 index 0000000..5e35233 --- /dev/null +++ b/GdsSharp.Lib/Lexing/GdsTokenReference.cs @@ -0,0 +1,6 @@ +using GdsSharp.Lib.Terminals; +using GdsSharp.Lib.Terminals.Abstractions; + +namespace GdsSharp.Lib.Lexing; + +public record GdsTokenReference(GdsHeader Header, IGdsRecord Record, long Offset); \ No newline at end of file diff --git a/GdsSharp.Lib/Lexing/GdsTokenStream.cs b/GdsSharp.Lib/Lexing/GdsTokenStream.cs new file mode 100644 index 0000000..5fa82fb --- /dev/null +++ b/GdsSharp.Lib/Lexing/GdsTokenStream.cs @@ -0,0 +1,131 @@ +using System.Collections; +using GdsSharp.Lib.Abstractions; +using GdsSharp.Lib.Binary; +using GdsSharp.Lib.Terminals; +using GdsSharp.Lib.Terminals.Abstractions; +using GdsSharp.Lib.Terminals.Records; + +namespace GdsSharp.Lib.Lexing; + +public class GdsTokenStream : GdsStreamOperator, IDisposable, IEnumerable +{ + private readonly GdsBinaryReader _reader; + + public GdsTokenStream(Stream stream) + { + _reader = new GdsBinaryReader(stream); + } + + /// + public void Dispose() + { + _reader.Dispose(); + GC.SuppressFinalize(this); + } + + /// + public IEnumerator GetEnumerator() + { + GdsTokenReference? element; + while ((element = Read()) != null) yield return element.Record; + } + + /// + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// + /// Peeks at the next item in the queue. + /// + /// Next item in the queue. + /// If queue is empty. + public GdsTokenReference Peek() + { + var position = _reader.BaseStream.Position; + try + { + return Dequeue(); + } + finally + { + SetPosition(position); + } + } + + /// + /// Dequeues the next item in the queue. + /// + /// Next item in the queue. + /// If queue is empty. + public GdsTokenReference Dequeue() + { + var element = Read(); + if (element is null) throw new InvalidOperationException("No more items in the queue."); + return element; + } + + /// + /// Sets the position of the reader. + /// + /// Position in the stream. + /// Old position. + public long SetPosition(long position) + { + var oldPosition = _reader.BaseStream.Position; + _reader.BaseStream.Position = position; + return oldPosition; + } + + private GdsTokenReference? Read() + { + var pos = _reader.BaseStream.Position; + if (pos == _reader.BaseStream.Length) return null; + + var header = new GdsHeader(); + ((IGdsSimpleRead)header).Read(_reader, header); + + // Stop when padding is reached + if (header is { Code: 0, Length: 0 }) return null; + + // Get record + if (!Activators.TryGetValue(header.Code, out var activator)) + throw new InvalidOperationException( + $"Could not find activator for code 0x{header.Code:X} ({header.Code}) at position 0x{_reader.BaseStream.Position:X} ({_reader.BaseStream.Position})"); + var record = activator.Invoke(); + + switch (record) + { + case GdsRecordXy xy: + xy.NumPoints = header.NumToRead / 8; + xy.Coordinates = ReadGdsPoints(_reader.BaseStream.Position, header); + _reader.BaseStream.Position += header.NumToRead; + break; + case IGdsReadableRecord readableRecord: + readableRecord.Read(_reader, header); + break; + } + + if (record.GetLength() != header.NumToRead) + throw new InvalidOperationException( + $"Record length mismatch at position 0x{_reader.BaseStream.Position:X} ({_reader.BaseStream.Position}), expected {header.NumToRead}, got {record.GetLength()}"); + + return new GdsTokenReference(header, record, pos); + } + + private IEnumerable ReadGdsPoints(long offset, GdsHeader header) + { + var oldPosition = _reader.BaseStream.Position; + try + { + _reader.BaseStream.Position = offset; + for (var i = 0; i < header.NumToRead / 8; i++) + yield return new GdsPoint(_reader.ReadInt32(), _reader.ReadInt32()); + } + finally + { + _reader.BaseStream.Position = oldPosition; + } + } +} \ No newline at end of file diff --git a/GdsSharp.Lib/GdsTokenWriter.cs b/GdsSharp.Lib/Lexing/GdsTokenWriter.cs similarity index 94% rename from GdsSharp.Lib/GdsTokenWriter.cs rename to GdsSharp.Lib/Lexing/GdsTokenWriter.cs index 9d83c54..8281a56 100644 --- a/GdsSharp.Lib/GdsTokenWriter.cs +++ b/GdsSharp.Lib/Lexing/GdsTokenWriter.cs @@ -5,7 +5,7 @@ using GdsSharp.Lib.Terminals.Abstractions; using GdsSharp.Lib.Terminals.Records; -namespace GdsSharp.Lib; +namespace GdsSharp.Lib.Lexing; public class GdsTokenWriter { @@ -49,8 +49,12 @@ public IEnumerable Tokenize() yield return new GdsRecordUnits { PhysicalUnits = _file.PhysicalUnits, UserUnits = _file.UserUnits }; - foreach (var records in _file.Structures.SelectMany(TokenizeStructure)) yield return records; - + foreach (var structure in _file.Structures) + { + foreach (var record in TokenizeStructure(structure)) + yield return record; + } + yield return new GdsRecordNoData { Type = GdsRecordNoDataType.EndLib }; } @@ -125,7 +129,7 @@ private IEnumerable TokenizeTextElement(GdsTextElement textElement) foreach (var record in TokenizeTransform(textElement.Transformation)) yield return record; - yield return new GdsRecordXy { Coordinates = textElement.Points.AsTuplePoints() }; + yield return new GdsRecordXy { Coordinates = textElement.Points, NumPoints = textElement.Points.Count }; yield return new GdsRecordString { Value = textElement.Text }; } @@ -137,7 +141,7 @@ private IEnumerable TokenizeBoxElement(GdsBoxElement boxElement) yield return new GdsRecordBoxType { Value = boxElement.BoxType }; - yield return new GdsRecordXy { Coordinates = boxElement.Points.AsTuplePoints() }; + yield return new GdsRecordXy { Coordinates = boxElement.Points, NumPoints = boxElement.Points.Count}; } private IEnumerable TokenizeNodeElement(GdsNodeElement nodeElement) @@ -148,7 +152,7 @@ private IEnumerable TokenizeNodeElement(GdsNodeElement nodeElement) yield return new GdsRecordNodeType { Value = nodeElement.NodeType }; - yield return new GdsRecordXy { Coordinates = nodeElement.Points.AsTuplePoints() }; + yield return new GdsRecordXy { Coordinates = nodeElement.Points, NumPoints = nodeElement.Points.Count}; } private IEnumerable TokenizeArrayReferenceElement(GdsArrayReferenceElement arrayReferenceElement) @@ -163,7 +167,7 @@ private IEnumerable TokenizeArrayReferenceElement(GdsArrayReferenceE yield return new GdsRecordColRow { NumCols = (short)arrayReferenceElement.Columns, NumRows = (short)arrayReferenceElement.Rows }; - yield return new GdsRecordXy { Coordinates = arrayReferenceElement.Points.AsTuplePoints() }; + yield return new GdsRecordXy { Coordinates = arrayReferenceElement.Points, NumPoints = arrayReferenceElement.Points.Count }; } private IEnumerable TokenizeStructureReferenceElement(GdsStructureReferenceElement element) @@ -176,7 +180,7 @@ private IEnumerable TokenizeStructureReferenceElement(GdsStructureRe foreach (var record in TokenizeTransform(element.Transformation)) yield return record; - yield return new GdsRecordXy { Coordinates = element.Points.AsTuplePoints() }; + yield return new GdsRecordXy { Coordinates = element.Points, NumPoints = element.Points.Count}; } private IEnumerable TokenizePathElement(GdsPathElement element) @@ -191,7 +195,7 @@ private IEnumerable TokenizePathElement(GdsPathElement element) if (element.Width != 0) yield return new GdsRecordWidth { Value = element.Width }; - yield return new GdsRecordXy { Coordinates = element.Points.AsTuplePoints() }; + yield return new GdsRecordXy { Coordinates = element.Points, NumPoints = element.Points.Count}; } private IEnumerable TokenizeBoundaryElement(GdsBoundaryElement element) @@ -202,7 +206,7 @@ private IEnumerable TokenizeBoundaryElement(GdsBoundaryElement eleme yield return new GdsRecordDataType { Value = element.DataType }; - yield return new GdsRecordXy { Coordinates = element.Points.AsTuplePoints() }; + yield return new GdsRecordXy { Coordinates = element.Points, NumPoints = element.NumPoints}; } private IEnumerable TokenizeElement(GdsElement element) @@ -246,7 +250,8 @@ private IEnumerable TokenizeStructure(GdsStructure structure) yield return new GdsRecordStrName { Value = structure.Name }; - foreach (var record in structure.Elements.SelectMany(TokenizeElement)) yield return record; + foreach (var record in structure.Elements.SelectMany(TokenizeElement)) + yield return record; yield return new GdsRecordNoData { Type = GdsRecordNoDataType.EndStr }; } diff --git a/GdsSharp.Lib/NonTerminals/Abstractions/IGdsElement.cs b/GdsSharp.Lib/NonTerminals/Abstractions/IGdsElement.cs index 10e5f28..f60356e 100644 --- a/GdsSharp.Lib/NonTerminals/Abstractions/IGdsElement.cs +++ b/GdsSharp.Lib/NonTerminals/Abstractions/IGdsElement.cs @@ -1,3 +1,5 @@ +using GdsSharp.Lib.NonTerminals.Elements; + namespace GdsSharp.Lib.NonTerminals.Abstractions; public interface IGdsElement @@ -5,4 +7,19 @@ public interface IGdsElement bool ExternalData { get; set; } bool TemplateData { get; set; } int PlexNumber { get; set; } + + /// + /// Materializes the children of the element. + /// In practice only used for to materialize the points. + /// + virtual void Materialize() + { + } + + /// + /// Calculates the bounding box of the element. + /// + /// Maps structure names to structure objects. + /// The bounding box of the element. + GdsBoundingBox GetBoundingBox(GdsStructure.StructureProvider structureProvider); } \ No newline at end of file diff --git a/GdsSharp.Lib/NonTerminals/Elements/GdsArrayReferenceElement.cs b/GdsSharp.Lib/NonTerminals/Elements/GdsArrayReferenceElement.cs index fb0baf2..6a3ad6b 100644 --- a/GdsSharp.Lib/NonTerminals/Elements/GdsArrayReferenceElement.cs +++ b/GdsSharp.Lib/NonTerminals/Elements/GdsArrayReferenceElement.cs @@ -12,4 +12,17 @@ public class GdsArrayReferenceElement : IGdsElement public bool ExternalData { get; set; } public bool TemplateData { get; set; } public int PlexNumber { get; set; } + + /// + public GdsBoundingBox GetBoundingBox(GdsStructure.StructureProvider structureProvider) + { + var structure = structureProvider(StructureName); + if (structure == null) + throw new KeyNotFoundException($"Structure with name '{StructureName}' not found."); + + var boundingBox = structure.GetBoundingBox(structureProvider); + if (boundingBox.IsEmpty) return boundingBox; + var boundingBoxes = Points.Select(p => new GdsBoundingBox(p + boundingBox.Min, p + boundingBox.Max)); + return new GdsBoundingBox(boundingBoxes); + } } \ No newline at end of file diff --git a/GdsSharp.Lib/NonTerminals/Elements/GdsBoundaryElement.cs b/GdsSharp.Lib/NonTerminals/Elements/GdsBoundaryElement.cs index fc38f88..ef7616f 100644 --- a/GdsSharp.Lib/NonTerminals/Elements/GdsBoundaryElement.cs +++ b/GdsSharp.Lib/NonTerminals/Elements/GdsBoundaryElement.cs @@ -5,9 +5,22 @@ namespace GdsSharp.Lib.NonTerminals.Elements; public class GdsBoundaryElement : IGdsLayeredElement { public short DataType { get; set; } - public List Points { get; set; } = new(); + public IEnumerable Points { get; set; } = new List(); + public required int NumPoints { get; set; } public bool ExternalData { get; set; } public bool TemplateData { get; set; } public int PlexNumber { get; set; } public short Layer { get; set; } + + /// + public void Materialize() + { + Points = Points.ToList(); + } + + /// + public GdsBoundingBox GetBoundingBox(GdsStructure.StructureProvider structureProvider) + { + return new GdsBoundingBox(Points); + } } \ No newline at end of file diff --git a/GdsSharp.Lib/NonTerminals/Elements/GdsBoxElement.cs b/GdsSharp.Lib/NonTerminals/Elements/GdsBoxElement.cs index ce8e6d6..4578a96 100644 --- a/GdsSharp.Lib/NonTerminals/Elements/GdsBoxElement.cs +++ b/GdsSharp.Lib/NonTerminals/Elements/GdsBoxElement.cs @@ -15,4 +15,10 @@ public class GdsBoxElement : IGdsLayeredElement public bool TemplateData { get; set; } public int PlexNumber { get; set; } public short Layer { get; set; } + + /// + public GdsBoundingBox GetBoundingBox(GdsStructure.StructureProvider structureProvider) + { + return new GdsBoundingBox(Points); + } } \ No newline at end of file diff --git a/GdsSharp.Lib/NonTerminals/Elements/GdsElement.cs b/GdsSharp.Lib/NonTerminals/Elements/GdsElement.cs index 65af966..977e1b2 100644 --- a/GdsSharp.Lib/NonTerminals/Elements/GdsElement.cs +++ b/GdsSharp.Lib/NonTerminals/Elements/GdsElement.cs @@ -6,4 +6,12 @@ public class GdsElement { public required IGdsElement Element { get; set; } public List Properties { get; set; } = new(); + + /// + /// Materializes the element. + /// + public void Materialize() + { + Element.Materialize(); + } } \ No newline at end of file diff --git a/GdsSharp.Lib/NonTerminals/Elements/GdsNodeElement.cs b/GdsSharp.Lib/NonTerminals/Elements/GdsNodeElement.cs index ae645d2..398400d 100644 --- a/GdsSharp.Lib/NonTerminals/Elements/GdsNodeElement.cs +++ b/GdsSharp.Lib/NonTerminals/Elements/GdsNodeElement.cs @@ -10,4 +10,10 @@ public class GdsNodeElement : IGdsLayeredElement public bool TemplateData { get; set; } public int PlexNumber { get; set; } public short Layer { get; set; } + + /// + public GdsBoundingBox GetBoundingBox(GdsStructure.StructureProvider structureProvider) + { + return new GdsBoundingBox(Points); + } } \ No newline at end of file diff --git a/GdsSharp.Lib/NonTerminals/Elements/GdsPathElement.cs b/GdsSharp.Lib/NonTerminals/Elements/GdsPathElement.cs index 158a479..81d11d4 100644 --- a/GdsSharp.Lib/NonTerminals/Elements/GdsPathElement.cs +++ b/GdsSharp.Lib/NonTerminals/Elements/GdsPathElement.cs @@ -14,4 +14,30 @@ public class GdsPathElement : IGdsLayeredElement public bool TemplateData { get; set; } public int PlexNumber { get; set; } public short Layer { get; set; } + + /// + public GdsBoundingBox GetBoundingBox(GdsStructure.StructureProvider structureProvider) + { + var segments = Points.Zip(Points.Skip(1)); + var coordinates = segments + .Select(segment => + { + var (start, end) = segment; + var dx = end.X - start.X; + var dy = end.Y - start.Y; + return (start, end, dy, dy: -dx); + }) + .SelectMany(row => + { + return new[] + { + new GdsPoint(row.start.X + row.dy * Width / 2, row.start.Y + row.dy * Width / 2), + new GdsPoint(row.start.X - row.dy * Width / 2, row.start.Y - row.dy * Width / 2), + new GdsPoint(row.end.X - row.dy * Width / 2, row.end.Y - row.dy * Width / 2), + new GdsPoint(row.end.X + row.dy * Width / 2, row.end.Y + row.dy * Width / 2) + }; + }); + + return new GdsBoundingBox(coordinates); + } } \ No newline at end of file diff --git a/GdsSharp.Lib/NonTerminals/Elements/GdsStructureReferenceElement.cs b/GdsSharp.Lib/NonTerminals/Elements/GdsStructureReferenceElement.cs index 8bd2bf0..99886e6 100644 --- a/GdsSharp.Lib/NonTerminals/Elements/GdsStructureReferenceElement.cs +++ b/GdsSharp.Lib/NonTerminals/Elements/GdsStructureReferenceElement.cs @@ -10,4 +10,17 @@ public class GdsStructureReferenceElement : IGdsElement public bool ExternalData { get; set; } public bool TemplateData { get; set; } public int PlexNumber { get; set; } + + /// + public GdsBoundingBox GetBoundingBox(GdsStructure.StructureProvider structureProvider) + { + var structure = structureProvider(StructureName); + if (structure == null) + throw new KeyNotFoundException($"Structure {StructureName} not found"); + + var boundingBox = structure.GetBoundingBox(structureProvider); + if (boundingBox.IsEmpty) return boundingBox; + var boundingBoxes = Points.Select(p => new GdsBoundingBox(p + boundingBox.Min, p + boundingBox.Max)); + return new GdsBoundingBox(boundingBoxes); + } } \ No newline at end of file diff --git a/GdsSharp.Lib/NonTerminals/Elements/GdsTextElement.cs b/GdsSharp.Lib/NonTerminals/Elements/GdsTextElement.cs index 23325cf..f350941 100644 --- a/GdsSharp.Lib/NonTerminals/Elements/GdsTextElement.cs +++ b/GdsSharp.Lib/NonTerminals/Elements/GdsTextElement.cs @@ -19,4 +19,9 @@ public class GdsTextElement : IGdsLayeredElement public bool TemplateData { get; set; } public int PlexNumber { get; set; } public short Layer { get; set; } + + public GdsBoundingBox GetBoundingBox(GdsStructure.StructureProvider structureProvider) + { + return new GdsBoundingBox(); + } } \ No newline at end of file diff --git a/GdsSharp.Lib/NonTerminals/GdsFormatType.cs b/GdsSharp.Lib/NonTerminals/Enum/GdsFormatType.cs similarity index 71% rename from GdsSharp.Lib/NonTerminals/GdsFormatType.cs rename to GdsSharp.Lib/NonTerminals/Enum/GdsFormatType.cs index b039189..2ff6437 100644 --- a/GdsSharp.Lib/NonTerminals/GdsFormatType.cs +++ b/GdsSharp.Lib/NonTerminals/Enum/GdsFormatType.cs @@ -1,4 +1,4 @@ -namespace GdsSharp.Lib.NonTerminals; +namespace GdsSharp.Lib.NonTerminals.Enum; public enum GdsFormatType { diff --git a/GdsSharp.Lib/NonTerminals/GdsFile.cs b/GdsSharp.Lib/NonTerminals/GdsFile.cs deleted file mode 100644 index c92590c..0000000 --- a/GdsSharp.Lib/NonTerminals/GdsFile.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace GdsSharp.Lib.NonTerminals; - -public class GdsFile -{ - public short Version { get; set; } = 5; - public required string LibraryName { get; set; } - public DateTime LastModificationTime { get; set; } = DateTime.Now; - public DateTime LastAccessTime { get; set; } = DateTime.Now; - public List ReferencedLibraries { get; set; } = new(); - public List Fonts { get; set; } = new(); - public string? AttributeDefinitionFile { get; set; } - public short Generations { get; set; } = 3; - public required double UserUnits { get; set; } - public required double PhysicalUnits { get; set; } - public GdsFormatType FormatType { get; set; } = GdsFormatType.GdsArchive; - public List Structures { get; set; } = new(); - - public static GdsFile From(Stream stream) - { - var tokenizer = new GdsTokenizer(stream); - var tokens = tokenizer.Tokenize(); - var parser = new GdsParser(tokens); - return parser.Parse(); - } - - public void WriteTo(Stream stream) - { - var tokenWriter = new GdsTokenWriter(this); - var tokens = tokenWriter.Tokenize(); - GdsWriter.Write(tokens, stream); - } -} \ No newline at end of file diff --git a/GdsSharp.Lib/NonTerminals/GdsStructure.cs b/GdsSharp.Lib/NonTerminals/GdsStructure.cs index f18f7a2..231be1a 100644 --- a/GdsSharp.Lib/NonTerminals/GdsStructure.cs +++ b/GdsSharp.Lib/NonTerminals/GdsStructure.cs @@ -4,8 +4,35 @@ namespace GdsSharp.Lib.NonTerminals; public class GdsStructure { + public delegate GdsStructure? StructureProvider(string structureName); + public required string Name { get; set; } public DateTime CreationTime { get; set; } = DateTime.Now; public DateTime ModificationTime { get; set; } = DateTime.Now; - public List Elements { get; set; } = new(); + public IEnumerable Elements { get; set; } = new List(); + + /// + /// Materializes all elements in the structure. + /// + public void Materialize() + { + var elements = Elements.ToList(); + foreach (var element in elements) + { + element.Materialize(); + } + + Elements = elements; + } + + /// + /// Calculates the bounding box of the structure. + /// + /// Maps structure names to structure objects. + /// Bounding box of the structure. + public GdsBoundingBox GetBoundingBox(StructureProvider structureProvider) + { + var boundingBoxes = Elements.Select(e => e.Element.GetBoundingBox(structureProvider)); + return new GdsBoundingBox(boundingBoxes); + } } \ No newline at end of file diff --git a/GdsSharp.Lib/ParseException.cs b/GdsSharp.Lib/ParseException.cs index d7e53cc..984dd36 100644 --- a/GdsSharp.Lib/ParseException.cs +++ b/GdsSharp.Lib/ParseException.cs @@ -4,15 +4,15 @@ namespace GdsSharp.Lib; public class ParseException : Exception { - public ParseException(Type expected, object actual, int offset) : base($"Expected token {expected.Name} but found {actual.GetType().Name} at offset {offset}.") + public ParseException(Type expected, object actual, long offset) : base($"Expected token {expected.Name} but found {actual.GetType().Name} at offset {offset:X} ({offset}).") { } - public ParseException(GdsRecordNoDataType expected, GdsRecordNoDataType actual, int offset) : base($"Expected token {expected} but found {actual} at offset {offset}.") + public ParseException(GdsRecordNoDataType expected, GdsRecordNoDataType actual, long offset) : base($"Expected token {expected} but found {actual} at offset {offset:X} ({offset}).") { } - public ParseException(GdsRecordNoDataType unexpected, int offset) : base($"Unexpected token {unexpected} at offset {offset}.") + public ParseException(GdsRecordNoDataType unexpected, long offset) : base($"Unexpected token {unexpected} at offset {offset:X} ({offset}).") { } } \ No newline at end of file diff --git a/GdsSharp.Lib/Terminals/Records/GdsRecordNoData.cs b/GdsSharp.Lib/Terminals/Records/GdsRecordNoData.cs index e4030ed..0b759c8 100644 --- a/GdsSharp.Lib/Terminals/Records/GdsRecordNoData.cs +++ b/GdsSharp.Lib/Terminals/Records/GdsRecordNoData.cs @@ -8,6 +8,7 @@ public struct GdsRecordNoData : IGdsWriteableRecord public required GdsRecordNoDataType Type { get; init; } public ushort Code => (ushort)Type; + public string CodeHex => Code.ToString("X4"); public ushort GetLength() { diff --git a/GdsSharp.Lib/Terminals/Records/GdsRecordXy.cs b/GdsSharp.Lib/Terminals/Records/GdsRecordXy.cs index 304b73e..fe96f4d 100644 --- a/GdsSharp.Lib/Terminals/Records/GdsRecordXy.cs +++ b/GdsSharp.Lib/Terminals/Records/GdsRecordXy.cs @@ -1,31 +1,32 @@ using GdsSharp.Lib.Binary; +using GdsSharp.Lib.NonTerminals; using GdsSharp.Lib.Terminals.Abstractions; namespace GdsSharp.Lib.Terminals.Records; -public class GdsRecordXy : IGdsReadableRecord, IGdsWriteableRecord +public class GdsRecordXy : IGdsWriteableRecord { - public List<(int X, int Y)> Coordinates { get; set; } = new(); - - public void Read(GdsBinaryReader reader, GdsHeader header) + public required IEnumerable Coordinates { get; set; } + public required int NumPoints { get; set; } + + public GdsRecordXy() { - var numCoordinates = header.NumToRead / 8; - for (var i = 0; i < numCoordinates; i++) Coordinates.Add((reader.ReadInt32(), reader.ReadInt32())); + Coordinates = new List(); } - + public ushort Code => 0x1003; public ushort GetLength() { - return (ushort)(Coordinates.Count * 8); + return (ushort)(NumPoints * 8); } public void Write(GdsBinaryWriter writer) { - foreach (var (x, y) in Coordinates) + foreach (var point in Coordinates) { - writer.Write(x); - writer.Write(y); + writer.Write(point.X); + writer.Write(point.Y); } } } \ No newline at end of file diff --git a/GdsSharp.sln b/GdsSharp.sln index 929fb3b..e19b2c4 100644 --- a/GdsSharp.sln +++ b/GdsSharp.sln @@ -8,6 +8,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_build", "build\_build.cspr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GdsGenerator", "GdsGenerator\GdsGenerator.csproj", "{90695895-33A3-4C42-A733-F3A90E27A69F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GdsSharp.Benchmarks", "GdsSharp.Benchmarks\GdsSharp.Benchmarks.csproj", "{B7DCE78E-B318-4D94-BB6B-40D7025CE396}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -28,5 +30,9 @@ Global {90695895-33A3-4C42-A733-F3A90E27A69F}.Debug|Any CPU.Build.0 = Debug|Any CPU {90695895-33A3-4C42-A733-F3A90E27A69F}.Release|Any CPU.ActiveCfg = Release|Any CPU {90695895-33A3-4C42-A733-F3A90E27A69F}.Release|Any CPU.Build.0 = Release|Any CPU + {B7DCE78E-B318-4D94-BB6B-40D7025CE396}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B7DCE78E-B318-4D94-BB6B-40D7025CE396}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B7DCE78E-B318-4D94-BB6B-40D7025CE396}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B7DCE78E-B318-4D94-BB6B-40D7025CE396}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/LICENSE b/LICENSE index ee9ed41..153d416 100644 --- a/LICENSE +++ b/LICENSE @@ -1,504 +1,165 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 - USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random - Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! \ No newline at end of file + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/README.md b/README.md index c988da2..3ae6a8e 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![NuGet](https://img.shields.io/nuget/v/GdsSharp.svg)](https://www.nuget.org/packages/GdsSharp/)\ A library for reading, editing, and writing [Calma GDSII](https://en.wikipedia.org/wiki/GDSII) files. +The library supports reading and writing in a streaming fashion so it can handle large files. Some helpers are also provided for drawing shapes like circles and Bézier curves. Additionally, a path builder is included to create parameterized paths with multiple segments. diff --git a/build/_build.csproj.DotSettings b/build/_build.csproj.DotSettings index eb3f4c2..c815d36 100644 --- a/build/_build.csproj.DotSettings +++ b/build/_build.csproj.DotSettings @@ -17,6 +17,8 @@ False <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy><Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"><ElementKinds><Kind Name="FIELD" /><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"><ElementKinds><Kind Name="FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> True True True @@ -25,4 +27,5 @@ True True True - True + True + True