コード例 #1
0
ファイル: testmd.c プロジェクト: 3ki5tj/zcom
/* run a regular md
 * teql steps for equilibration, tmax steps for production
 * tp: the real temperature, tps: thermostat temperature */
INLINE int cago_mdrun(cago_t *go, real mddt, real thermdt,
    real tps, real tp, av_t *avep, av_t *avrmsd,
    int teql, int tmax, int trep)
{
  int t;
  real fs = tps/tp, rmsd;

  tmax = (tmax < 0) ? -1 : (tmax + teql);
  av_clear(avep);
  av_clear(avrmsd);
  for (t = 1; tmax < 0 || t <= tmax; t++) {
    cago_vv(go, fs, mddt);
    cago_rmcom(go, go->x, go->v);
    cago_vrescale(go, (real) tps, thermdt, &go->ekin, &go->tkin);
    rmsd = cago_rmsd(go, go->x, NULL);
    if (t > teql) {
      av_add(avep, go->epot);
      av_add(avrmsd, rmsd);
    }
    if (trep > 0 && t % trep == 0) {
      printf("%9d: tp %.4f, tps %.4f, rmsd %7.4f, K %.2f, U %.2f\n",
          t, tp, tps, rmsd, go->ekin, go->epot);
    }
  }
  return 0;
}
コード例 #2
0
ファイル: rlm_perl.c プロジェクト: geaaru/freeradius-server
static void rlm_perl_clear_handles(pTHX)
{
	AV *librefs = get_av(dl_librefs, false);
	if (librefs) {
		av_clear(librefs);
	}
}
コード例 #3
0
/* Handles the row, adding it into the internal structure */
static void
invoke_row(AV *req, SV *reqrv, SV *rowsrv)
{
    SV *meth;

    dSP;
    ENTER;
    SAVETMPS;
    PUSHMARK(SP);

    /* First arg */
    XPUSHs(reqrv);

    meth = *av_fetch(req, PLCB_VHIDX_PRIVCB, 0);
    if (rowsrv) {
        XPUSHs(rowsrv);
    }

    PUTBACK;
    call_sv(meth, G_DISCARD|G_EVAL);
    SPAGAIN;

    if (SvTRUE(ERRSV)) {
        warn("Got error in %s", SvPV_nolen(ERRSV));
    }

    if (rowsrv) {
        av_clear((AV *)SvRV(rowsrv));
    }

    FREETMPS;
    LEAVE;
}
コード例 #4
0
ファイル: RPerlVars.c プロジェクト: sboehringer/RSPerl
USER_OBJECT_
RS_PerlClear(USER_OBJECT_ obj)
{
 SV *sv;
 int n;
 USER_OBJECT_ ans;
 dTHX;

 ans = NEW_LOGICAL(1);
 sv = RS_PerlGetSV(obj);
 if(sv == NULL)
   return(ans);

 switch(SvTYPE(sv)) {
    case SVt_PVHV:
        hv_clear((HV*) sv);
     break;
    case SVt_PVAV:
        av_clear((AV*) sv); 
     break;
    default:
      n = 1;
      break;
 }

  LOGICAL_DATA(ans)[0] = TRUE;

 return(ans);
}
コード例 #5
0
ファイル: modperl_util.c プロジェクト: gitpan/mod_perl
void modperl_xs_dl_handles_clear(pTHX)
{
    AV *librefs = get_av(dl_librefs, FALSE);
    if (librefs) {
        av_clear(librefs);
    }
}
コード例 #6
0
ファイル: objGlue.c プロジェクト: UNIVERSAL-IT-SYSTEMS/McCode
static SV *
ForceScalarLvalue(pTHX_ SV *sv)
{
 if (SvTYPE(sv) == SVt_PVAV)
  {
   AV *av = (AV *) sv;
   SV *newsv = newSVpv("",0);
   av_clear(av);
   av_store(av,0,newsv);
   return newsv;
  }
 else
  {
   return sv;
  }
}
コード例 #7
0
ファイル: srl_decoder.c プロジェクト: aleander/Sereal
SRL_STATIC_INLINE void
srl_clear_decoder(pTHX_ srl_decoder_t *dec)
{
    if (dec->buf_start == dec->buf_end)
        return;

    SRL_DEC_RESET_VOLATILE_FLAGS(dec);
    dec->buf_start = dec->buf_end = dec->pos = dec->save_pos = NULL;
    if (dec->weakref_av)
        av_clear(dec->weakref_av);

    PTABLE_clear(dec->ref_seenhash);
    if (dec->ref_stashes) {
        PTABLE_clear(dec->ref_stashes);
        PTABLE_clear(dec->ref_bless_av);
    }

    dec->recursion_depth = 0;
}
コード例 #8
0
ファイル: objGlue.c プロジェクト: UNIVERSAL-IT-SYSTEMS/McCode
static SV *
ForceScalar(pTHX_ SV *sv)
{
 if (SvGMAGICAL(sv))
  mg_get(sv);
 if (SvTYPE(sv) == SVt_PVAV)
  {
   AV *av = (AV *) sv;
   SV *newsv = newSVpv("",0);
   Scalarize(aTHX_ newsv, (AV *) av);
   av_clear(av);
   av_store(av,0,newsv);
   return newsv;
  }
 else
  {
   if (SvROK(sv) && !SvOBJECT(SvRV(sv)) && SvTYPE(SvRV(sv)) == SVt_PVAV)
    {
     /* Callbacks and lists often get stringified by mistake due to
        Tcl/Tk's string fixation - don't change the real value
      */
     SV *newsv = newSVpv("",0);
     Scalarize(aTHX_ newsv, (AV *) SvRV(sv));
     return sv_2mortal(newsv);
    }
   else if (!SvOK(sv))
    {
     /* Map undef to null string */
     if (SvREADONLY(sv))
      {
       SV *newsv = newSVpv("",0);
       return sv_2mortal(newsv);
      }
     else
      sv_setpvn(sv,"",0);
    }
   return sv;
  }
}
コード例 #9
0
ファイル: perl-signals.c プロジェクト: Adam-/irssi
void perl_signal_args_to_c(
        void (*callback)(void *, void **), void *cb_arg,
        int signal_id, SV **args, size_t n_args)
{
        union {
                int v_int;
                unsigned long v_ulong;
                GSList *v_gslist;
                GList *v_glist;
        } saved_args[SIGNAL_MAX_ARGUMENTS];
        void *p[SIGNAL_MAX_ARGUMENTS];
        PERL_SIGNAL_ARGS_REC *rec;
        size_t n;

        if (!(rec = perl_signal_args_find(signal_id))) {
                const char *name = signal_get_id_str(signal_id);
                if (!name) {
                        croak("%d is not a known signal id", signal_id);
                }
                croak("\"%s\" is not a registered signal", name);
        }

        for (n = 0; n < SIGNAL_MAX_ARGUMENTS && n < n_args && rec->args[n] != NULL; ++n) {
                void *c_arg;
                SV *arg = args[n];

                if (!SvOK(arg)) {
                        c_arg = NULL;
                } else if (strcmp(rec->args[n], "string") == 0) {
                        c_arg = SvPV_nolen(arg);
                } else if (strcmp(rec->args[n], "int") == 0) {
                        c_arg = (void *)SvIV(arg);
                } else if (strcmp(rec->args[n], "ulongptr") == 0) {
                        saved_args[n].v_ulong = SvUV(arg);
                        c_arg = &saved_args[n].v_ulong;
                } else if (strcmp(rec->args[n], "intptr") == 0) {
                        saved_args[n].v_int = SvIV(SvRV(arg));
                        c_arg = &saved_args[n].v_int;
                } else if (strncmp(rec->args[n], "glistptr_", 9) == 0) {
                        GList *gl;
                        int is_str;
                        AV *av;
                        SV *t;
                        int count;

                        t = SvRV(arg);
                        if (SvTYPE(t) != SVt_PVAV) {
                                croak("Not an ARRAY reference");
                        }
                        av = (AV *)t;

                        is_str = strcmp(rec->args[n]+9, "char*") == 0;

                        gl = NULL;
                        count = av_len(av) + 1;
                        while (count-- > 0) {
                                SV **px = av_fetch(av, count, 0);
                                SV *x = px ? *px : NULL;
                                gl = g_list_prepend(
                                        gl,
                                        x == NULL ? NULL :
                                        is_str ? g_strdup(SvPV_nolen(x)) :
                                        irssi_ref_object(x)
                                );
                        }
                        saved_args[n].v_glist = gl;
                        c_arg = &saved_args[n].v_glist;
                } else if (strncmp(rec->args[n], "gslist_", 7) == 0) {
                        GSList *gsl;
                        AV *av;
                        SV *t;
                        int count;

                        t = SvRV(arg);
                        if (SvTYPE(t) != SVt_PVAV) {
                                croak("Not an ARRAY reference");
                        }
                        av = (AV *)t;

                        gsl = NULL;
                        count = av_len(av) + 1;
                        while (count-- > 0) {
                                SV **x = av_fetch(av, count, 0);
                                gsl = g_slist_prepend(
                                        gsl,
                                        x == NULL ? NULL :
                                        irssi_ref_object(*x)
                                );
                        }
                        c_arg = saved_args[n].v_gslist = gsl;
                } else {
                        c_arg = irssi_ref_object(arg);
                }

                p[n] = c_arg;
        }

        for (; n < SIGNAL_MAX_ARGUMENTS; ++n) {
                p[n] = NULL;
        }

        callback(cb_arg, p);

        for (n = 0; n < SIGNAL_MAX_ARGUMENTS && n < n_args && rec->args[n] != NULL; ++n) {
                SV *arg = args[n];

                if (!SvOK(arg)) {
                        continue;
                }

                if (strcmp(rec->args[n], "intptr") == 0) {
                        SV *t = SvRV(arg);
                        SvIOK_only(t);
                        SvIV_set(t, saved_args[n].v_int);
                } else if (strncmp(rec->args[n], "gslist_", 7) == 0) {
                        g_slist_free(saved_args[n].v_gslist);
                } else if (strncmp(rec->args[n], "glistptr_", 9) == 0) {
                        int is_iobject, is_str;
                        AV *av;
                        GList *gl, *tmp;

                        is_iobject = strcmp(rec->args[n]+9, "iobject") == 0;
                        is_str = strcmp(rec->args[n]+9, "char*") == 0;

                        av = (AV *)SvRV(arg);
                        av_clear(av);

                        gl = saved_args[n].v_glist;
                        for (tmp = gl; tmp != NULL; tmp = tmp->next) {
                                av_push(av,
                                        is_iobject ? iobject_bless((SERVER_REC *)tmp->data) :
                                        is_str ? new_pv(tmp->data) :
                                        irssi_bless_plain(rec->args[n]+9, tmp->data)
                                );
                        }

                        if (is_str) {
                                g_list_foreach(gl, (GFunc)g_free, NULL);
                        }
                        g_list_free(gl);
                }
        }
}
コード例 #10
0
 void clear() {
     av_clear(impl());
 }
