1 Design guidelines for the isl interfaces
2 ========================================
6 A function that constructs an isl object can be exposed in two ways, as
7 an unnamed constructor or as a named static function. Aiming for an interface
8 that is explicit and close to the isl C interface, all such functions
9 are exported as named static functions, except in the following cases.
10 Unnamed constructors are generated for functions where even without the
11 function name an object is identified uniquely by its arguments. For
12 example, there is a single isl_val that corresponds to a given integer
13 (isl_val_int_from_si), but both a NaN or a zero value can be constructed
14 from an isl_local_space (isl_aff_zero_on_domain and isl_aff_nan_on_domain).
15 Only function that create objects that are fully constructed by the function
16 and do not require further information to be added for typical use cases
17 are exposed as unnamed constructors.
18 Functions that commonly require more information to be provided
19 (isl_union_access_info_from_sink, isl_schedule_constraints_on_domain)
20 are exported as named static functions.
21 Typical examples of function that are generated as unnamed constructors
24 - Conversion constructors
25 - Constructors from std::string
26 - Constructors where all arguments by themselves uniquely identify
27 a complete object (e.g., isl_val_int_from_si)