Additional __isl_export attributes

Needed by polly.

Signed-off-by: Andreas Simbuerger <simbuerg@fim.uni-passau.de>
Fix API issues

Signed-off-by: Andreas Simbuerger <simbuerg@fim.uni-passau.de>
Add a C++ interface generator for isl.

This generates a set of c++ headers that get distributed alongside isl.
These headers can be used as smart wrappers around isl objects that
perform automatic memory management for the pointers aquired from isl.

Signed-off-by: Andreas Simbuerger <simbuerg@fim.uni-passau.de>
Allow r-value references for callbacks

Signed-off-by: Andreas Simbuerger <simbuerg@fim.uni-passau.de>
Use a recursive_mutex to avoid deadlock

std::recursive_mutex does not block when lock() is called
from the same thread that already called lock before. This helps
resolving deadlocks when using isl++ wrappers inside callback
functions.

Signed-off-by: Andreas Simbuerger <simbuerg@fim.uni-passau.de>
Use pointers instead of references.

Signed-off-by: Andreas Simbuerger <simbuerg@fim.uni-passau.de>
Don't initialize a new context when we already have one

We work with a single global isl_ctx (for now). Make sure to keep it
alive as soon as we have one ready.

Signed-off-by: Andreas Simbuerger <simbuerg@fim.uni-passau.de>
isl::map_inplace

Provide a convenient template for executing member functions that do not
take arguments on a list of isl objects.

Example:
  isl::map_inplace(&isl::UnionMap::coalesce, { Map1, Map2, Map3, Map4 };

The calls to coalesce are performed 'inplace'.

Signed-off-by: Andreas Simbuerger <simbuerg@fim.uni-passau.de>
Use an explicit constructor instead of WRAP

Signed-off-by: Andreas Simbuerger <simbuerg@fim.uni-passau.de>