Book Contents | Book Index | Master Index | Previous Chapter | Next Chapter
Search STEP Tools Web Support

29.1 Overview

The RoseUnion class is used for EXPRESS select instances. The EXPRESS compiler creates sub-classes of RoseUnion for each select type in a schema. The RoseUnion class defines only one new function. All other functions are inherited from RoseObject .


Useful Functions Inherited from RoseObject

Some RoseObject functions are only appropriate for select instances. These functions are defined by RoseObject instead of RoseUnion to reduce typecasting by late-bound programs. Refer to RoseObject for more information about the following functions:

    RoseAttribute * RoseObject::getAttribute();
     
    <type_ref>  RoseObject::get<name>();
     
    RoseBoolean RoseObject::isExternal();
    RoseBoolean RoseObject::isUnresolved();
     
    RoseBoolean RoseObject::put<name>(<type_ref> val);


29.2 putAttribute()

void putAttribute(
	const char * att_name
	);
void putAttribute(
	RoseAttribute * att
	);

The putAttribute() function sets the union to contain values of the specified type. The function expects RoseAttribute or the name of an attribute. A select contains attributes for each possible select value, but only one of these can have a value at a time. Each attribute is named after the type prepended with an underscore. If a matching attribute is not found, the union attribute is set to null. The RoseObject::getAttribute() function is used to find what attribute a union is set to.

Example

    /* Set the union so that it holds _widget object data */ 
    RoseUnion * obj;
    RoseObject * widget_obj;
     
    obj->putAttribute ("_widget");
    obj->putObject (widget_obj);
     
    if (!obj-> getAttribute())
        printf ("The select is empty\n");
    else    printf ("The select contains %s data\n", 
                obj-> getAttribute()-> slotDomain()-> name());

 

| Book Contents | Book Index | Master Index | ST-Developer Home | Previous Chapter | Next Chapter |