proposals for enumeration of interface-specific error codes

Tim Tautges tautges at mcs.anl.gov
Mon Aug 30 15:55:57 CDT 2010


Note that I have no objection to option 1 below, aside from being sensitive to others' feelings on the issue.

- tim

On 08/24/2010 12:31 PM, Jason Kraftcheck wrote:
> The need for interface-specific error codes was discussed during the
> boot camp. The following items were agreed upon:
>
> o New error codes should be set to the list for review.
> o All error codes should be included in the iBase_ErrorType enumeration
> (defined in iBase.h)
> o Interface-specific error codes should be prefixed with the name of the
> interface that they are specific to in place of the iBase prefix. For
> example: iMeshP_NO_PARTITION rather than iBase_NO_PARTITION.
> o The error codes should be enumerated such that adding a new error code
> does not break implementations of different interfaces that use an
> array of strings to implement i*_getDescription. For example, adding
> a new iMeshP_* error code should not break iRel_* implementations.
>
> Below I will propose three alternate schemes for addressing the last
> point (only).
>
> All of these schemes have the additional beneficial property that things
> will not break if interface-specific error codes are added to the list
> for an interface for which there were no specific error codes,
> effectively changing the ordering of the blocks of interface-specific
> codes.
>
> --------------------------------- 1 ----------------------------------
>
> My first, and most controversial suggestion, is to ignore the issue.
> Getting an error string from an error code should not be a
> performance-sensitive issue. There is no reason not to use a switch
> statement to obtain the string for an error code rather than indexing
> into an array, and such a solution does not break in difficult to catch
> ways when the list of error codes changes.
>
> --------------------------------- 2 ----------------------------------
>
> The second solution is to do the array based indexing using relative
> values. Similar to my first proposed solution, this solution requires
> nothing special be done in the iBase_ErrorType definition.
>
> The index into the array of interface-specific error codes can be
> determined by subtracting the first interface-specific error code from
> the passed error code. For example:
>
> Given:
>
> enum iBase_ErrorType {
> iBase_SUCCESS,
> iBase_MESH_ALREADY_LOADED,
> iBase_NO_MESH_DATA,
> ...
> iBase_FAILURE,
>
> iRel_NO_RELATION,
> ...
> iRel_NO_SETS,
>
> iMeshP_NO_PARTITION,
> iMeshP_NO_PART,
> };
>
> Do something like:
>
> const iBase_ErrorType first_irel_error = iRel_NO_RELATION;
> if (error_code >= first_irel_error)
> return iRel_error_strings[error_code - first_irel_error];
>
>
> ---------------------------------- 3 ---------------------------------
>
> The final suggestion is to use explicit fixed offsets. This is probably
> most like what the those in the group who expressed a need for this
> requirement expected. However, it also results in a fairly sparse array.
> That makes the use of a single common function to for all
> implementations that indexes into a single array more difficult.
>
> Move this enumeration from the iRel.h header to iBase.h (this should
> probably be done anyway):
>
> enum IfaceType
> {iRel_IBASE_IFACE = 0,
> iRel_IGEOM_IFACE,
> iRel_IMESH_IFACE,
> iRel_IFIELD_IFACE,
> iRel_IREL_IFACE};
>
> and change it to be the following:
> enum iBase_IfaceType
> {
> iBase_IBASE_IFACE = 0,
> iBase_IGEOM_IFACE,
> iBase_IMESH_IFACE,
> iBase_IMESHP_IFACE,
> iBase_IFIELD_IFACE,
> iBase_IREL_IFACE
> };
>
> Now explicitly define the first interface-specific error code for each
> interface to be 100 times the corresponding value in the IfaceType
> enumeration.
>
> For example:
>
>
> enum iBase_ErrorType {
> iBase_SUCCESS = 100*iBase_IBASE_IFACE,
> iBase_MESH_ALREADY_LOADED,
> iBase_NO_MESH_DATA,
> ...
> iBase_FAILURE,
>
> iRel_NO_RELATION = 100*iBase_IREL_IFACE,
> ...
> iRel_NO_SETS,
>
> iMeshP_NO_PARTITION = 100*iBase_IMESHP_IFACE,
> iMeshP_NO_PART,
> };
>
>
>

-- 
================================================================
"You will keep in perfect peace him whose mind is
   steadfast, because he trusts in you."               Isaiah 26:3

              Tim Tautges            Argonne National Laboratory
          (tautges at mcs.anl.gov)      (telecommuting from UW-Madison)
          phone: (608) 263-8485      1500 Engineering Dr.
            fax: (608) 263-4499      Madison, WI 53706



More information about the tstt-interface mailing list