[Ktechlab-devel] code cleanup and connector lists
P Zoltan
zoltan.padrah at gmail.com
Wed Dec 3 21:38:36 UTC 2008
Hello people,
As a code cleanup I'm plannig to separate electronics and flowparts, such
that electornic nodes to be connected with electronic connectors, while
flownodes to be connected with flowconnectors. Obviously buth connector
types and node types will inherit from Connector respectively Node. I want
to sketch here an implementation problem, to ask your advice.
A FPNode has some methods which return a ConnectorList; however a
flowconnector should keep a list of FPNodes, an electronic connector a
list of ECNodes, so they should return something like FlowConnectorList or
ElectroincConnectorList. The problem is that is we define
FlowConnectorList as:
typedef QValueList< QGuaredPtr< FlowConnector > > FlowConnectorList;
and
typedef QValueList< QGuardedPtr< Connector> > ConnectorList;
then we can't upcast a FlowConnectorList to ConnectorList (They are not
compatible), but Node::connectorList method is used in many places in the
program. Here are few solutions to this problem:
a.) implement all methods related to ConnectorLists using
{Flow|Electornic}ConnectorList. This is quite inefficient because in this
way every time such method is called, a new ConnectorList should be
created and filled with elements from the specialized ConnectorList.
b.) create the FlowConnectorList as a subclass of ConnectorList and
override most methods. I consider this a hack.
c.) redesign the interface of Node and all subclasses, such that the class
itself won't provide a list, only an interator and associated functions --
this way all the mess with *ConnectorList will disappear. This is more
efficient as a), and it should be be enough for the majority of occurences
of connectorList method.
My question is how should be this problem threated?
After fixing this and removing many unneded casts, I'd like to start
fixing the bugs related to the open-save of the files. I have a feeling
that the autorouter messes up the circuit, because sometimes dragging a
component on the circuit has "side" effets.
Have I seen right that unit testing framework integrated in qt exists
only from version >= 4 ? Some unit tests in the program would be really
useful -- at least we will know if we break something.
Have fun,
Zoltan
More information about the Ktechlab-devel
mailing list