Esempio n. 1
0
int main()
{
	int i, n;
	char *a = "AaAa";
	char *b = "BbBb";
	char *c = "CcCc";
	char *p;
	
	cp_vector *v = cp_vector_create(1);

	for (i = 0; i < 30; i++)
	{
		char buf[0x20];
		sprintf(buf, "%s %d", a, i);
		cp_vector_add_element(v, strdup(buf));
		sprintf(buf, "%s %d", b, i);
		cp_vector_add_element(v, strdup(buf));
		sprintf(buf, "%s %d", c, i);
		cp_vector_add_element(v, strdup(buf));
	}

	n = cp_vector_size(v);

	for (i = 0; i < n; i++)
	{
		p = cp_vector_element_at(v, i);
		printf("%d: %s\n", i, p);
	}

	cp_vector_destroy_custom(v, free);
	
	return 0;
}
Esempio n. 2
0
void globals_free(globals **p) {
	globals *g = *p;

	cp_trie_destroy(g->sorts);

	cp_multimap_destroy(g->terms);

	cp_multimap_destroy(g->ops);

	cp_vector_destroy_custom(g->op_names, free);

	free(*p);
	*p = 0;
}
Esempio n. 3
0
void cp_avltree_destroy_node(cp_avltree *tree, cp_avlnode *node)
{
	if (node)
	{
		if ((tree->mode & COLLECTION_MODE_DEEP))
		{
			if (tree->key_dtr) (*tree->key_dtr)(node->key);
			if ((tree->mode & COLLECTION_MODE_MULTIPLE_VALUES) && node->value)
				cp_vector_destroy_custom(node->value, tree->value_dtr);
			else if (tree->value_dtr) 
				(*tree->value_dtr)(node->value);
		}
		else if ((tree->mode & COLLECTION_MODE_MULTIPLE_VALUES) && node->value)
			cp_vector_destroy(node->value);
		
			free(node);
	}
}
Esempio n. 4
0
int cp_db_connection_execute_statement_args(cp_db_connection *connection,
											cp_db_statement *statement,
											cp_result_set **results, ...)
{
	if (connection->data_source->act->execute_statement)
	{
		int i;
		int rc;
		va_list argp;
		int p_int;
		long p_long;
#ifdef CP_HAS_LONG_LONG
		long long p_longlong;
#else
		__int64 p_longlong;
#endif /* CP_HAS_LONG_LONG */
		double p_double;
		cp_timestampz p_timestamp;
		cp_string p_str;
		cp_vector *tmp = NULL;
		void *ptr;
		int *lengths = NULL;
		
		void **prm = NULL;
		
		if (statement->prm_count)
		{
			prm = calloc(statement->prm_count, sizeof(void *));
			lengths = calloc(statement->prm_count, sizeof(int));
		}

		va_start(argp, results);
		for (i = 0; i < statement->prm_count; i++)
		{
			tmp = cp_vector_create(statement->prm_count);
			switch (statement->types[i])
			{
				case CP_FIELD_TYPE_CHAR:
				case CP_FIELD_TYPE_VARCHAR:
					prm[i] = va_arg(argp, char *);
					lengths[i] = strlen(prm[i]);
					break;

				case CP_FIELD_TYPE_BLOB:
					ptr = malloc(sizeof(int));
					p_str = va_arg(argp, cp_string);
					memcpy(ptr, &p_str, sizeof(cp_string));
					prm[i] = ptr;
					lengths[i] = p_str.len;
					break;
					
				case CP_FIELD_TYPE_BOOLEAN:
				case CP_FIELD_TYPE_SHORT:
				case CP_FIELD_TYPE_INT:
					ptr = malloc(sizeof(int));
					p_int = va_arg(argp, int);
					memcpy(ptr, &p_int, sizeof(int));
					cp_vector_add_element(tmp, ptr);
					prm[i] = ptr;
					lengths[i] = sizeof(int);
					break;

				case CP_FIELD_TYPE_LONG:
					ptr = malloc(sizeof(long));
					p_long = va_arg(argp, long);
					memcpy(ptr, &p_long, sizeof(long));
					cp_vector_add_element(tmp, ptr);
					prm[i] = ptr;
					lengths[i] = sizeof(long);
					break;

				case CP_FIELD_TYPE_LONG_LONG:
#ifdef CP_HAS_LONG_LONG
					ptr = malloc(sizeof(long long));
					p_longlong = va_arg(argp, long long);
					memcpy(ptr, &p_longlong, sizeof(long long));
					lengths[i] = sizeof(long long);
#else
					ptr = malloc(sizeof(__int64));
					p_longlong = va_arg(argp, __int64);
					memcpy(ptr, &p_longlong, sizeof(__int64));
					lengths[i] = sizeof(__int64);
#endif /* CP_HAS_LONG_LONG */
					cp_vector_add_element(tmp, ptr);
					prm[i] = ptr;
					break;

				case CP_FIELD_TYPE_FLOAT:
				case CP_FIELD_TYPE_DOUBLE:
					ptr = malloc(sizeof(double));
					p_double = va_arg(argp, double);
					memcpy(ptr, &p_double, sizeof(double));
					cp_vector_add_element(tmp, ptr);
					prm[i] = ptr;
					lengths[i] = sizeof(double);
					break;

				case CP_FIELD_TYPE_DATE:
				case CP_FIELD_TYPE_TIME:
				case CP_FIELD_TYPE_TIMESTAMP:
					ptr = malloc(sizeof(cp_timestampz));
					p_timestamp = va_arg(argp, cp_timestampz);
					memcpy(ptr, &p_timestamp, sizeof(cp_timestampz));
					cp_vector_add_element(tmp, ptr);
					prm[i] = ptr;
					break;
			}
		}

		rc = (*connection->data_source->act->execute_statement)(connection, 
																statement, 
																results, 
																lengths, 
																prm);
		va_end(argp);
		if (statement->prm_count)
		{
			free(prm);
			free(lengths);
		}
		if (prm) free(prm);
		if (tmp)
			cp_vector_destroy_custom(tmp, (cp_destructor_fn) free);
		return rc;
	}