The _X_t_C_a_l_l_C_o_n_v_e_r_t_e_r function looks up the specified type converter in the application context associated with the display and, if the converter was not registered or was registered with cache type _X_t_C_a_c_h_e_A_l_l or _X_t_C_a_c_h_e_B_y_D_i_s_p_l_a_y looks in the conversion cache to see if this conversion procedure has been called with the specified conversion arguments. If so, it checks the success status of the prior call, and if the conversion failed, _X_t_C_a_l_l_C_o_n_v_e_r_t_e_r returns _F_a_l_s_e immediately; otherwise it checks the size specified in the _t_o argument and, if it is greater than or equal to the size stored in the cache, copies the information stored in the cache into the location specified by _t_o_-_>_a_d_d_r, stores the cache size into _t_o_-_>_s_i_z_e, and returns _T_r_u_e. If the size specified in the _t_o argument is smaller than the size stored in the cache, _X_t_C_a_l_l_C_o_n_v_e_r_t_e_r copies the cache size into the _t_o_-_>_s_i_z_e and returns _F_a_l_s_e. If the converter was registered with cache type _X_t_C_a_c_h_e_N_o_n_e or no value was found in the conversion cache, _X_t_C_a_l_l_C_o_n_v_e_r_t_e_r calls the converter and, if it was not registered with cache type _X_t_C_a_c_h_e_N_o_n_e, enters the result into the cache. _X_t_C_a_l_l_C_o_n_v_e_r_t_e_r then returns what the converter returned.
The _c_a_c_h_e___r_e_f___r_e_t_u_r_n field specifies storage allocated by the caller in which an opaque value will be stored. If the type converter has been registered with the _X_t_C_a_c_h_e_R_e_f_C_o_u_n_t modifier and if the value returned in in _c_a_c_h_e___r_e_f___r_e_t_u_r_n is non-NULL, then the call should store the _c_a_c_h_e___r_e_f___r_e_t_u_r_n value in order to decrement the reference count when the converted value is no longer required. The _c_a_c_h_e___r_e_f___r_e_t_u_r_n argument should be NULL if the caller is unwilling or unable to store the value.