Ejemplo n.º 1
0
gretl_array *gretl_arrays_join (gretl_array *A,
				gretl_array *B,
				int *err)
{
    gretl_array *C = NULL;

    if (A == NULL || B == NULL) {
	*err = E_DATA;
    } else if (A->type != B->type) {
	*err = E_TYPES;
    } else {
	int n = A->n + B->n;

	C = gretl_array_new(A->type, n, err);
    }

    if (!*err) {
	*err = gretl_array_copy_content(C, A, 0);
    }

    if (!*err) {
	*err = gretl_array_copy_content(C, B, A->n);
    }

    if (*err && C != NULL) {
	gretl_array_destroy(C);
	C = NULL;
    }

    return C;
}
Ejemplo n.º 2
0
gretl_array *gretl_array_new (GretlType type, int n, int *err)
{
    gretl_array *A;

    if (type != GRETL_TYPE_STRINGS &&
	type != GRETL_TYPE_MATRICES &&
	type != GRETL_TYPE_BUNDLES &&
	type != GRETL_TYPE_LISTS) {
	*err = E_TYPES;
	return NULL;
    } else if (n < 0) {
	*err = E_DATA;
	return NULL;
    }

    A = malloc(sizeof *A);
    
    if (A == NULL) {
	*err = E_ALLOC;
    } else {
	A->type = type;
	A->n = n;
	A->data = NULL;
	if (n > 0) {
	    *err = array_allocate_content(A);
	    if (*err) {
		gretl_array_destroy(A);
		A = NULL;
	    }
	}
    }

    return A;
}
Ejemplo n.º 3
0
static int model_add_minfo_array (MODEL *pmod,
				  midas_info *minfo,
				  int nmidas)
{
    gretl_array *A;
    int err = 0;
    
    A = gretl_array_new(GRETL_TYPE_BUNDLES, nmidas, &err);

    if (A != NULL) {
	midas_info *m;
	gretl_bundle *b;
	int i;

	for (i=0; i<nmidas && !err; i++) {
	    b = gretl_bundle_new();
	    if (b == NULL) {
		err = E_ALLOC;
	    } else {
		m = &minfo[i];
		gretl_bundle_set_string(b, "lname",  m->lnam0);
		gretl_bundle_set_string(b, "mname",  m->mname);
		gretl_bundle_set_int(b, "prelag", m->prelag);
		gretl_bundle_set_int(b, "minlag", m->minlag);
		gretl_bundle_set_int(b, "maxlag", m->maxlag);
		gretl_bundle_set_int(b, "type",  m->type);
		gretl_bundle_set_int(b, "nparm", m->nparm);
		err = gretl_array_set_bundle(A, i, b, 0);
	    }
	}

	if (err) {
	    gretl_array_destroy(A);
	} else {
	    gretl_model_set_array_as_data(pmod, "midas_info", A);
	}
    }

    return err;
}
Ejemplo n.º 4
0
gretl_array *gretl_array_deserialize (void *p1, void *p2,
				      int *err)
{
    xmlNodePtr node = p1;
    xmlDocPtr doc = p2;
    GretlType type = 0;
    int n = 0;
    gretl_array *A = NULL;

    if (xmlStrcmp(node->name, (XUC) "gretl-array")) {
	fprintf(stderr, "deserialize array: node is not gretl-array!\n");
	*err = E_DATA;
    } else {
	type = gretl_xml_get_type_property(node);
	if (type == 0) {
	    fprintf(stderr, "deserialize array: couldn't get array type\n");
	    *err = E_DATA;
	}
    }

    if (!*err && !gretl_xml_get_prop_as_int(node, "length", &n)) {
	fprintf(stderr, "deserialize array: couldn't get length\n");
	*err = E_DATA;
    }

    if (!*err) {
	A = gretl_array_new(type, n, err);
    }

    if (A != NULL && n > 0) {
	*err = deserialize_array_elements(A, node->xmlChildrenNode, doc);
	if (*err) {
	    gretl_array_destroy(A);
	    A = NULL;
	}
    }

    return A;
}
Ejemplo n.º 5
0
static void bundled_item_destroy (gpointer data)
{
    bundled_item *item = data;

#if BDEBUG
    fprintf(stderr, "bundled_item_destroy: type %d\n", item->type);
    if (item->type == GRETL_TYPE_STRING) {
	fprintf(stderr, " string: '%s'\n", (char *) item->data);
    }
#endif

    switch (item->type) {
    case GRETL_TYPE_DOUBLE:
    case GRETL_TYPE_STRING:
    case GRETL_TYPE_SERIES:
	free(item->data);
	break;
    case GRETL_TYPE_MATRIX:
	gretl_matrix_free((gretl_matrix *) item->data);
	break;
    case GRETL_TYPE_MATRIX_REF:
	release_matrix_pointer((gretl_matrix **) &item->data);
	break;
    case GRETL_TYPE_BUNDLE:
	gretl_bundle_destroy((gretl_bundle *) item->data);
	break;
    case GRETL_TYPE_ARRAY:
	gretl_array_destroy((gretl_array*) item->data);
	break;
    default:
	break;
    }

    free(item->note);
    free(item);
}
Ejemplo n.º 6
0
static int bundled_item_replace_data (bundled_item *item,
				      GretlType type, void *ptr, 
				      int size, int copy)
{
    int err = 0;

    if (ptr == item->data) {
	return 0;
    }

    if (item->type == GRETL_TYPE_DOUBLE) {
	double *dp = item->data;

	*dp = *(double *) ptr;
    } else if (item->type == GRETL_TYPE_STRING) {
	free(item->data);
	if (copy) {
	    item->data = gretl_strdup((char *) ptr);
	} else {
	    item->data = ptr;
	}
    } else if (item->type == GRETL_TYPE_MATRIX) {
	gretl_matrix_free(item->data);
	if (copy) {
	    item->data = gretl_matrix_copy((gretl_matrix *) ptr);
	} else {
	    item->data = ptr;
	}
    } else if (item->type == GRETL_TYPE_MATRIX_REF) {
	release_matrix_pointer((gretl_matrix **) &item->data);
	item->data = ptr;
    } else if (item->type == GRETL_TYPE_SERIES) {
	free(item->data);
	if (copy) {
	    item->data = copyvec((const double *) ptr, size);
	} else {
	    item->data = ptr;
	}
	item->size = size;
    } else if (item->type == GRETL_TYPE_BUNDLE) {
	gretl_bundle_destroy((gretl_bundle *) item->data);
	if (copy) {
	    item->data = gretl_bundle_copy((gretl_bundle *) ptr, &err);
	} else {
	    item->data = ptr;
	}
    } else if (item->type == GRETL_TYPE_ARRAY) {
	gretl_array_destroy((gretl_array*) item->data);
	if (copy) {
	    item->data = gretl_array_copy((gretl_array *) ptr, &err);
	} else {
	    item->data = ptr;
	}	
    } else {
	return E_DATA;
    }

    if (!err && item->data == NULL) {
	err = E_ALLOC;
    }

    if (item->note != NULL) {
	free(item->note);
	item->note = NULL;
    }

    return err;
}