示例#1
0
文件: Fftw.c 项目: merolle/ripe
static Value ripe_fftw_plan2d_new(Value x, Value y, Value v_sign)
{
  Value v_self = obj_new(klass_FftwPlan2D);
  FftwPlan2D* self = obj_c_data(v_self);

  self->x = val_to_int64(x);
  self->y = val_to_int64(y);
  if (self->x < 1 or self->y < 1){
    exc_raise("invalid dimensions of Fftw.Plan2D (%" PRId64"x%" PRId64")",
              self->x, self->y);
  }
  self->in = (fftw_complex*) fftw_malloc(
                               sizeof(fftw_complex) * self->x * self->y
                             );
  self->out = (fftw_complex*) fftw_malloc(
                                sizeof(fftw_complex) * self->x * self->y
                              );
  
  int64 sign = val_to_int64(v_sign);
  if (sign != FFTW_FORWARD and sign != FFTW_BACKWARD){
    exc_raise("invalid flag for FFT (passed %" PRId64")", sign);
  }

  self->plan = fftw_plan_dft_2d(self->x, self->y, self->in, self->out,
                                sign, FFTW_ESTIMATE);
  return v_self;
}
示例#2
0
/* Comparison of two 64-bit integers */
static int ldif_comparison_int64(struct ldb_context *ldb, void *mem_ctx,
				 const struct ldb_val *v1, const struct ldb_val *v2)
{
	int64_t i1=0, i2=0;
	val_to_int64(v1, &i1);
	val_to_int64(v2, &i2);
	if (i1 == i2) return 0;
	return i1 > i2? 1 : -1;
}
示例#3
0
文件: Fftw.c 项目: merolle/ripe
static Value ripe_fftw_plan2d_get_kx(Value v_self, Value v_x)
{
  FftwPlan2D* self = obj_c_data(v_self);
  int64 x = val_to_int64(v_x) - 1;
  if (x > self->x / 2) x = x - self->x;
  return double_to_val(((double) x) / ((double) self->x));
}
示例#4
0
文件: Fftw.c 项目: merolle/ripe
static Value ripe_fftw_plan2d_get_ky(Value v_self, Value v_y)
{
  FftwPlan2D* self = obj_c_data(v_self);
  int64 y = val_to_int64(v_y) - 1;
  if (y > self->y / 2) y = y - self->y;
  return double_to_val(((double) y) / ((double) self->y));
}
示例#5
0
/* Canonicalisation of two 64-bit integers */
static int ldif_canonicalise_int64(struct ldb_context *ldb, void *mem_ctx,
				   const struct ldb_val *in, struct ldb_val *out)
{
	int64_t i;
	int ret;

	ret = val_to_int64(in, &i);
	if (ret != LDB_SUCCESS) {
		return ret;
	}
	out->data = (uint8_t *) talloc_asprintf(mem_ctx, "%lld", (long long)i);
	if (out->data == NULL) {
		ldb_oom(ldb);
		return LDB_ERR_OPERATIONS_ERROR;
	}
	out->length = strlen((char *)out->data);
	return 0;
}
示例#6
0
/*
  write a 64 bit 2-part range
*/
static int ldif_write_range64(struct ldb_context *ldb, void *mem_ctx,
			      const struct ldb_val *in, struct ldb_val *out)
{
	int64_t v;
	int ret;
	ret = val_to_int64(in, &v);
	if (ret != LDB_SUCCESS) {
		return ret;
	}
	out->data = (uint8_t *)talloc_asprintf(mem_ctx, "%lu-%lu",
					       (unsigned long)(v&0xFFFFFFFF),
					       (unsigned long)(v>>32));
	if (out->data == NULL) {
		ldb_oom(ldb);
		return LDB_ERR_OPERATIONS_ERROR;
	}
	out->length = strlen((char *)out->data);
	return LDB_SUCCESS;
}