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; }
/* 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; }
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)); }
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)); }
/* 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; }
/* 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; }