コード例 #11
0
ファイル: p5helper.c プロジェクト: niner/Inline-Perl5
void p5_av_clear(PerlInterpreter *my_perl, AV *av) {
    PERL_SET_CONTEXT(my_perl);
    av_clear(av);
}
コード例 #12
0
ファイル: libmavis_external.c プロジェクト: hydrix1/tacacs
static void read_from_child(struct context *ctx, int cur)
{
    ssize_t len;
    DebugIn(DEBUG_MAVIS);

    len = Read(ctx->fd_in, ctx->b_in + ctx->b_in_len, sizeof(ctx->b_in) - ctx->b_in_len - 1);

    if (len > 0) {
	char *t;
	int matchlevel = 0;

	Debug((DEBUG_PROC, "%s:%d %s\n", __FILE__, __LINE__, ctx->mcx->path));
	ctx->b_in_len += len;
	ctx->b_in[ctx->b_in_len] = 0;

	for (t = ctx->b_in + ctx->b_in_len - 1; t > ctx->b_in; t--)
	    switch (matchlevel) {
	    case 0:
		if (*t != '\n') {
		    DebugOut(DEBUG_MAVIS);
		    return;
		}
		matchlevel++;
		break;
	    case 1:
		if (!isdigit((int) *t)) {
		    DebugOut(DEBUG_MAVIS);
		    return;
		}
		matchlevel++;
		break;
	    case 2:
		if (!isdigit((int) *t) && *t != '-' && *t != '=') {
		    DebugOut(DEBUG_MAVIS);
		    return;
		}
		if (*t == '=')
		    matchlevel++;
		break;
	    case 3:
		if (*t == '\n') {
		    rb_node_t *r;
		    struct query *q;
		    char *serial = av_get(ctx->ac, AV_A_SERIAL);
		    char *serial_old = alloca(strlen(serial) + 1);
		    int result;

		    strcpy(serial_old, serial);

		    io_clr_i(ctx->mcx->io, ctx->fd_in);

		    av_clear(ctx->ac);
		    *++t = 0;
		    av_char_to_array(ctx->ac, ctx->b_in, NULL);
		    result = atoi(++t);

		    ctx->in_use = 0;
		    ctx->mcx->usage--;

		    serial = av_get(ctx->ac, AV_A_SERIAL);

		    if (!serial || strcmp(serial, serial_old)) {
			if (serial)
			    logmsg("%s: %lu: out of sync: " "got %s, expected %s. Terminating.", ctx->mcx->argv[0], (u_long) ctx->pid, serial, serial_old);
			else
			    logmsg("%s: %lu: missing serial. Terminating.", ctx->mcx->argv[0], (u_long) ctx->pid);
			av_free(ctx->ac);
			ctx->ac = NULL;
			kill(ctx->pid, SIGTERM);
			child_died(ctx, ctx->fd_in);
			DebugOut(DEBUG_MAVIS);
			return;
		    }

		    q = Xcalloc(1, sizeof(struct context));
		    q->ac = ctx->ac;
		    ctx->ac = NULL;

		    q->result = result;

		    q->canceled = ctx->canceled;
		    ctx->canceled = 0;

		    RB_insert(ctx->mcx->outgoing, q);
#ifdef DEBUG_RB
		    fprintf(stderr, "EXT insert outgoing %p\n", q);
#endif

		    if (ctx->mcx->io_context_parent) {
			if (!RB_empty(ctx->mcx->backlog_fifo)) {
			    rb_node_t *rbn = RB_first(ctx->mcx->backlog_fifo);
			    struct query *qp = RB_payload(rbn, struct query *);
			    Debug((DEBUG_PROC, "%s:%d\n", __FILE__, __LINE__));
			    RB_search_and_delete(ctx->mcx->backlog_app_ctx, qp);
			    RB_search_and_delete(ctx->mcx->backlog_serial, qp);
			    ctx->ac = qp->ac;
			    qp->ac = NULL;
			    RB_delete(ctx->mcx->backlog_fifo, rbn);
#ifdef DEBUG_RB
			    fprintf(stderr, "EXT remove backlog_fifo %p\n", RB_payload(rbn, void *));
#endif
			    ctx->mcx->backlog_cur--;
			    ctx->mcx->usage++;
			    ctx->mcx->cx_stat[ctx->index].counter++;
			    ctx->mcx->cx_stat[ctx->index].counter_p++;
			    start_query(ctx);
			}

			while ((r = RB_first(ctx->mcx->outgoing))) {
			    struct query *qp = RB_payload(r, struct query *);

			    if (ctx->mcx->ac_bak)
				av_free(ctx->mcx->ac_bak);
			    ctx->mcx->ac_bak = qp->ac_bak;
			    qp->ac_bak = NULL;

			    if (q->canceled) {
				av_free(ctx->mcx->ac_bak);
				ctx->mcx->ac_bak = NULL;
				RB_delete(ctx->mcx->outgoing, r);
			    } else
				((void (*)(void *)) qp->ac->app_cb) (qp->ac->app_ctx);
			}
		    }
		    DebugOut(DEBUG_MAVIS);
		    return;
		}