24inline varname::varname(
const std::vector<std::string>& names)
 
   28template<
class charT, 
class Traits>
 
   30std::basic_ostream<charT,Traits>& 
 
   31operator<<(std::basic_ostream<charT,Traits>& os, 
const varname& v)
 
   33  std::vector<std::string>*& vv = 
 
   34    (std::vector<std::string>*&)os.pword(varname::xindex);
 
   36  if (v.names.size()) vv = 
new std::vector<std::string>(v.names);
 
 
   41template<
class charT, 
class Traits>
 
   43std::vector<std::string>* 
get_varname(std::basic_ostream<charT,Traits>& os)
 
   45  return (std::vector<std::string>*)os.pword(varname::xindex);
 
 
   58inline dimchange::dimchange(
size_t intdim, 
size_t realdim)
 
   60  ap_dimchange_init(&c, intdim, realdim);
 
   63inline dimchange::dimchange(
size_t intdim, 
size_t realdim, 
const ap_dim_t d[])
 
   65  ap_dimchange_init(&c, intdim, realdim);
 
   66  memcpy(c.dim, d, 
sizeof(ap_dim_t) * (intdim + realdim));
 
   69inline dimchange::dimchange(
const dimchange& x, 
bool inv)
 
   71  ap_dimchange_init(&c, x.c.intdim, x.c.realdim);
 
   72  memcpy(c.dim, x.c.dim, 
sizeof(ap_dim_t) * (x.c.intdim + x.c.realdim));
 
   73  if (inv) ap_dimchange_add_invert(&c);
 
   76inline dimchange::dimchange(
size_t intdim, 
size_t realdim, 
const std::vector<ap_dim_t>& d)
 
   78  if (d.size()<intdim+realdim)
 
   79    throw std::invalid_argument(
"apron::dimchange::dimchange(size_t, size_t, const vector<ap_dim_t>&) vector too short");
 
   80  ap_dimchange_init(&c, intdim, realdim);
 
   81  for (
size_t i=0; i<intdim+realdim; i++)
 
   89inline dimchange::~dimchange()
 
   91  ap_dimchange_clear(&c); 
 
   98inline dimchange& dimchange::operator= (
const dimchange& x)
 
  101    ap_dimchange_clear(&c);
 
  102    ap_dimchange_init(&c, x.c.intdim, x.c.realdim);
 
  103    memcpy(c.dim, x.c.dim, 
sizeof(ap_dim_t) * (x.c.intdim + x.c.realdim));
 
  108inline dimchange& dimchange::operator= (
const ap_dim_t d[])
 
  110  memcpy(c.dim, d, 
sizeof(ap_dim_t) * (c.intdim + c.realdim));
 
  114inline dimchange& dimchange::operator= (
const std::vector<ap_dim_t>& d)
 
  116  if (d.size()<c.intdim+c.realdim)
 
  117    throw std::invalid_argument(
"apron::dimchange::operator=(const vector<ap_dim_t>&) vector too short");
 
  118  for (
size_t i=0; i<c.intdim+c.realdim; i++)
 
  126inline size_t dimchange::get_intdim()
 const 
  131inline size_t dimchange::get_realdim()
 const 
  136inline ap_dim_t& dimchange::get(
size_t dim)
 
  138  if (dim >= c.intdim + c.realdim) 
throw std::out_of_range(
"apron::dimchange::get(size_t)");
 
  142inline const ap_dim_t& dimchange::get(
size_t dim)
 const 
  144  if (dim >= c.intdim + c.realdim) 
throw std::out_of_range(
"apron::dimchange::get(size_t)");
 
  148inline ap_dim_t& dimchange::operator[](
size_t dim)
 
  153inline const ap_dim_t& dimchange::operator[](
size_t dim)
 const 
  162inline std::ostream& 
operator<< (std::ostream& os, 
const dimchange& s)
 
  165  os << 
"dimchange: intdim=" << s.c.intdim << 
", realdim=" << s.c.realdim << std::endl;
 
  167    size_t sz = (*names).size();
 
  168    for (
size_t i=0;i<s.c.intdim+s.c.realdim;i++)
 
  169      if (s.c.dim[i] < sz) os << (*names)[s.c.dim[i]] << 
" ";
 
  170      else os << 
"x" << s.c.dim[i] << 
" ";
 
  173    for (
size_t i=0;i<s.c.intdim+s.c.realdim;i++)
 
  174      os << 
"x" << s.c.dim[i] << 
" ";
 
  176  return os << std::endl;
 
 
  179inline void dimchange::print(FILE* stream)
 const 
  181  ap_dimchange_fprint(stream, 
const_cast<ap_dimchange_t*
>(&c)); 
 
  188inline void dimchange::add_invert()
 
  190  ap_dimchange_add_invert(&c);
 
  193inline dimchange dimchange::operator- ()
 const 
  195  dimchange r = *
