|
Packit |
fb9d21 |
/*
|
|
Packit |
fb9d21 |
* Copyright 2011 INRIA Saclay
|
|
Packit |
fb9d21 |
* Copyright 2013 Ecole Normale Superieure
|
|
Packit |
fb9d21 |
*
|
|
Packit |
fb9d21 |
* Use of this software is governed by the MIT license
|
|
Packit |
fb9d21 |
*
|
|
Packit |
fb9d21 |
* Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France,
|
|
Packit |
fb9d21 |
* Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod,
|
|
Packit |
fb9d21 |
* 91893 Orsay, France
|
|
Packit |
fb9d21 |
* and Ecole Normale Superieure, 45 rue d’Ulm, 75230 Paris, France
|
|
Packit |
fb9d21 |
*/
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
#include <isl/ctx.h>
|
|
Packit |
fb9d21 |
#include <isl/hash.h>
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
#define xCAT(A,B) A ## B
|
|
Packit |
fb9d21 |
#define CAT(A,B) xCAT(A,B)
|
|
Packit |
fb9d21 |
#define KEY CAT(isl_,KEY_BASE)
|
|
Packit |
fb9d21 |
#define VAL CAT(isl_,VAL_BASE)
|
|
Packit |
fb9d21 |
#define xFN(TYPE,NAME) TYPE ## _ ## NAME
|
|
Packit |
fb9d21 |
#define FN(TYPE,NAME) xFN(TYPE,NAME)
|
|
Packit |
fb9d21 |
#define xHMAP(KEY,VAL_BASE) KEY ## _to_ ## VAL_BASE
|
|
Packit |
fb9d21 |
#define yHMAP(KEY,VAL_BASE) xHMAP(KEY,VAL_BASE)
|
|
Packit |
fb9d21 |
#define HMAP yHMAP(KEY,VAL_BASE)
|
|
Packit |
fb9d21 |
#define HMAP_BASE yHMAP(KEY_BASE,VAL_BASE)
|
|
Packit |
fb9d21 |
#define xS(TYPE1,TYPE2,NAME) struct isl_ ## TYPE1 ## _ ## TYPE2 ## _ ## NAME
|
|
Packit |
fb9d21 |
#define yS(TYPE1,TYPE2,NAME) xS(TYPE1,TYPE2,NAME)
|
|
Packit |
fb9d21 |
#define S(NAME) yS(KEY_BASE,VAL_BASE,NAME)
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
struct HMAP {
|
|
Packit |
fb9d21 |
int ref;
|
|
Packit |
fb9d21 |
isl_ctx *ctx;
|
|
Packit |
fb9d21 |
struct isl_hash_table table;
|
|
Packit |
fb9d21 |
};
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
S(pair) {
|
|
Packit |
fb9d21 |
KEY *key;
|
|
Packit |
fb9d21 |
VAL *val;
|
|
Packit |
fb9d21 |
};
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
__isl_give HMAP *FN(HMAP,alloc)(isl_ctx *ctx, int min_size)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
HMAP *hmap;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
hmap = isl_calloc_type(ctx, HMAP);
|
|
Packit |
fb9d21 |
if (!hmap)
|
|
Packit |
fb9d21 |
return NULL;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
hmap->ctx = ctx;
|
|
Packit |
fb9d21 |
isl_ctx_ref(ctx);
|
|
Packit |
fb9d21 |
hmap->ref = 1;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (isl_hash_table_init(ctx, &hmap->table, min_size) < 0)
|
|
Packit |
fb9d21 |
return FN(HMAP,free)(hmap);
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
return hmap;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
static int free_pair(void **entry, void *user)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
S(pair) *pair = *entry;
|
|
Packit |
fb9d21 |
FN(KEY,free)(pair->key);
|
|
Packit |
fb9d21 |
FN(VAL,free)(pair->val);
|
|
Packit |
fb9d21 |
free(pair);
|
|
Packit |
fb9d21 |
*entry = NULL;
|
|
Packit |
fb9d21 |
return 0;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
__isl_null HMAP *FN(HMAP,free)(__isl_take HMAP *hmap)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
if (!hmap)
|
|
Packit |
fb9d21 |
return NULL;
|
|
Packit |
fb9d21 |
if (--hmap->ref > 0)
|
|
Packit |
fb9d21 |
return NULL;
|
|
Packit |
fb9d21 |
isl_hash_table_foreach(hmap->ctx, &hmap->table, &free_pair, NULL);
|
|
Packit |
fb9d21 |
isl_hash_table_clear(&hmap->table);
|
|
Packit |
fb9d21 |
isl_ctx_deref(hmap->ctx);
|
|
Packit |
fb9d21 |
free(hmap);
|
|
Packit |
fb9d21 |
return NULL;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
isl_ctx *FN(HMAP,get_ctx)(__isl_keep HMAP *hmap)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
return hmap ? hmap->ctx : NULL;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
/* Add a mapping from "key" to "val" to the associative array
|
|
Packit |
fb9d21 |
* pointed to by user.
|
|
Packit |
fb9d21 |
*/
|
|
Packit |
fb9d21 |
static int add_key_val(__isl_take KEY *key, __isl_take VAL *val, void *user)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
HMAP **hmap = (HMAP **) user;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
*hmap = FN(HMAP,set)(*hmap, key, val);
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!*hmap)
|
|
Packit |
fb9d21 |
return -1;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
return 0;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
__isl_give HMAP *FN(HMAP,dup)(__isl_keep HMAP *hmap)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
HMAP *dup;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!hmap)
|
|
Packit |
fb9d21 |
return NULL;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
dup = FN(HMAP,alloc)(hmap->ctx, hmap->table.n);
|
|
Packit |
fb9d21 |
if (FN(HMAP,foreach)(hmap, &add_key_val, &dup) < 0)
|
|
Packit |
fb9d21 |
return FN(HMAP,free)(dup);
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
return dup;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
__isl_give HMAP *FN(HMAP,cow)(__isl_take HMAP *hmap)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
if (!hmap)
|
|
Packit |
fb9d21 |
return NULL;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (hmap->ref == 1)
|
|
Packit |
fb9d21 |
return hmap;
|
|
Packit |
fb9d21 |
hmap->ref--;
|
|
Packit |
fb9d21 |
return FN(HMAP,dup)(hmap);
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
__isl_give HMAP *FN(HMAP,copy)(__isl_keep HMAP *hmap)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
if (!hmap)
|
|
Packit |
fb9d21 |
return NULL;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
hmap->ref++;
|
|
Packit |
fb9d21 |
return hmap;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
static int has_key(const void *entry, const void *c_key)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
const S(pair) *pair = entry;
|
|
Packit |
fb9d21 |
KEY *key = (KEY *) c_key;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
return KEY_EQUAL(pair->key, key);
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
int FN(HMAP,has)(__isl_keep HMAP *hmap, __isl_keep KEY *key)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
uint32_t hash;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!hmap)
|
|
Packit |
fb9d21 |
return -1;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
hash = FN(KEY,get_hash)(key);
|
|
Packit |
fb9d21 |
return !!isl_hash_table_find(hmap->ctx, &hmap->table, hash,
|
|
Packit |
fb9d21 |
&has_key, key, 0);
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
__isl_give VAL *FN(HMAP,get)(__isl_keep HMAP *hmap, __isl_take KEY *key)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
struct isl_hash_table_entry *entry;
|
|
Packit |
fb9d21 |
S(pair) *pair;
|
|
Packit |
fb9d21 |
uint32_t hash;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!hmap || !key)
|
|
Packit |
fb9d21 |
goto error;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
hash = FN(KEY,get_hash)(key);
|
|
Packit |
fb9d21 |
entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash,
|
|
Packit |
fb9d21 |
&has_key, key, 0);
|
|
Packit |
fb9d21 |
FN(KEY,free)(key);
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!entry)
|
|
Packit |
fb9d21 |
return NULL;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
pair = entry->data;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
return FN(VAL,copy)(pair->val);
|
|
Packit |
fb9d21 |
error:
|
|
Packit |
fb9d21 |
FN(KEY,free)(key);
|
|
Packit |
fb9d21 |
return NULL;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
/* Remove the mapping between "key" and its associated value (if any)
|
|
Packit |
fb9d21 |
* from "hmap".
|
|
Packit |
fb9d21 |
*
|
|
Packit |
fb9d21 |
* If "key" is not mapped to anything, then we leave "hmap" untouched"
|
|
Packit |
fb9d21 |
*/
|
|
Packit |
fb9d21 |
__isl_give HMAP *FN(HMAP,drop)(__isl_take HMAP *hmap, __isl_take KEY *key)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
struct isl_hash_table_entry *entry;
|
|
Packit |
fb9d21 |
S(pair) *pair;
|
|
Packit |
fb9d21 |
uint32_t hash;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!hmap || !key)
|
|
Packit |
fb9d21 |
goto error;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
hash = FN(KEY,get_hash)(key);
|
|
Packit |
fb9d21 |
entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash,
|
|
Packit |
fb9d21 |
&has_key, key, 0);
|
|
Packit |
fb9d21 |
if (!entry) {
|
|
Packit |
fb9d21 |
FN(KEY,free)(key);
|
|
Packit |
fb9d21 |
return hmap;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
hmap = FN(HMAP,cow)(hmap);
|
|
Packit |
fb9d21 |
if (!hmap)
|
|
Packit |
fb9d21 |
goto error;
|
|
Packit |
fb9d21 |
entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash,
|
|
Packit |
fb9d21 |
&has_key, key, 0);
|
|
Packit |
fb9d21 |
FN(KEY,free)(key);
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!entry)
|
|
Packit |
fb9d21 |
isl_die(hmap->ctx, isl_error_internal,
|
|
Packit |
fb9d21 |
"missing entry" , goto error);
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
pair = entry->data;
|
|
Packit |
fb9d21 |
isl_hash_table_remove(hmap->ctx, &hmap->table, entry);
|
|
Packit |
fb9d21 |
FN(KEY,free)(pair->key);
|
|
Packit |
fb9d21 |
FN(VAL,free)(pair->val);
|
|
Packit |
fb9d21 |
free(pair);
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
return hmap;
|
|
Packit |
fb9d21 |
error:
|
|
Packit |
fb9d21 |
FN(KEY,free)(key);
|
|
Packit |
fb9d21 |
FN(HMAP,free)(hmap);
|
|
Packit |
fb9d21 |
return NULL;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
/* Add a mapping from "key" to "val" to "hmap".
|
|
Packit |
fb9d21 |
* If "key" was already mapped to something else, then that mapping
|
|
Packit |
fb9d21 |
* is replaced.
|
|
Packit |
fb9d21 |
* If key happened to be mapped to "val" already, then we leave
|
|
Packit |
fb9d21 |
* "hmap" untouched.
|
|
Packit |
fb9d21 |
*/
|
|
Packit |
fb9d21 |
__isl_give HMAP *FN(HMAP,set)(__isl_take HMAP *hmap,
|
|
Packit |
fb9d21 |
__isl_take KEY *key, __isl_take VAL *val)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
struct isl_hash_table_entry *entry;
|
|
Packit |
fb9d21 |
S(pair) *pair;
|
|
Packit |
fb9d21 |
uint32_t hash;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!hmap || !key || !val)
|
|
Packit |
fb9d21 |
goto error;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
hash = FN(KEY,get_hash)(key);
|
|
Packit |
fb9d21 |
entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash,
|
|
Packit |
fb9d21 |
&has_key, key, 0);
|
|
Packit |
fb9d21 |
if (entry) {
|
|
Packit |
fb9d21 |
int equal;
|
|
Packit |
fb9d21 |
pair = entry->data;
|
|
Packit |
fb9d21 |
equal = VAL_EQUAL(pair->val, val);
|
|
Packit |
fb9d21 |
if (equal < 0)
|
|
Packit |
fb9d21 |
goto error;
|
|
Packit |
fb9d21 |
if (equal) {
|
|
Packit |
fb9d21 |
FN(KEY,free)(key);
|
|
Packit |
fb9d21 |
FN(VAL,free)(val);
|
|
Packit |
fb9d21 |
return hmap;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
hmap = FN(HMAP,cow)(hmap);
|
|
Packit |
fb9d21 |
if (!hmap)
|
|
Packit |
fb9d21 |
goto error;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash,
|
|
Packit |
fb9d21 |
&has_key, key, 1);
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!entry)
|
|
Packit |
fb9d21 |
goto error;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (entry->data) {
|
|
Packit |
fb9d21 |
pair = entry->data;
|
|
Packit |
fb9d21 |
FN(VAL,free)(pair->val);
|
|
Packit |
fb9d21 |
pair->val = val;
|
|
Packit |
fb9d21 |
FN(KEY,free)(key);
|
|
Packit |
fb9d21 |
return hmap;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
pair = isl_alloc_type(hmap->ctx, S(pair));
|
|
Packit |
fb9d21 |
if (!pair)
|
|
Packit |
fb9d21 |
goto error;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
entry->data = pair;
|
|
Packit |
fb9d21 |
pair->key = key;
|
|
Packit |
fb9d21 |
pair->val = val;
|
|
Packit |
fb9d21 |
return hmap;
|
|
Packit |
fb9d21 |
error:
|
|
Packit |
fb9d21 |
FN(KEY,free)(key);
|
|
Packit |
fb9d21 |
FN(VAL,free)(val);
|
|
Packit |
fb9d21 |
return FN(HMAP,free)(hmap);
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
/* Internal data structure for isl_map_to_basic_set_foreach.
|
|
Packit |
fb9d21 |
*
|
|
Packit |
fb9d21 |
* fn is the function that should be called on each entry.
|
|
Packit |
fb9d21 |
* user is the user-specified final argument to fn.
|
|
Packit |
fb9d21 |
*/
|
|
Packit |
fb9d21 |
S(foreach_data) {
|
|
Packit |
fb9d21 |
int (*fn)(__isl_take KEY *key, __isl_take VAL *val, void *user);
|
|
Packit |
fb9d21 |
void *user;
|
|
Packit |
fb9d21 |
};
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
/* Call data->fn on a copy of the key and value in *entry.
|
|
Packit |
fb9d21 |
*/
|
|
Packit |
fb9d21 |
static int call_on_copy(void **entry, void *user)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
S(pair) *pair = *entry;
|
|
Packit |
fb9d21 |
S(foreach_data) *data = (S(foreach_data) *) user;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
return data->fn(FN(KEY,copy)(pair->key), FN(VAL,copy)(pair->val),
|
|
Packit |
fb9d21 |
data->user);
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
/* Call "fn" on each pair of key and value in "hmap".
|
|
Packit |
fb9d21 |
*/
|
|
Packit |
fb9d21 |
int FN(HMAP,foreach)(__isl_keep HMAP *hmap,
|
|
Packit |
fb9d21 |
int (*fn)(__isl_take KEY *key, __isl_take VAL *val, void *user),
|
|
Packit |
fb9d21 |
void *user)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
S(foreach_data) data = { fn, user };
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!hmap)
|
|
Packit |
fb9d21 |
return -1;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
return isl_hash_table_foreach(hmap->ctx, &hmap->table,
|
|
Packit |
fb9d21 |
&call_on_copy, &data);
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
/* Internal data structure for print_pair.
|
|
Packit |
fb9d21 |
*
|
|
Packit |
fb9d21 |
* p is the printer on which the associative array is being printed.
|
|
Packit |
fb9d21 |
* first is set if the current key-value pair is the first to be printed.
|
|
Packit |
fb9d21 |
*/
|
|
Packit |
fb9d21 |
S(print_data) {
|
|
Packit |
fb9d21 |
isl_printer *p;
|
|
Packit |
fb9d21 |
int first;
|
|
Packit |
fb9d21 |
};
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
/* Print the given key-value pair to data->p.
|
|
Packit |
fb9d21 |
*/
|
|
Packit |
fb9d21 |
static int print_pair(__isl_take KEY *key, __isl_take VAL *val, void *user)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
S(print_data) *data = user;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!data->first)
|
|
Packit |
fb9d21 |
data->p = isl_printer_print_str(data->p, ", ");
|
|
Packit |
fb9d21 |
data->p = FN(isl_printer_print,KEY_BASE)(data->p, key);
|
|
Packit |
fb9d21 |
data->p = isl_printer_print_str(data->p, ": ");
|
|
Packit |
fb9d21 |
data->p = FN(isl_printer_print,VAL_BASE)(data->p, val);
|
|
Packit |
fb9d21 |
data->first = 0;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
FN(KEY,free)(key);
|
|
Packit |
fb9d21 |
FN(VAL,free)(val);
|
|
Packit |
fb9d21 |
return 0;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
/* Print the associative array to "p".
|
|
Packit |
fb9d21 |
*/
|
|
Packit |
fb9d21 |
__isl_give isl_printer *FN(isl_printer_print,HMAP_BASE)(
|
|
Packit |
fb9d21 |
__isl_take isl_printer *p, __isl_keep HMAP *hmap)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
S(print_data) data;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!p || !hmap)
|
|
Packit |
fb9d21 |
return isl_printer_free(p);
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
p = isl_printer_print_str(p, "{");
|
|
Packit |
fb9d21 |
data.p = p;
|
|
Packit |
fb9d21 |
data.first = 1;
|
|
Packit |
fb9d21 |
if (FN(HMAP,foreach)(hmap, &print_pair, &data) < 0)
|
|
Packit |
fb9d21 |
data.p = isl_printer_free(data.p);
|
|
Packit |
fb9d21 |
p = data.p;
|
|
Packit |
fb9d21 |
p = isl_printer_print_str(p, "}");
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
return p;
|
|
Packit |
fb9d21 |
}
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
void FN(HMAP,dump)(__isl_keep HMAP *hmap)
|
|
Packit |
fb9d21 |
{
|
|
Packit |
fb9d21 |
isl_printer *printer;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
if (!hmap)
|
|
Packit |
fb9d21 |
return;
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
printer = isl_printer_to_file(FN(HMAP,get_ctx)(hmap), stderr);
|
|
Packit |
fb9d21 |
printer = FN(isl_printer_print,HMAP_BASE)(printer, hmap);
|
|
Packit |
fb9d21 |
printer = isl_printer_end_line(printer);
|
|
Packit |
fb9d21 |
|
|
Packit |
fb9d21 |
isl_printer_free(printer);
|
|
Packit |
fb9d21 |
}
|