:- module char. :- use_module builtin, enum, private_builtin, require. :- instance (enum:enum(character)). :- pragma foreign_import_module("C", char). char:to_int(C_3) = N_4 :- char:to_int(C_3, N_4). :- pragma promise_pure((char:to_int)/2). :- pragma foreign_proc("C", char:to_int(Character :: (builtin:out), Int :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " /* ** If the integer doesn\'t fit into a char, then ** the assignment `Character = Int\' below will truncate it. ** SUCCESS_INDICATOR will be set to true only if ** the result was not truncated. */ Character = Int; SUCCESS_INDICATOR = ((MR_UnsignedChar) Character == Int); "). :- pragma foreign_proc("C", char:to_int(Character :: (builtin:in), Int :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " SUCCESS_INDICATOR = ((MR_UnsignedChar) Character == Int); "). :- pragma foreign_proc("C", char:to_int(Character :: (builtin:in), Int :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Int = (MR_UnsignedChar) Character; "). char:max_char_value = N_2 :- char:max_char_value(N_2). :- pragma foreign_proc("C", char:max_char_value(Max :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Max = UCHAR_MAX; "). char:min_char_value = N_2 :- char:min_char_value(N_2). char:min_char_value(0). char:to_upper(C1_3) = C2_4 :- char:to_upper(C1_3, C2_4). char:to_upper(Char_3, Upper_4) :- (if char:lower_upper(Char_3, UpperChar_5) then Upper_4 = UpperChar_5 else Upper_4 = Char_3 ). char:to_lower(C1_3) = C2_4 :- char:to_lower(C1_3, C2_4). char:to_lower(Char_3, Lower_4) :- (if char:lower_upper(LowerChar_5, Char_3) then Lower_4 = LowerChar_5 else Lower_4 = Char_3 ). char:is_upper(Upper_2) :- (if char:lower_upper(V_3, Upper_2) then true else fail ). char:is_lower(Lower_2) :- char:lower_upper(Lower_2, V_3). char:is_alpha_or_underscore(Char_2) :- (if Char_2 = '_' then true else char:is_alpha(Char_2) ). char:is_binary_digit('0'). char:is_binary_digit('1'). char:digit_to_int(Digit_3, Int_4) :- (if char:lower_upper(Digit_3, Upper_5) then char:int_to_digit(Int_4, Upper_5) else char:int_to_digit(Int_4, Digit_3) ). char:det_int_to_digit(N_3) = C_4 :- char:det_int_to_digit(N_3, C_4). :- pragma termination_info(char:to_int((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(char:to_int((builtin:in), (builtin:out)), infinite, cannot_loop). :- pragma termination_info(char:to_int((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(char:to_int((builtin:out), (builtin:in)), infinite, cannot_loop). :- pragma termination_info((char:max_char_value) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(char:max_char_value((builtin:out)), infinite, cannot_loop). :- pragma termination_info((char:min_char_value) = (builtin:out), finite(0, [no]), cannot_loop). :- pragma termination_info(char:min_char_value((builtin:out)), finite(0, [no]), cannot_loop). :- pragma termination_info(char:to_upper((builtin:in)) = (builtin:out), finite(0, [yes, no]), cannot_loop). :- pragma termination_info(char:to_upper((builtin:in), (builtin:out)), finite(0, [yes, no]), cannot_loop). :- pragma termination_info(char:to_lower((builtin:in)) = (builtin:out), finite(0, [yes, no]), cannot_loop). :- pragma termination_info(char:to_lower((builtin:in), (builtin:out)), finite(0, [yes, no]), cannot_loop). :- pragma termination_info(char:lower_upper((builtin:in), (builtin:out)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(char:lower_upper((builtin:out), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(char:is_whitespace((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(char:is_upper((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(char:is_lower((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(char:is_alpha((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(char:is_alnum((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(char:is_alpha_or_underscore((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(char:is_alnum_or_underscore((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(char:is_digit((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(char:is_binary_digit((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(char:is_octal_digit((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(char:is_hex_digit((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(char:digit_to_int((builtin:in), (builtin:out)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(char:int_to_digit((builtin:in), (builtin:out)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(char:int_to_digit((builtin:out), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(char:det_int_to_digit((builtin:in)) = (builtin:out), finite(0, [no, no]), can_loop). :- pragma termination_info(char:det_int_to_digit((builtin:in), (builtin:out)), finite(0, [no, no]), can_loop).