Ejemplo n.º 1
0
// 1: lattice
// 2: string or function
// return: subset or array of subsets
static int
qopqdp_lattice_subset(lua_State *L)
{
    BEGIN_ARGS;
    GET_LATTICE(lat);
    OPT_STRING(sn, NULL);
    OPT_FUNCTION_INDEX(fidx, 0);
    END_ARGS;
    int n = 0;
    QDP_Subset *qs = NULL;
    subsetGroup_t *group = NULL;
    if(fidx==0) {
        qs = qhmc_qopqdp_qsubset_from_string(L, lat, sn, &n);
    } else {
        // create qdp subsets
        // create subsetGroup
    }
    if(n==0) {
        lua_pushnil(L);
    } else if(n==1) {
        qopqdp_subset_create(L, qs[0], group);
    } else {
        lua_createtable(L, n, 0);
        for(int i=0; i<n; i++) {
            qopqdp_subset_create(L, qs[i], group);
            lua_rawseti(L, -2, i+1);
        }
    }
    return 1;
}
Ejemplo n.º 2
0
static int
opt_qsubset_real(lua_State *L, int idx, lattice_t *lat, QDP_Subset *t)
{
  int len = 0;
  if(lua_isstring(L, idx)) {
    lua_pushvalue(L, idx);
    const char *s = lua_tostring(L, -1);
    lua_pop(L, 1);
    int n;
    QDP_Subset *qs = qhmc_qopqdp_qsubset_from_string(L, lat, s, &n);
    if(n) {
      len += n;
      if(t) for(int i=0; i<n; i++) t[i] = qs[i];
    }
  } else {
    int tidx = idx;
    subset_t *ls = qhmc_qopqdp_opt_subset(L, &tidx, 0, NULL);
    if(ls) {
      len++;
      if(t) t[0] = ls->qsub;
    }
  }
  return len;
}