The
XtConvertAndStore
function looks up the type converter registered to convert from_type
to to_type, computes any additional arguments needed, and then calls
XtCallConverter.
(or
XtDirectConvert
if an old-style converter was registered with
XtAddConverter
or
XtAppAddConverter.
) with the from and to_in_out arguments.
The
XtCallConverter
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
XtCacheAll
or
XtCacheByDisplay
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,
XtCallConverter
returns
False
immediately; otherwise it checks the size specified in the to
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 to->addr, stores the cache size into to->size,
and returns
True.
If the size specified in the to argument is smaller than the size
stored in the cache,
XtCallConverter
copies the cache size into the to->size and returns
False.
If the converter was registered with cache type
XtCacheNone
or no value was found in the conversion cache,
XtCallConverter
calls the converter and, if it was not registered with cache type
XtCacheNone,
enters the result into the cache.
XtCallConverter
then returns what the converter returned.
The cache_ref_return field specifies storage allocated by the
caller in which an opaque value will be stored. If the type converter
has been registered with the
XtCacheRefCount
modifier and if the value returned in in cache_ref_return is
non-NULL, then the call should store the cache_ref_return value
in order to decrement the reference count when the converted value
is no longer required. The cache_ref_return argument should be
ULL if the caller is unwilling or unable to store the value.