1 /* 2 * This file is part of gtkD. 3 * 4 * gtkD is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU Lesser General Public License 6 * as published by the Free Software Foundation; either version 3 7 * of the License, or (at your option) any later version, with 8 * some exceptions, please read the COPYING file. 9 * 10 * gtkD is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with gtkD; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA 18 */ 19 20 // generated automatically - do not change 21 // find conversion definition on APILookup.txt 22 // implement new conversion functionalities on the wrap.utils pakage 23 24 25 module gobject.Type; 26 27 private import glib.Str; 28 private import gobject.ObjectG; 29 private import gobject.TypeClass; 30 private import gobject.TypeInstance; 31 private import gobject.TypeInterface; 32 private import gobject.TypePlugin; 33 private import gobject.TypePluginIF; 34 private import gobject.Value; 35 private import gtkc.gobject; 36 public import gtkc.gobjecttypes; 37 38 39 /** */ 40 public struct Type 41 { 42 public static T* getInstanceClass(T)(ObjectG obj) 43 { 44 return cast(T*) (cast(GTypeInstance*)obj.getObjectGStruct()).gClass; 45 } 46 47 /** 48 * Get the unique name that is assigned to the Objects type. 49 * Returns: Static type name or NULL. 50 */ 51 public static string name(ObjectG obj) 52 { 53 GType type = (cast(GTypeInstance*)obj.getObjectGStruct()).gClass.gType; 54 55 return name(type); 56 } 57 58 /** 59 */ 60 61 /** 62 * Adds a #GTypeClassCacheFunc to be called before the reference count of a 63 * class goes from one to zero. This can be used to prevent premature class 64 * destruction. All installed #GTypeClassCacheFunc functions will be chained 65 * until one of them returns %TRUE. The functions have to check the class id 66 * passed in to figure whether they actually want to cache the class of this 67 * type, since all classes are routed through the same #GTypeClassCacheFunc 68 * chain. 69 * 70 * Params: 71 * cacheData = data to be passed to @cache_func 72 * cacheFunc = a #GTypeClassCacheFunc 73 */ 74 public static void addClassCacheFunc(void* cacheData, GTypeClassCacheFunc cacheFunc) 75 { 76 g_type_add_class_cache_func(cacheData, cacheFunc); 77 } 78 79 /** 80 * Registers a private class structure for a classed type; 81 * when the class is allocated, the private structures for 82 * the class and all of its parent types are allocated 83 * sequentially in the same memory block as the public 84 * structures, and are zero-filled. 85 * 86 * This function should be called in the 87 * type's get_type() function after the type is registered. 88 * The private structure can be retrieved using the 89 * G_TYPE_CLASS_GET_PRIVATE() macro. 90 * 91 * Params: 92 * classType = GType of an classed type 93 * privateSize = size of private structure 94 * 95 * Since: 2.24 96 */ 97 public static void addClassPrivate(GType classType, size_t privateSize) 98 { 99 g_type_add_class_private(classType, privateSize); 100 } 101 102 /** */ 103 public static int addInstancePrivate(GType classType, size_t privateSize) 104 { 105 return g_type_add_instance_private(classType, privateSize); 106 } 107 108 /** 109 * Adds a function to be called after an interface vtable is 110 * initialized for any class (i.e. after the @interface_init 111 * member of #GInterfaceInfo has been called). 112 * 113 * This function is useful when you want to check an invariant 114 * that depends on the interfaces of a class. For instance, the 115 * implementation of #GObject uses this facility to check that an 116 * object implements all of the properties that are defined on its 117 * interfaces. 118 * 119 * Params: 120 * checkData = data to pass to @check_func 121 * checkFunc = function to be called after each interface 122 * is initialized 123 * 124 * Since: 2.4 125 */ 126 public static void addInterfaceCheck(void* checkData, GTypeInterfaceCheckFunc checkFunc) 127 { 128 g_type_add_interface_check(checkData, checkFunc); 129 } 130 131 /** 132 * Adds the dynamic @interface_type to @instantiable_type. The information 133 * contained in the #GTypePlugin structure pointed to by @plugin 134 * is used to manage the relationship. 135 * 136 * Params: 137 * instanceType = #GType value of an instantiable type 138 * interfaceType = #GType value of an interface type 139 * plugin = #GTypePlugin structure to retrieve the #GInterfaceInfo from 140 */ 141 public static void addInterfaceDynamic(GType instanceType, GType interfaceType, TypePluginIF plugin) 142 { 143 g_type_add_interface_dynamic(instanceType, interfaceType, (plugin is null) ? null : plugin.getTypePluginStruct()); 144 } 145 146 /** 147 * Adds the static @interface_type to @instantiable_type. 148 * The information contained in the #GInterfaceInfo structure 149 * pointed to by @info is used to manage the relationship. 150 * 151 * Params: 152 * instanceType = #GType value of an instantiable type 153 * interfaceType = #GType value of an interface type 154 * info = #GInterfaceInfo structure for this 155 * (@instance_type, @interface_type) combination 156 */ 157 public static void addInterfaceStatic(GType instanceType, GType interfaceType, GInterfaceInfo* info) 158 { 159 g_type_add_interface_static(instanceType, interfaceType, info); 160 } 161 162 /** */ 163 public static TypeClass checkClassCast(TypeClass gClass, GType isAType) 164 { 165 auto p = g_type_check_class_cast((gClass is null) ? null : gClass.getTypeClassStruct(), isAType); 166 167 if(p is null) 168 { 169 return null; 170 } 171 172 return ObjectG.getDObject!(TypeClass)(cast(GTypeClass*) p); 173 } 174 175 /** */ 176 public static bool checkClassIsA(TypeClass gClass, GType isAType) 177 { 178 return g_type_check_class_is_a((gClass is null) ? null : gClass.getTypeClassStruct(), isAType) != 0; 179 } 180 181 /** 182 * Private helper function to aid implementation of the 183 * G_TYPE_CHECK_INSTANCE() macro. 184 * 185 * Params: 186 * instanc = a valid #GTypeInstance structure 187 * 188 * Return: %TRUE if @instance is valid, %FALSE otherwise 189 */ 190 public static bool checkInstance(TypeInstance instanc) 191 { 192 return g_type_check_instance((instanc is null) ? null : instanc.getTypeInstanceStruct()) != 0; 193 } 194 195 /** */ 196 public static TypeInstance checkInstanceCast(TypeInstance instanc, GType ifaceType) 197 { 198 auto p = g_type_check_instance_cast((instanc is null) ? null : instanc.getTypeInstanceStruct(), ifaceType); 199 200 if(p is null) 201 { 202 return null; 203 } 204 205 return ObjectG.getDObject!(TypeInstance)(cast(GTypeInstance*) p); 206 } 207 208 /** */ 209 public static bool checkInstanceIsA(TypeInstance instanc, GType ifaceType) 210 { 211 return g_type_check_instance_is_a((instanc is null) ? null : instanc.getTypeInstanceStruct(), ifaceType) != 0; 212 } 213 214 /** */ 215 public static bool checkInstanceIsFundamentallyA(TypeInstance instanc, GType fundamentalType) 216 { 217 return g_type_check_instance_is_fundamentally_a((instanc is null) ? null : instanc.getTypeInstanceStruct(), fundamentalType) != 0; 218 } 219 220 /** */ 221 public static bool checkIsValueType(GType type) 222 { 223 return g_type_check_is_value_type(type) != 0; 224 } 225 226 /** */ 227 public static bool checkValue(Value value) 228 { 229 return g_type_check_value((value is null) ? null : value.getValueStruct()) != 0; 230 } 231 232 /** */ 233 public static bool checkValueHolds(Value value, GType type) 234 { 235 return g_type_check_value_holds((value is null) ? null : value.getValueStruct(), type) != 0; 236 } 237 238 /** 239 * Return a newly allocated and 0-terminated array of type IDs, listing 240 * the child types of @type. 241 * 242 * Params: 243 * type = the parent type 244 * 245 * Return: Newly allocated 246 * and 0-terminated array of child types, free with g_free() 247 */ 248 public static GType[] children(GType type) 249 { 250 uint nChildren; 251 252 auto p = g_type_children(type, &nChildren); 253 254 return p[0 .. nChildren]; 255 } 256 257 /** 258 * Creates and initializes an instance of @type if @type is valid and 259 * can be instantiated. The type system only performs basic allocation 260 * and structure setups for instances: actual instance creation should 261 * happen through functions supplied by the type's fundamental type 262 * implementation. So use of g_type_create_instance() is reserved for 263 * implementators of fundamental types only. E.g. instances of the 264 * #GObject hierarchy should be created via g_object_new() and never 265 * directly through g_type_create_instance() which doesn't handle things 266 * like singleton objects or object construction. 267 * 268 * The extended members of the returned instance are guaranteed to be filled 269 * with zeros. 270 * 271 * Note: Do not use this function, unless you're implementing a 272 * fundamental type. Also language bindings should not use this 273 * function, but g_object_new() instead. 274 * 275 * Params: 276 * type = an instantiatable type to create an instance for 277 * 278 * Return: an allocated and initialized instance, subject to further 279 * treatment by the fundamental type implementation 280 */ 281 public static TypeInstance createInstance(GType type) 282 { 283 auto p = g_type_create_instance(type); 284 285 if(p is null) 286 { 287 return null; 288 } 289 290 return ObjectG.getDObject!(TypeInstance)(cast(GTypeInstance*) p); 291 } 292 293 /** 294 * If the interface type @g_type is currently in use, returns its 295 * default interface vtable. 296 * 297 * Params: 298 * gType = an interface type 299 * 300 * Return: the default 301 * vtable for the interface, or %NULL if the type is not currently 302 * in use 303 * 304 * Since: 2.4 305 */ 306 public static TypeInterface defaultInterfacePeek(GType gType) 307 { 308 auto p = g_type_default_interface_peek(gType); 309 310 if(p is null) 311 { 312 return null; 313 } 314 315 return ObjectG.getDObject!(TypeInterface)(cast(GTypeInterface*) p); 316 } 317 318 /** 319 * Increments the reference count for the interface type @g_type, 320 * and returns the default interface vtable for the type. 321 * 322 * If the type is not currently in use, then the default vtable 323 * for the type will be created and initalized by calling 324 * the base interface init and default vtable init functions for 325 * the type (the @base_init and @class_init members of #GTypeInfo). 326 * Calling g_type_default_interface_ref() is useful when you 327 * want to make sure that signals and properties for an interface 328 * have been installed. 329 * 330 * Params: 331 * gType = an interface type 332 * 333 * Return: the default 334 * vtable for the interface; call g_type_default_interface_unref() 335 * when you are done using the interface. 336 * 337 * Since: 2.4 338 */ 339 public static TypeInterface defaultInterfaceRef(GType gType) 340 { 341 auto p = g_type_default_interface_ref(gType); 342 343 if(p is null) 344 { 345 return null; 346 } 347 348 return ObjectG.getDObject!(TypeInterface)(cast(GTypeInterface*) p); 349 } 350 351 /** 352 * Decrements the reference count for the type corresponding to the 353 * interface default vtable @g_iface. If the type is dynamic, then 354 * when no one is using the interface and all references have 355 * been released, the finalize function for the interface's default 356 * vtable (the @class_finalize member of #GTypeInfo) will be called. 357 * 358 * Params: 359 * gIface = the default vtable 360 * structure for a interface, as returned by g_type_default_interface_ref() 361 * 362 * Since: 2.4 363 */ 364 public static void defaultInterfaceUnref(TypeInterface gIface) 365 { 366 g_type_default_interface_unref((gIface is null) ? null : gIface.getTypeInterfaceStruct()); 367 } 368 369 /** 370 * Returns the length of the ancestry of the passed in type. This 371 * includes the type itself, so that e.g. a fundamental type has depth 1. 372 * 373 * Params: 374 * type = a #GType 375 * 376 * Return: the depth of @type 377 */ 378 public static uint depth(GType type) 379 { 380 return g_type_depth(type); 381 } 382 383 /** 384 * Ensures that the indicated @type has been registered with the 385 * type system, and its _class_init() method has been run. 386 * 387 * In theory, simply calling the type's _get_type() method (or using 388 * the corresponding macro) is supposed take care of this. However, 389 * _get_type() methods are often marked %G_GNUC_CONST for performance 390 * reasons, even though this is technically incorrect (since 391 * %G_GNUC_CONST requires that the function not have side effects, 392 * which _get_type() methods do on the first call). As a result, if 393 * you write a bare call to a _get_type() macro, it may get optimized 394 * out by the compiler. Using g_type_ensure() guarantees that the 395 * type's _get_type() method is called. 396 * 397 * Params: 398 * type = a #GType 399 * 400 * Since: 2.34 401 */ 402 public static void ensure(GType type) 403 { 404 g_type_ensure(type); 405 } 406 407 /** 408 * Frees an instance of a type, returning it to the instance pool for 409 * the type, if there is one. 410 * 411 * Like g_type_create_instance(), this function is reserved for 412 * implementors of fundamental types. 413 * 414 * Params: 415 * instanc = an instance of a type 416 */ 417 public static void freeInstance(TypeInstance instanc) 418 { 419 g_type_free_instance((instanc is null) ? null : instanc.getTypeInstanceStruct()); 420 } 421 422 /** 423 * Lookup the type ID from a given type name, returning 0 if no type 424 * has been registered under this name (this is the preferred method 425 * to find out by name whether a specific type has been registered 426 * yet). 427 * 428 * Params: 429 * name = type name to lookup 430 * 431 * Return: corresponding type ID or 0 432 */ 433 public static GType fromName(string name) 434 { 435 return g_type_from_name(Str.toStringz(name)); 436 } 437 438 /** 439 * Internal function, used to extract the fundamental type ID portion. 440 * Use G_TYPE_FUNDAMENTAL() instead. 441 * 442 * Params: 443 * typeId = valid type ID 444 * 445 * Return: fundamental type ID 446 */ 447 public static GType fundamental(GType typeId) 448 { 449 return g_type_fundamental(typeId); 450 } 451 452 /** 453 * Returns the next free fundamental type id which can be used to 454 * register a new fundamental type with g_type_register_fundamental(). 455 * The returned type ID represents the highest currently registered 456 * fundamental type identifier. 457 * 458 * Return: the next available fundamental type ID to be registered, 459 * or 0 if the type system ran out of fundamental type IDs 460 */ 461 public static GType fundamentalNext() 462 { 463 return g_type_fundamental_next(); 464 } 465 466 /** 467 * Returns the #GTypePlugin structure for @type. 468 * 469 * Params: 470 * type = #GType to retrieve the plugin for 471 * 472 * Return: the corresponding plugin 473 * if @type is a dynamic type, %NULL otherwise 474 */ 475 public static TypePluginIF getPlugin(GType type) 476 { 477 auto p = g_type_get_plugin(type); 478 479 if(p is null) 480 { 481 return null; 482 } 483 484 return ObjectG.getDObject!(TypePlugin, TypePluginIF)(cast(GTypePlugin*) p); 485 } 486 487 /** 488 * Obtains data which has previously been attached to @type 489 * with g_type_set_qdata(). 490 * 491 * Note that this does not take subtyping into account; data 492 * attached to one type with g_type_set_qdata() cannot 493 * be retrieved from a subtype using g_type_get_qdata(). 494 * 495 * Params: 496 * type = a #GType 497 * quark = a #GQuark id to identify the data 498 * 499 * Return: the data, or %NULL if no data was found 500 */ 501 public static void* getQdata(GType type, GQuark quark) 502 { 503 return g_type_get_qdata(type, quark); 504 } 505 506 /** 507 * Returns an opaque serial number that represents the state of the set 508 * of registered types. Any time a type is registered this serial changes, 509 * which means you can cache information based on type lookups (such as 510 * g_type_from_name()) and know if the cache is still valid at a later 511 * time by comparing the current serial with the one at the type lookup. 512 * 513 * Return: An unsigned int, representing the state of type registrations 514 * 515 * Since: 2.36 516 */ 517 public static uint getTypeRegistrationSerial() 518 { 519 return g_type_get_type_registration_serial(); 520 } 521 522 /** 523 * This function used to initialise the type system. Since GLib 2.36, 524 * the type system is initialised automatically and this function does 525 * nothing. 526 * 527 * Deprecated: the type system is now initialised automatically 528 */ 529 public static void init() 530 { 531 g_type_init(); 532 } 533 534 /** 535 * This function used to initialise the type system with debugging 536 * flags. Since GLib 2.36, the type system is initialised automatically 537 * and this function does nothing. 538 * 539 * If you need to enable debugging features, use the GOBJECT_DEBUG 540 * environment variable. 541 * 542 * Deprecated: the type system is now initialised automatically 543 * 544 * Params: 545 * debugFlags = bitwise combination of #GTypeDebugFlags values for 546 * debugging purposes 547 */ 548 public static void initWithDebugFlags(GTypeDebugFlags debugFlags) 549 { 550 g_type_init_with_debug_flags(debugFlags); 551 } 552 553 /** 554 * Return a newly allocated and 0-terminated array of type IDs, listing 555 * the interface types that @type conforms to. 556 * 557 * Params: 558 * type = the type to list interface types for 559 * 560 * Return: Newly allocated 561 * and 0-terminated array of interface types, free with g_free() 562 */ 563 public static GType[] interfaces(GType type) 564 { 565 uint nInterfaces; 566 567 auto p = g_type_interfaces(type, &nInterfaces); 568 569 return p[0 .. nInterfaces]; 570 } 571 572 /** 573 * If @is_a_type is a derivable type, check whether @type is a 574 * descendant of @is_a_type. If @is_a_type is an interface, check 575 * whether @type conforms to it. 576 * 577 * Params: 578 * type = type to check anchestry for 579 * isAType = possible anchestor of @type or interface that @type 580 * could conform to 581 * 582 * Return: %TRUE if @type is a @is_a_type 583 */ 584 public static bool isA(GType type, GType isAType) 585 { 586 return g_type_is_a(type, isAType) != 0; 587 } 588 589 /** 590 * Get the unique name that is assigned to a type ID. Note that this 591 * function (like all other GType API) cannot cope with invalid type 592 * IDs. %G_TYPE_INVALID may be passed to this function, as may be any 593 * other validly registered type ID, but randomized type IDs should 594 * not be passed in and will most likely lead to a crash. 595 * 596 * Params: 597 * type = type to return name for 598 * 599 * Return: static type name or %NULL 600 */ 601 public static string name(GType type) 602 { 603 return Str.toString(g_type_name(type)); 604 } 605 606 /** */ 607 public static string nameFromClass(TypeClass gClass) 608 { 609 return Str.toString(g_type_name_from_class((gClass is null) ? null : gClass.getTypeClassStruct())); 610 } 611 612 /** */ 613 public static string nameFromInstance(TypeInstance instanc) 614 { 615 return Str.toString(g_type_name_from_instance((instanc is null) ? null : instanc.getTypeInstanceStruct())); 616 } 617 618 /** 619 * Given a @leaf_type and a @root_type which is contained in its 620 * anchestry, return the type that @root_type is the immediate parent 621 * of. In other words, this function determines the type that is 622 * derived directly from @root_type which is also a base class of 623 * @leaf_type. Given a root type and a leaf type, this function can 624 * be used to determine the types and order in which the leaf type is 625 * descended from the root type. 626 * 627 * Params: 628 * leafType = descendant of @root_type and the type to be returned 629 * rootType = immediate parent of the returned type 630 * 631 * Return: immediate child of @root_type and anchestor of @leaf_type 632 */ 633 public static GType nextBase(GType leafType, GType rootType) 634 { 635 return g_type_next_base(leafType, rootType); 636 } 637 638 /** 639 * Return the direct parent type of the passed in type. If the passed 640 * in type has no parent, i.e. is a fundamental type, 0 is returned. 641 * 642 * Params: 643 * type = the derived type 644 * 645 * Return: the parent type 646 */ 647 public static GType parent(GType type) 648 { 649 return g_type_parent(type); 650 } 651 652 /** 653 * Get the corresponding quark of the type IDs name. 654 * 655 * Params: 656 * type = type to return quark of type name for 657 * 658 * Return: the type names quark or 0 659 */ 660 public static GQuark qname(GType type) 661 { 662 return g_type_qname(type); 663 } 664 665 /** 666 * Queries the type system for information about a specific type. 667 * This function will fill in a user-provided structure to hold 668 * type-specific information. If an invalid #GType is passed in, the 669 * @type member of the #GTypeQuery is 0. All members filled into the 670 * #GTypeQuery structure should be considered constant and have to be 671 * left untouched. 672 * 673 * Params: 674 * type = #GType of a static, classed type 675 * query = a user provided structure that is 676 * filled in with constant values upon success 677 */ 678 public static void query(GType type, out GTypeQuery query) 679 { 680 g_type_query(type, &query); 681 } 682 683 /** 684 * Registers @type_name as the name of a new dynamic type derived from 685 * @parent_type. The type system uses the information contained in the 686 * #GTypePlugin structure pointed to by @plugin to manage the type and its 687 * instances (if not abstract). The value of @flags determines the nature 688 * (e.g. abstract or not) of the type. 689 * 690 * Params: 691 * parentType = type from which this type will be derived 692 * typeName = 0-terminated string used as the name of the new type 693 * plugin = #GTypePlugin structure to retrieve the #GTypeInfo from 694 * flags = bitwise combination of #GTypeFlags values 695 * 696 * Return: the new type identifier or #G_TYPE_INVALID if registration failed 697 */ 698 public static GType registerDynamic(GType parentType, string typeName, TypePluginIF plugin, GTypeFlags flags) 699 { 700 return g_type_register_dynamic(parentType, Str.toStringz(typeName), (plugin is null) ? null : plugin.getTypePluginStruct(), flags); 701 } 702 703 /** 704 * Registers @type_id as the predefined identifier and @type_name as the 705 * name of a fundamental type. If @type_id is already registered, or a 706 * type named @type_name is already registered, the behaviour is undefined. 707 * The type system uses the information contained in the #GTypeInfo structure 708 * pointed to by @info and the #GTypeFundamentalInfo structure pointed to by 709 * @finfo to manage the type and its instances. The value of @flags determines 710 * additional characteristics of the fundamental type. 711 * 712 * Params: 713 * typeId = a predefined type identifier 714 * typeName = 0-terminated string used as the name of the new type 715 * info = #GTypeInfo structure for this type 716 * finfo = #GTypeFundamentalInfo structure for this type 717 * flags = bitwise combination of #GTypeFlags values 718 * 719 * Return: the predefined type identifier 720 */ 721 public static GType registerFundamental(GType typeId, string typeName, GTypeInfo* info, GTypeFundamentalInfo* finfo, GTypeFlags flags) 722 { 723 return g_type_register_fundamental(typeId, Str.toStringz(typeName), info, finfo, flags); 724 } 725 726 /** 727 * Registers @type_name as the name of a new static type derived from 728 * @parent_type. The type system uses the information contained in the 729 * #GTypeInfo structure pointed to by @info to manage the type and its 730 * instances (if not abstract). The value of @flags determines the nature 731 * (e.g. abstract or not) of the type. 732 * 733 * Params: 734 * parentType = type from which this type will be derived 735 * typeName = 0-terminated string used as the name of the new type 736 * info = #GTypeInfo structure for this type 737 * flags = bitwise combination of #GTypeFlags values 738 * 739 * Return: the new type identifier 740 */ 741 public static GType registerStatic(GType parentType, string typeName, GTypeInfo* info, GTypeFlags flags) 742 { 743 return g_type_register_static(parentType, Str.toStringz(typeName), info, flags); 744 } 745 746 /** 747 * Registers @type_name as the name of a new static type derived from 748 * @parent_type. The value of @flags determines the nature (e.g. 749 * abstract or not) of the type. It works by filling a #GTypeInfo 750 * struct and calling g_type_register_static(). 751 * 752 * Params: 753 * parentType = type from which this type will be derived 754 * typeName = 0-terminated string used as the name of the new type 755 * classSize = size of the class structure (see #GTypeInfo) 756 * classInit = location of the class initialization function (see #GTypeInfo) 757 * instanceSize = size of the instance structure (see #GTypeInfo) 758 * instanceInit = location of the instance initialization function (see #GTypeInfo) 759 * flags = bitwise combination of #GTypeFlags values 760 * 761 * Return: the new type identifier 762 * 763 * Since: 2.12 764 */ 765 public static GType registerStaticSimple(GType parentType, string typeName, uint classSize, GClassInitFunc classInit, uint instanceSize, GInstanceInitFunc instanceInit, GTypeFlags flags) 766 { 767 return g_type_register_static_simple(parentType, Str.toStringz(typeName), classSize, classInit, instanceSize, instanceInit, flags); 768 } 769 770 /** 771 * Removes a previously installed #GTypeClassCacheFunc. The cache 772 * maintained by @cache_func has to be empty when calling 773 * g_type_remove_class_cache_func() to avoid leaks. 774 * 775 * Params: 776 * cacheData = data that was given when adding @cache_func 777 * cacheFunc = a #GTypeClassCacheFunc 778 */ 779 public static void removeClassCacheFunc(void* cacheData, GTypeClassCacheFunc cacheFunc) 780 { 781 g_type_remove_class_cache_func(cacheData, cacheFunc); 782 } 783 784 /** 785 * Removes an interface check function added with 786 * g_type_add_interface_check(). 787 * 788 * Params: 789 * checkData = callback data passed to g_type_add_interface_check() 790 * checkFunc = callback function passed to g_type_add_interface_check() 791 * 792 * Since: 2.4 793 */ 794 public static void removeInterfaceCheck(void* checkData, GTypeInterfaceCheckFunc checkFunc) 795 { 796 g_type_remove_interface_check(checkData, checkFunc); 797 } 798 799 /** 800 * Attaches arbitrary data to a type. 801 * 802 * Params: 803 * type = a #GType 804 * quark = a #GQuark id to identify the data 805 * data = the data 806 */ 807 public static void setQdata(GType type, GQuark quark, void* data) 808 { 809 g_type_set_qdata(type, quark, data); 810 } 811 812 /** */ 813 public static bool testFlags(GType type, uint flags) 814 { 815 return g_type_test_flags(type, flags) != 0; 816 } 817 }