ExternView, PreorderView, InorderView, PostorderView - base class for external
representation objects and subclasses for common traversals
ExternView is the abstract base class for external representation objects.
Generally speaking, external representation objects convey domain-specific
information outside the editor. They are simply component views that extract
information from their subject and externalize it as a stream of bytes; thus
the ExternView base class is derived from ComponentView.
There are three predefined ExternView subclasses: PreorderView,
InorderView, and PostorderView. These subclasses manage subviews and support
three common traversals of the external view hierarchy.
EXTERNVIEW PUBLIC OPERATIONS¶
- virtual boolean Emit(ostream&)
- virtual boolean Definition(ostream&)
- Emit and Definition make up the basic ExternView protocol. Emit initiates
external representation generation and calls Definition on each of its
children. Emit normally calls the external view's own Definition operation
first. Then if the external view contains subviews, Emit invokes the
children's Definition operations in the proper order to ensure a
syntactically correct external representation. Both of these operation do
nothing by default, and both return a boolean that indicates whether the
stream of bytes was generated successfully.
- ExternView* GetView(Iterator)
- void SetView(ExternView*, Iterator&)
- These operations do nothing by default. Subclasses that contain children
should redefine them as follows: GetView should return the ExternView to
which an iterator points. SetView should initialize the iterator to point
to a particular ExternView in the list of children; it should initialize
the iterator to point to a nil instance if the given ExternView is not a
EXTERNVIEW PROTECTED OPERATIONS¶
- ExternView(Component* = nil)
- The abstract base class constructor is protected to guard against
instantiation. It takes the subject as an optional argument.
PreorderView, InorderView, and PostorderView redefine their Definition
operations to perform preorder, inorder, and postorder traversals of their
children, respectively. Each child's Definition operation is called during the
traversal. Note that every child must be an instance of the same ExternView
subclass to ensure a consistent traversal order.
Component(3U), ComponentView(3U), Iterator(3U), ostream(3C++)