GIRL的类型定义
1。GIRL的基本类型
预定义的基本数据类型有:
- girlt_integer:表示整数。在C/C++中对应于gint。
- girlt_float:表示浮点数。在C/C++中对应于gfloat。
- girlt_string:表示字符串。在C/C++中对应于girlString。
- girlt_color:表示颜色。在C/C++中对应于girlColor。
- girlt_cursor:表示光标。在C/C++中对应于girlCursor。
- girlt_eventdata:表示X Window事件数据。在C/C++中对应于girlEventData。
- girlt_font:表示字体。在C/C++中对应于girlFont。
- girlt_pixmap:表示位图。在C/C++中对应于girlPixmap。
- girlt_widget:表示构件。在C/C++中对应于girlWidget。
其中,girlt_integer、girlt_float、girlt_string、girlt_color、girlt_cursor、
girlt_eventdata、girlt_font、girlt_pixmap、girlt_widget为系统预定义类型标识符。GIRL源程序
可以直接使用它们。在C/C++源程序中,也可以直接使用,girlt_XXX在C/C++源程序中,等价于
girl_get_handle("girlt_XXX")。
girlString、girlColor、girlCursor、girlEventData、girlFont、girlPixmap、girlWidget是
GIRL定义的C/C++结构。在GIRL的系统头文件中定义。
2。在GIRL源文件中定义组合类型
类似与C/C++的结构,GIRL允许自行定义组合类型。组合类型是基本类型或其他组合类型的有序组合。
组合类型仅仅能够在GIRL源文件中定义。在C/C++中不能定义新的组合类型。由于类型只能定义,不能
说明,因此类型的定义可以出现在不同的GIRL模块中。在连接的时候,GIRL将检测不同模块中定义的同
名类型的一致性。
GIRL按照如下方式定义组合类型:
类型标识符=type(数据类型标识符|组合数据类型[,…])
例如指令“compound_type=type(girlt_color,(girlt_integer,girlt_string))”定义了一个新类型
compound_type。compound_type的第一个成员是基本类型girlt_color,第二个成员是匿名组合类型
(girlt_integer,girlt_string)。
对组合类型的定义,通常被放入头文件,以便各个模块引用。
在C/C++程序中访问类型
在C/C++中通过类型标识符句柄访问类型。应用程序通常利用girl_get_handle获得标识符句柄。
为了便于访问GIRL类型数据,GIRL定义了如下数据结构:
- girlObject:GIRL数据对象,可以包含任何数据类型的数据。
- girlt_anonymous:一个代表匿名类型的预定义句柄。基本类型都不是匿名类型,匿名类型只会在
组合类型的子组合类型没有被命名的情况下出现。对于前面的例子,(girlt_integer,girlt_string)就是
一个匿名类型。
- gint:32位有符号整数。
- gfloat:双精度浮点数。
- girlString:GIRL字符串对象。可以包含字符串。
- girlColor:GIRL颜色对象。可以包含颜色数据。
- girlCursor:GIRL光标对象。可以包含光标数据。
- girlEventData:GIRL事件数据对象。对应与结构XEvent。
- girlFont:GIRL字体对象。可以包含字体数据。
- girlPixmap:GIRL位图对象。可以包含位图数据。
- girlWidget:GIRL构件对象。可以包含构件数据。
为了便于访问GIRL类型及类型数据,GIRL定义了如下函数:
- girlObject *girl_fetch_object(ghandle identifier);
该函数获取给定对象标识符对应的对象。
- bool girl_check_type(ghandle type,girlObject *pgobj);
在pgobj的类型与type相符时返回真,否则返回假。如果type为girlt_anonymous或者pgobj为
匿名类型,本函数必然返回假,而不论其是否相同。
- bool girl_check_object_type(girlObject *pgobj1,girlObject *pgobj2);
在pgobj1和pgobj2的类型完全一致时,返回真。否则返回假。如果pgobj1和pgobj2都为匿名类型,
则对元素类型进行逐个比较,如果完全一致返回真。
- ghandle girl_get_type(girlObject *pgobj);
获取pgobj的类型。如果pgobj为匿名类型,则返回girlt_anonymous。
- gint girl_get_sub_num(girlObject *pgobj);
返回组合类型元素的个数。对于基本数据类型,返回0。
- ghandle girl_get_sub_type(girlObject *pgobj,gint position);
获取pgobj指定位置的数据的类型。如果指定位置的数据为匿名类型,则返回girlt_anonymous。
如果position超出范围,返回gnull。
- girlObject *girl_get_element(girlObject *pgobj,gint position);
获取pgobj指定位置的元素。如果position超出范围,返回NULL。这里仅仅返回指向元素的指针,
不能够单独删除这个元素。如果需要可以另行用girl_duplicate_object以复制对象。
- bool girl_set_element(girlObject *pgobj,gint position, girlObject *pgsubobj);
设置pgobj指定位置的元素。如果position超出范围,则本调用无效。给出girlObject的类型必须
和给定位置的元素类型完全相同。在成功地调用girl_set_element之后,pgsubobj归pgobj所有,并且
返回真。否则返回假。
- girlObject *girl_create_object(ghandle type,...);
根据type创建对象。给出的数据必须和type所要求的数据类型完全相符(除gint、gfloat之外,
需要给出对象的指针)。给出的数据装载到目标对象中。由于对象没有被复制(除gint、gfloat外),
所以给出的数据元素在成功地调用girl_create_object之后归新对象所有。
- girlObject *girl_duplicate_object(girlObject *pgobj);
复制给出的对象。
- girlString *girl_duplicate_string(girlString *pstring);
复制给出的字符串对象。
- girlColor *girl_duplicate_color(girlColor *pcolor);
复制给出的颜色对象。
- girlCursor *girl_duplicate_cursor(girlCursor *pcursor);
复制给出的光标对象。
- girlEventData *girl_duplicate_eventdata(girlPixmap *ppixmap);
复制给出的事件数据对象。
- girlFont *girl_duplicate_font(girlFont *pfont);
复制给出的字体对象。
- girlPixmap *girl_duplicate_pixmap(girlPixmap *ppixmap);
复制给出的位图对象。
- girlWidget *girl_duplicate_widget(girlWidget *pwidget);
复制给出的构件对象。
- void girl_destroy_object(girlObject *pgobj);
删除给出的对象。
- void girl_destroy_string(girlString *pstring);
删除给出的字符串对象。
- void girl_destroy_color(girlColor *pcolor);
删除给出颜色对象。
- void girl_destroy_cursor(girlCursor *pcursor);
删除给出光标对象。
- void girl_destroy_eventdata(girlEventData *pcursor);
删除给出事件数据对象。
- void girl_destroy_font(girlFont *pfont);
删除给出字体对象。
- void girl_destroy_pixmap(girlPixmap *ppixmap);
删除给出位图对象。
- void girl_destroy_widget(girlWidget *pwidget);
删除给出构件对象。
- gint girl_extract_integer(girlObject *pgobj);
获取gint。pgobj的类型必须是girlt_integer。如果不是,则返回0。
- gfloat girl_extract_float(girlObject *pgobj);
获取gfloat。pgobj的类型必须是girlt_float。如果不是,则返回0.0。
- girlString *girl_extract_string(girlObject *pgobj);
获取girlString。pgobj的类型必须是girlt_string。如果不是,则返回NULL。
本函数直接返回字符串对象指针,而不是复制字符串对象。
- girlColor *girl_extract_color(girlObject *pgobj);
本函数直接返回颜色对象指针,而不是复制颜色对象。
获取girlColor。pgobj的类型必须是girlt_color。如果不是,则返回NULL。
- girlCursor *girl_extract_cursor(girlObject *pgobj);
获取girlCurosr。pgobj的类型必须是girlt_cursor。如果不是,则返回NULL。
本函数直接返回光标对象指针,而不是复制光标对象。
- XEvent *girl_extract_eventdata(girlObject *pgobj);
获取XEvent。pgobj的类型必须是girlt_eventdata。如果不是,则返回NULL。
本函数直接返回事件数据结构指针,而不是复制事件数据结构。
- girlFont *girl_extract_font(girlObject *pgobj);
获取girlFont。pgobj的类型必须是girlt_font。如果不是,则返回NULL。
本函数直接返回字体对象指针,而不是复制字体对象。
- girlPixmap *girl_extract_pixmap(girlObject *pgobj);
获取girlPixmap。pgobj的类型必须是girlt_pixmap。如果不是,则返回NULL。
本函数直接返回位图对象指针,而不是复制位图对象。
- girlWidget *girl_extract_widget(girlObject *pgobj);
获取girlWidget。pgobj的类型必须是girlt_widget。如果不是,则返回NULL。
本函数直接返回构件指针,而不是复制构件。