kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #08184
[PATCH] Type refactoring - needs *extensive* testing
The witch hunt gave its fruits. The patch is a biggie, now I'm testing
it but obviously some bug could have crept it (aka the 'shit happens'
principle).
This would contribute to the C++-ification of kicad and also remove some
slight nearly-impossible-to-hit bugs (bonus point: what's the difference
between FIRST_NO_COPPER_LAYER and FIRST_NON_COPPER_LAYER? now the
compiler tags the error).
What happened:
- On the exterior *nothing*, I hope. It's only an innard rework.
- PCB/gerber layers representation changed from int to enum (and
corresponding operators added). Newer g++ flags as error the assigment
of an int to and enum! So it's more like a 'lightweight' class...
We now have the PCB_LAYER_NUMBER and the PCB_LAYER_MASK. The
GetLayerMask() was put inline in the header so we'll never seen the
ugly (1 << layer) construct. PCB_LAYER_MASK has the appropriate
boolean operators so they're handy to manipulate. Bonus: it's a big
step for adding new layers since these are some big abstractions
anyway (at least they flag every place where a layer/mask is used).
Calls to LayerFromInt and static_cast mark 'difficult' places.
- Many #defines converted to static const; that's the C++ style
- The same enum-conversion was applied to colors. Now colors are not
anymore anonymous ints but the EDA_COLOR_T is fully employed. As
someone already know EDA_COLOR_T also carries some flags and the alpha
should value in the higher bits. Some functions help encapsulate this.
Also used the MakeColour when possible instead of accessing the raw
rgb fields.
- GRDrawMode encapsulated as an enum, too (it's a bit field struct,
anyway, but enums help the compiler keeping them separate).
- Completely removed m_Layer from the SCH_ITEM classes; now these are
identified by the class only (i.e. no more subtype for lines which
before could represent wires, buses or even graphic lines). The
refactored classes were the line and bus entry. A factory load
function is used to create the right class depending on the input
record.
- Removed SCH_POLYLINE since it was never implemented anyway
- Some global renamed with the proper prefix (eg. Drc_On -> g_Drc_on)
(still have to find the source for the 'same color of the background'
message, anyway...)
--
Lorenzo Marcantonio
Logos Srl
Attachment:
kicad-type-refactoring.diff.bz2
Description: Binary data
Follow ups