getNativeSymbolInfo           package:base           R Documentation

_O_b_t_a_i_n _a _d_e_s_c_r_i_p_t_i_o_n _o_f _a _n_a_t_i_v_e (_C/_F_o_r_t_r_a_n) _s_y_m_b_o_l

_D_e_s_c_r_i_p_t_i_o_n:

     This finds and returns as comprehensive a description of a
     dynamically loaded or "exported" built-in native symbol. It
     returns information about the name of the symbol, the library in
     which it is located and, if available, the number of arguments it
     expects and by which interface it should be called (i.e '.Call',  
     '.C', '.Fortran',  or '.External'). Additionally, it returns the
     address of the symbol and this can be passed to other C routines
     which can invoke. Specifically, this provides a way to explicitly
     share symbols between different dynamically loaded package
     libraries. Also, it provides a way to query where symbols were
     resolved, and aids diagnosing strange behavior associated with
     dynamic resolution.

_U_s_a_g_e:

     getNativeSymbolInfo(name, PACKAGE)

_A_r_g_u_m_e_n_t_s:

    name: the name of the native symbol as used in a call to
          'is.loaded', etc.  Note that Fortran symbols should be
          supplied as-is, not wrapped in 'symbol.For'. 

 PACKAGE: an optional argument that specifies to which dynamically
          loaded library we restrict the search for this symbol. If
          this is '"base"', we search in the R executable itself.

_D_e_t_a_i_l_s:

     This uses the same mechanism for resolving symbols as is used in
     all the native interfaces ('.Call', etc.). If the symbol has been
     explicitly registered by the shared library in which it is
     contained, information about the number of arguments and the
     interface by which it should be called will be returned.
     Otherwise, a generic native symbol object is returned.

_V_a_l_u_e:

     If the symbol is not found, an error is raised. Otherwise, the
     value is a list containing the following elements: 

    name: the name of the symbol, as given by the 'name' argument.

 address: the native memory address of the symbol which can be used to
          invoke the routine, and also compare with other symbol
          address. This is an external pointer object and of class
          'NativeSymbol'.

 package: a list containing 3 elements:

          _n_a_m_e the short form of the library name which can be used as
               the value of the 'PACKAGE' argument in the different
               native interface functions.

          _p_a_t_h the fully qualified name of the shared library file.

          _d_y_n_a_m_i_c_L_o_o_k_u_p a logical value indicating whether dynamic
               resolution is used when looking for symbols in this
               library, or only registered routines can be located.

numParameters: the number of arguments that should be passed in a call
          to this routine.

     Additionally, the list will have an additional class, being
     'CRoutine',   'CallRoutine', 'FortranRoutine' or 'ExternalRoutine'
     corresponding to the R interface by which it should be invoked.

_N_o_t_e:

     One motivation for accessing this reflectance information is to be
     able to pass native routines to  C routines as "function pointers"
     in C. This allows us to treat native routines and R functions in a
     similar manner, such as when passing an R function to C code that
     makes callbacks to that function at different points in its
     computation (e.g., 'nls'). Additionally, we can resolve the symbol
     just once and avoid resolving it repeatedly or using the internal
     cache. In the future, one may be able to treat 'NativeSymbol'
     objects directly as callback objects.

_A_u_t_h_o_r(_s):

     Duncan Temple Lang

_R_e_f_e_r_e_n_c_e_s:

     For information about registering native routines, see "In Search
     of {C/C++} & {FORTRAN} Routines", R News, volume 1, number 3,
     2001, p20-23 (<URL: http://CRAN.R-project.org/doc/Rnews/>).

_S_e_e _A_l_s_o:

     'getDLLRegisteredRoutines', 'is.loaded', '.C', '.Fortran',
     '.External', '.Call', 'dyn.load'.

_E_x_a_m_p_l_e_s:

     library(stats) # normally loaded
     getNativeSymbolInfo("dansari")

     getNativeSymbolInfo("hcass2")  # a Fortran symbol

