124 lines
4.3 KiB
Plaintext
124 lines
4.3 KiB
Plaintext
Having abandoned the attempt to redefine a split tile as
|
|
two separate tile entries, I am returning to the problem
|
|
of removing TT_SIDE from the database.
|
|
|
|
TT_SIDE has been used to pass information to callback
|
|
routines to indicate which side of a tile should be
|
|
processed. This should never have been done, because
|
|
it causes the database to be altered during searches,
|
|
which prevents searches from being parallelized.
|
|
|
|
To remove this dependency:
|
|
|
|
All the basic search functions will require an
|
|
additional argument which is a boolean and indicates
|
|
which side of a split tile is to be processed by the
|
|
callback. It is probably fine to treat the argument
|
|
like "dinfo", which is to make it a TileType and
|
|
set TT_DIAGONAL, TT_SIDE, and TT_DIRECTION as
|
|
needed. For the basic use of callbacks, it will
|
|
generally suffice to set only TT_SIDE.
|
|
|
|
-----------
|
|
|
|
Both TT_SIDE and SplitSide() are used frequently.
|
|
Which is why I have not done this before.
|
|
|
|
First, enumerate all callback functions which use each
|
|
of the above, and the search routine that will require
|
|
the extra argument.
|
|
|
|
Search functions or functions needing changes:
|
|
(Followed by the number of occurrences)
|
|
DBSrPaintArea() 401
|
|
DBTreeSrTiles() 99 <done>
|
|
DBSrPaintNMArea() 16 <done>
|
|
DBSrPaintClient() 15 <done>
|
|
SimTreeSrTiles()
|
|
|
|
SelEnumPaint()
|
|
GrClipTriangle()
|
|
GrDrawTriangleEdge()
|
|
GrDiagonal()
|
|
DBTransformDiagonal()
|
|
GrBox()
|
|
|
|
SplitSide():
|
|
|
|
calmaMergePaintFunc() --- Comment, unused, remove.
|
|
calmaWritePaintFunc()
|
|
calmaMergePaintFuncZ() --- Comment, unused, remove.
|
|
calmaWritePaintFuncZ()
|
|
cifHierCopyFunc()
|
|
cifHierErrorFunc()
|
|
cmdDropPaintCell()
|
|
|
|
To be fixed: STACKPUSH/STACKPOP stuff in resis/ResUtils.c
|
|
resAddField will need to do something similar to
|
|
extract to handle two clientData records for split tiles
|
|
in ResAddPlumbing and ResRemovePlumbing.
|
|
|
|
dbcUnconnectFunc() --- Need to handle side, or is this already handled?
|
|
|
|
extConnFindFunc() --- Select proper region depending on side
|
|
extInterSubtreeTile() --- Should handle non-Manhattan tiles.
|
|
lefConnectFunc() --- write polygons to LEF?
|
|
resExpandDevFunc() --- Probably needs to handle split types and replace STACKPUSH.
|
|
(Lots to do in ResUtils.c)
|
|
touchingTypesFunc() --- Should distinguish types between sides, and handle
|
|
triangle geometry.
|
|
|
|
cifInteractingRegions() --- Uses the cifSquares code, but cifSquares does not
|
|
handle non-Manhattan geometry, and interacting/overlapping
|
|
methods must.
|
|
|
|
antennaAccumFunc() --- Needs to handle non-Manhattan geometry.
|
|
|
|
extTransPerimFunc() --- Needs to set TT_SIDE based on boundary direction
|
|
before calling DBSrConnectOnePlane (ExtBasic.c:3882)
|
|
ResMultiPlaneFunc() --- Needs to call ResNewSDDevice() with dinfo information
|
|
|
|
Any routine that does not use "dinfo" should do "if (dinfo & TT_SIDE) return 0".
|
|
|
|
Ought to create a single function for simply returning "1" and replace all the
|
|
assorted functions that do that individually.
|
|
|
|
---------------------
|
|
First pass is done, minus issues reported above that need to be worked on. The
|
|
basic issue of adding an extra argument to all the callback functions is basically
|
|
completed.
|
|
|
|
Moving on to compiling. . .
|
|
CIFgen.c has lots of warnings around PUSHTILE(). Probably an incorrect cast, but
|
|
I need to check all of the uses of PUSH and POP everywhere, anyway.
|
|
|
|
1/2/2026:
|
|
Compiles now!
|
|
Debug. . .
|
|
Errors in dbwind (missed a DBSrPaintArea() call)
|
|
Need to pass dinfo to GrBox() and GrBoxOutline()
|
|
|
|
Issue: Paint square on top of diagonal edge, ends up with one part of the tile
|
|
not properly split at the edge; the tile goes to infinity and has a non-space
|
|
type.
|
|
|
|
Reminder: Need to check for all instances of SplitSide(), as there should not
|
|
be any. There are still 38 references that need to be removed.
|
|
|
|
Fix: extWalkTop (Bottom, Right, Left). . . type should not have been set by
|
|
the split side of tile "tp". Should be according to the side being searched
|
|
and the diagonal directions of "tile" and "tp".
|
|
|
|
ResUtils: Cannot use STACKPUSH and STACKPOP
|
|
|
|
A number of remaining uses of SplitSide() are in routines that were not fixed
|
|
for dinfo or are not directly called from modified search functions, so will
|
|
need to fix each one in turn.
|
|
|
|
Add dinfo to extSubtreeTileToNode() and extSubtreeHardNode()
|
|
extNodeToTile needs to return dinfo. . .
|
|
|
|
extGetRegion() will need to be handled but only when I'm done with this and
|
|
working on being able to attach two regions to a split tile.
|
|
|