← Back to team overview

kicad-developers team mailing list archive

[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