Example: Rows of Interface-Specific Tables

Consider the version graph for a typical object. Suppose the object is part of a user-installed information model; it conforms to the CParagraph class. Suppose further that the CParagraph class implements two interfaces:

The following figure shows a portion of the version graph, along with properties for each version of the object.

Assume that the object's internal identifier is 7. Assume that Version 7 and Version 9 are leaf nodes; they have no successors. Also assume that there are two branches containing these object versions, as shown in the following figure.

The properties for these object versions are stored in two separate interface-specific tables. The table for the properties of the IFont interface includes the following rows.


IntID

Z_BranchID_Z

Z_VS_Z

Z_VE_Z

Color

Style
Point Size
7 2 0 1 Blue Italic 10
7 2 3 VERINFINITY Blue Italic 10
7 2 0 VERINFINITY Blue Italic 10

The first row in the preceding table indicates that the properties (Blue, Italic, 10-point) apply to each object version in a range within Branch 2 that begins at Version 4 and ends at Version 5.

The second row indicates that the properties (Blue, Italic, 12-point) apply to each object version in a range within Branch 2 that begins at Version 9 and ends at the end of the branch.

Similarly, the third row indicates that the properties (Blue, Italic, 10-point) apply to each object version in a range within Branch 3 that begins at Version 6 and ends at the end of the branch.

The following table for the properties of the IParagraph interface includes the following rows.

IntID Z_BranchID_Z Z_VS_Z Z_VE_Z Alignment Spacing
7 2 0 0 Center Single
7 2 1 VERINFINITY Center Double
7 3 0 VERINFINITY Center Double

The first row of the preceding table indicates that the properties (Center, Single) apply to each object version in a range within Branch 2 that begins at Version 4 and ends at Version 4 — a single-version range.

The second row indicates that the properties (Center, Double) apply to each object version in an unbounded range within Branch 2 that begins at Version 5.

Similarly, the third row indicates that the properties (Center, Double) apply to each object version in an unbounded range within Branch 3 that begins at Version 6.

Within the Z_VE_Z column, VERINFINITY indicates that the range has no upper bound. Thus, if you enlarge a branch (by invoking the CreateVersion method on the branch's newest object version) the creation predecessor's property values will automatically apply to the newly created version.

For example, suppose you invoke the CreateVersion method on Version 9, yielding a version graph as shown in the following figure.

In the preceding figure, the new object version is on the same branch as its predecessor, and has the same properties as it predecessor. To apply these existing property values to the newly created object, the CreateVersion method does not need to modify the IFont-specific property table or the IParagraph-specific property table, because those tables contained rows that applied those property values to ranges with no upper bound.