blob: 1c98ac4524529b17874f54ed67205fc7db41c873 [file] [log] [blame]
/*
* Copyright 2013 Ecole Normale Superieure
*
* Use of this software is governed by the MIT license
*
* Written by Sven Verdoolaege,
* Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France
*/
#include <isl/space.h>
#include <isl/local_space.h>
#include <isl_reordering.h>
#include <isl_multi_macro.h>
/* The functions in this file are meant for base object types
* that do not have any associated space. They are only meant to be used
* in the generic isl_multi_* functions which have to deal with base objects
* that do have an associated space.
*/
/* Drop the "n" first dimensions of type "type" at position "first".
*
* For a base expression without an associated space, this function
* does not do anything.
*/
static __isl_give EL *FN(EL,drop_dims)(__isl_take EL *el,
enum isl_dim_type type, unsigned first, unsigned n)
{
return el;
}
/* Return the space of "el".
*
* For a base expression without an associated space,
* the conditions surrounding the call to this function make sure
* that this function will never actually get called. We return a valid
* space anyway, just in case.
*/
static __isl_give isl_space *FN(EL,get_space)(__isl_keep EL *el)
{
if (!el)
return NULL;
return isl_space_params_alloc(FN(EL,get_ctx)(el), 0);
}
/* Reset the domain space of "el" to "space".
*
* For a base expression without an associated space, this function
* does not do anything, apart from error handling and cleaning up memory.
*/
static __isl_give EL *FN(EL,reset_domain_space)(__isl_take EL *el,
__isl_take isl_space *space)
{
if (!space)
return FN(EL,free)(el);
isl_space_free(space);
return el;
}
/* Align the parameters of "el" to those of "space".
*
* For a base expression without an associated space, this function
* does not do anything, apart from error handling and cleaning up memory.
* Note that the conditions surrounding the call to this function make sure
* that this function will never actually get called.
*/
static __isl_give EL *FN(EL,align_params)(__isl_take EL *el,
__isl_take isl_space *space)
{
if (!space)
return FN(EL,free)(el);
isl_space_free(space);
return el;
}
/* Reorder the dimensions of the domain of "el" according
* to the given reordering.
*
* For a base expression without an associated space, this function
* does not do anything, apart from error handling and cleaning up memory.
*/
static __isl_give EL *FN(EL,realign_domain)(__isl_take EL *el,
__isl_take isl_reordering *r)
{
if (!r)
return FN(EL,free)(el);
isl_reordering_free(r);
return el;
}
/* Do the parameters of "el" match those of "space"?
*
* For a base expression without an associated space, this function
* simply returns true, except if "el" or "space" are NULL.
*/
static isl_bool FN(EL,matching_params)(__isl_keep EL *el,
__isl_keep isl_space *space)
{
if (!el || !space)
return isl_bool_error;
return isl_bool_true;
}
/* Check that the domain space of "el" matches "space".
*
* For a base expression without an associated space, this function
* simply returns isl_stat_ok, except if "el" or "space" are NULL.
*/
static isl_stat FN(EL,check_match_domain_space)(__isl_keep EL *el,
__isl_keep isl_space *space)
{
if (!el || !space)
return isl_stat_error;
return isl_stat_ok;
}