- Split binary and regular streams
- Binary serialization of tl::Variant
- Fixing tl::Variant parsable string representation for byte arrays and char
(Format is '...'b for byte arrays and '.'c for chars).
- tl::to_quoted_string now allows 0 characters in the string
(escapes to '\000')
1.) Safeguard against missing cells
2.) Use topological order during refresh
This avoid child-first issues
3.) Use cell names and basic names for mapping
(cell names may be disambiguated while
basic names are not)
The two convenience methods are
Library#library_from_file
Library#library_from_files
Both create and register a Library object tied to a file.
This object supports proper reloading and re-mapping on
"refresh".
Most tools and functions now allow to explicitly
specify a format for input and output. On input,
the format is usually detected, but for some
cases, this is not possible (e.g. DEF). So you can
specify the format attached to the file name in
square brackets:
e.g. file.defok[def]
"def" is the intended suffix, "defok" is the given one.
On output, the same is possible, specifically in strmxor
and strmclip:
strmxor a.gds b.gds out.xor[oas]
The idea is to use broken regions for certain operations
such as booleans in deep mode (local operations). These polygons are
more efficient. To support this, a "broken polygon" view
is supplied similar for "merged" view. The translation is
handled automatically.
As a side effect, regions may appear to be composed in broken
polygons now when they have been merged before.
Problem was that while properly implementing the reverse
cluster connection during cluster merges, cluster connection
propagation suffered a complexity explosion during generation
of the cluster interactions.
Solution is to postpone the cluster joining step until
a cell is finished connecting the clusters. To mitigate the
performance effect of that, some optimizations are
introduced (e.g. using a more efficient unordered_map).
Problem was pushing of the results into the cell hierarchy
somehow lead to thread stalling. Likely due to bbox invalidation
and related effects. Solution is to store the results of
the operations inside the context structure (along with the
propagation information) and push it to the layout later in
a single step.