this; ap_dimchange_add_invert(&r.c);
 
  204inline const ap_dimchange_t* dimchange::get_ap_dimchange_t()
 const 
  209inline ap_dimchange_t* dimchange::get_ap_dimchange_t()
 
  223inline dimperm::dimperm(
size_t size)
 
  225  ap_dimperm_init(&c, size); 
 
  228inline dimperm::dimperm(
size_t size, 
const ap_dim_t d[])
 
  230  ap_dimperm_init(&c, size);
 
  231  memcpy(c.dim, d, 
sizeof(ap_dim_t) * (size));
 
  234inline dimperm::dimperm(
id t)
 
  236  ap_dimperm_init(&c, t.size); 
 
  237  ap_dimperm_set_id(&c);
 
  240inline dimperm::dimperm(
const dimperm& x, 
bool inv)
 
  242  ap_dimperm_init(&c, x.c.size);
 
  243  if (inv) ap_dimperm_invert(&c, 
const_cast<ap_dimperm_t*
>(&x.c));
 
  244  else memcpy(c.dim, x.c.dim, 
sizeof(ap_dim_t) * (x.c.size));
 
  247inline dimperm::dimperm(
const dimperm& x, 
const dimperm& y)
 
  249  ap_dimperm_init(&c, x.c.size);
 
  250  ap_dimperm_compose( &c, 
const_cast<ap_dimperm_t*
>(&x.c), 
const_cast<ap_dimperm_t*
>(&y.c) );
 
  253inline dimperm::dimperm(
const std::vector<ap_dim_t>& d)
 
  255  ap_dimperm_init(&c, d.size()); 
 
  256  for (
size_t i=0; i<d.size(); i++)
 
  264inline dimperm::~dimperm()
 
  266  ap_dimperm_clear(&c);
 
  273inline dimperm& dimperm::operator= (
const dimperm& x)
 
  276    if (x.c.size!=c.size) {
 
  277      ap_dimperm_clear(&c);
 
  278      ap_dimperm_init(&c, x.c.size);
 
  280    memcpy(c.dim, x.c.dim, 
sizeof(ap_dim_t) * c.size);
 
  285inline dimperm& dimperm::operator= (
id t)
 
  287  if (t.size!=c.size) {
 
  288    ap_dimperm_clear(&c);
 
  289    ap_dimperm_init(&c, t.size);
 
  291  ap_dimperm_set_id(&c); 
 
  295inline dimperm& dimperm::operator= (
const ap_dim_t d[])
 
  297  memcpy(c.dim, d, 
sizeof(ap_dim_t) * c.size);
 
  301inline dimperm& dimperm::operator= (
const std::vector<ap_dim_t>& d)
 
  303  if (c.size!=d.size()) {
 
  304    ap_dimperm_clear(&c);
 
  305    ap_dimperm_init(&c, d.size());
 
  307  for (
size_t i=0; i<c.size; i++) c.dim[i] = d[i];
 
  315inline size_t dimperm::size()
 const 
  320inline ap_dim_t& dimperm::operator[](
size_t dim)
 
  325inline const ap_dim_t& dimperm::operator[](
size_t dim)
 const 
  330inline ap_dim_t& dimperm::get(
size_t dim)
 
  332  if (dim >= c.size) 
throw std::out_of_range(
"apron::dimperm::get(size_t)");
 
  336inline const ap_dim_t& dimperm::get(
size_t dim)
 const 
  338  if (dim >= c.size) 
throw std::out_of_range(
"apron::dimperm::get(size_t)");
 
  346inline std::ostream& 
operator<< (std::ostream& os, 
const dimperm& s)
 
  349  os << 
"dimperm: size=" << s.c.size << std::endl;
 
  351    size_t sz = (*names).size();
 
  352    for (
size_t i=0;i<s.c.size;i++) {
 
  353      if (i<sz) os << (*names)[i];
 
  356      if (s.c.dim[i]<sz) os << (*names)[s.c.dim[i]];
 
  357      else os << 
"x" << s.c.dim[i];
 
  362    for (
size_t i=0;i<s.c.size;i++)
 
  363      os << 
"x" << i << 
" -> " << 
"x" << s.c.dim[i] << std::endl;
 
 
  368inline void dimperm::print(FILE* stream)
 const 
  370  ap_dimperm_fprint(stream, 
const_cast<ap_dimperm_t*
>(&c)); 
 
  379inline dimperm& dimperm::operator*= (
const dimperm& y)
 
  381  if (c.size!=y.c.size)
 
  382    throw std::invalid_argument(
"apron::dimperm::operator*= (const dimperm&) size mismatch");
 
  385    ap_dimperm_compose(&c, &c, 
const_cast<ap_dimperm_t*
>(&tmp.c));
 
  388    ap_dimperm_compose(&c, &c, 
const_cast<ap_dimperm_t*
>(&y.c));
 
  392inline dimperm 
operator* (
const dimperm& x, 
const dimperm& y)
 
  394  if (x.c.size!=y.c.size)
 
  395    throw std::invalid_argument(
"apron::dimperm::operator* (const dimperm&, const dimperm&) size mismatch");
 
  396  dimperm r = x.c.size;
 
  397  ap_dimperm_compose(&r.c, 
const_cast<ap_dimperm_t*
>(&x.c), 
const_cast<ap_dimperm_t*
>(&y.c)); 
 
 
  404inline void dimperm::invert()
 
  407  ap_dimperm_invert(&c, &tmp.c);
 
  410inline dimperm dimperm::operator- ()
 const 
  413  ap_dimperm_invert(&r.c, 
const_cast<ap_dimperm_t*
>(&c));
 
  422inline const ap_dimperm_t* dimperm::get_ap_dimperm_t()
 const 
  427inline ap_dimperm_t* dimperm::get_ap_dimperm_t()
 
std::vector< std::string > * get_varname(std::basic_ostream< charT, Traits > &os)
Definition apxx_dimension_inline.hh:43
std::basic_ostream< charT, Traits > & operator<<(std::basic_ostream< charT, Traits > &os, const varname &v)
Definition apxx_dimension_inline.hh:31
dimperm operator*(const dimperm &x, const dimperm &y)
Definition apxx_dimension_inline.hh:392