Domanda

Ho notato che negli involucri SWIG generati per un determinato insieme di classi, SWIG mantiene una lista di rappresentazioni C-stringa di tutte le classi genitore da cui quella classe eredita. (Char ** base_names). So che c'è una funzione

swig_type(some_variable)

che restituirà una rappresentazione di stringa del tipo di dati di un dato variabile. C'è anche una funzione che restituisce una tabella delle classi genitore come stringhe? In caso contrario, c'è un modo semplice di scrivere questa funzione? Io non sono affatto familiarità con il funzionamento interno di SWIG.

Grazie!

È stato utile?

Soluzione

Qualcosa del genere dovrebbe funzionare (non testato, dal momento che io non uso SWIG con Lua):

// insert into runtime section
// this is the C function that iterates over the base_names array 
// (I'm assuming that the array is terminated with a NULL)
%runtime %{
    /* lua callable function to get the userdata's type */
    SWIGRUNTIME int SWIG_Lua_basenames(lua_State* L)
    {
      swig_lua_userdata* usr;
      swig_lua_class* clss = NULL;
      int i = 0;
      if (lua_isuserdata(L,1))
      {
        usr=(swig_lua_userdata*)lua_touserdata(L,1);  /* get data */
        if (usr && usr->type && usr->type->clientdata) {
          // fetch the swig_lua_class struct, it contains the base_names
          clss = (swig_lua_class*)usr->type->clientdata;
        }
      }
      /* create a new table with all class base names in it
         note that I create it even if clss is NULL, that way
         an empty table -should- be returned
       */          
      lua_newtable(L);
      while(clss && clss->base_names[i]) {
         lua_pushnumber(L, i+1); /* lua tables are 1-indexed */
         lua_pushstring(L, clss->base_names[i]);
         lua_rawset(L, -3);
         i++;
      }
      return 1;
    }
%}
%init %{
  /* this goes into the user init function, register our new function with
     Lua runtime
   */
  SWIG_Lua_add_function(L,"swig_base_names",SWIG_Lua_basenames);
%}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top