133 int size(
void)
const;
148 slice(
int start,
int inc=1,
int n=-1);
186 static void*
operator new(size_t);
187 static void operator delete(
void*,size_t);
244 bool operator ()(
const X&,
const X&);
247 static void sort(View* x,
int n);
298 x = home.
alloc<View>(n);
316 x = r.
alloc<View>(n);
328 int size(
void)
const;
473 bool same(
const Space& home,
const View& y)
const;
491 template<
class ViewY>
492 bool shared(
const Space& home,
const ViewY& y)
const;
498 template<
class ViewY>
503 static void*
operator new(size_t);
504 static void operator delete(
void*,size_t);
555 A
slice(
int start,
int inc=1,
int n=-1);
592 template<
class InputIterator>
599 int size(
void)
const;
636 static void*
operator new(size_t);
637 static void operator delete(
void*,size_t);
695 template<
class InputIterator>
706 slice(
int start,
int inc=1,
int n=-1);
715 operator <<(const PrimArgArray<T>&
x);
780 template<
class InputIterator>
781 ArgArray(InputIterator first, InputIterator last);
787 slice(
int start,
int inc=1,
int n=-1);
796 operator <<(const ArgArray<T>&
x);
867 template<
class InputIterator>
868 VarArgArray(InputIterator first, InputIterator last);
874 slice(
int start,
int inc=1,
int n=-1);
883 operator <<(const VarArgArray<Var>&
x);
924 template<
class Char,
class Traits,
class Var>
925 std::basic_ostream<Char,Traits>&
926 operator <<(std::basic_ostream<Char,Traits>& os,
933 template<
class Char,
class Traits,
class View>
934 std::basic_ostream<Char,Traits>&
941 template<
class Char,
class Traits,
class T>
942 std::basic_ostream<Char,Traits>&
992 assert((i >= 0) && (i <
size()));
999 assert((i >= 0) && (i <
size()));
1006 assert(
n==0 || start <
n);
1013 s = (
n-start)/inc + ((
n-start) % inc == 0 ? 0 : 1);
1015 s = (start+1)/-inc + ((start+1) % -inc == 0 ? 0 : 1);
1017 for (
int i=0;
i<r.size();
i++, start+=inc)
1076 for (
int i =
n;
i--;)
1077 x[
i].update(home, share, a.
x[
i]);
1086 for (
int i =
n;
i--;)
1100 VarArray<Var>::operator
delete(
void*,size_t) {
1104 typename ArrayTraits<VarArray<Var> >::ArgsType
1107 for (
int i=x.
size();
i--;)
1109 for (
int i=y.
size();
i--;)
1115 typename ArrayTraits<VarArray<Var> >::ArgsType
1118 for (
int i=x.
size();
i--;)
1120 for (
int i=y.
size();
i--;)
1126 typename ArrayTraits<VarArray<Var> >::ArgsType
1129 for (
int i=x.
size();
i--;)
1131 for (
int i=y.
size();
i--;)
1137 typename ArrayTraits<VarArray<Var> >::ArgsType
1140 for (
int i=x.
size();
i--;)
1147 typename ArrayTraits<VarArray<Var> >::ArgsType
1151 for (
int i=y.
size();
i--;)
1161 template<
class View>
1165 template<
class View>
1169 x = (n>0) ? home.
alloc<View>(n) : NULL;
1171 template<
class View>
1175 x = (n>0) ? r.
alloc<View>(n) : NULL;
1178 template<
class View>
1182 x = home.
alloc<View>(n);
1183 for (
int i = n;
i--; )
1189 template<
class View>
1193 x = r.
alloc<View>(n);
1194 for (
int i = n;
i--; )
1201 template<
class View>
1206 template<
class View>
1213 template<
class View>
1219 template<
class View>
1225 template<
class View>
1228 assert((i >= 0) && (i <
size()));
1232 template<
class View>
1235 assert((i >= 0) && (i <
size()));
1239 template<
class View>
1245 template<
class View>
1251 template<
class View>
1257 template<
class View>
1263 template<
class View>
1269 template<
class View>
1275 template<
class View>
1281 template<
class View>
1287 template<
class View>
1290 x[
i]=
x[0];
x++;
n--;
1293 template<
class View>
1299 template<
class View>
1306 template<
class View>
1313 template<
class View>
1317 x[
i].cancel(home,p,pc);
1318 x[
i]=
x[0];
x++;
n--;
1321 template<
class View>
1325 x[
i].cancel(home,p,pc);
1329 template<
class View>
1334 for (
int j=i; j--; )
1339 template<
class View>
1344 for (
int j=i+1; j<
n; j++)
1349 template<
class View>
1353 x[
i].cancel(home,a);
1354 x[
i]=
x[0];
x++;
n--;
1357 template<
class View>
1361 x[
i].cancel(home,a);
1365 template<
class View>
1370 for (
int j=i; j--; )
1375 template<
class View>
1380 for (
int j=i+1; j<
n; j++)
1385 template<
class View>
1391 for (
int i =
n;
i--; )
1392 x[
i].update(home, share, y.x[
i]);
1398 template<
class View>
1402 for (
int i =
n;
i--; )
1406 template<
class View>
1409 for (
int i =
n;
i--; )
1413 template<
class View>
1416 for (
int i =
n;
i--; )
1420 template<
class View>
1423 for (
int i =
n;
i--; )
1427 template<
class View>
1430 for (
int i =
n;
i--;)
1436 template<
class View>
1442 template<
class View>
template<
class X>
1444 ViewArray<View>::ViewLess<X>::operator ()(
const X&
a,
const X&
b) {
1448 template<
class View>
1452 Support::quicksort<View,ViewLess<View> >(y,m,vl);
1455 template<
class X,
class Y>
1460 template<
class X,
class Y>
1466 template<
class View>
1472 View* y = r.
alloc<View>(
n);
1473 for (
int i =
n;
i--; )
1476 for (
int i =
n-1;
i--; )
1485 template<
class View>
1490 for (
int i =
n;
i--; )
1496 template<
class View>
1503 for (
int i = 1;
i<
n;
i++)
1509 template<
class View>
1515 View* y = r.
alloc<View>(
n);
1516 for (
int i =
n;
i--; )
1519 for (
int i =
n-1;
i--; )
1528 template<
class View>
template<
class ViewY>
1533 for (
int i =
n;
i--; )
1539 template<
class View>
template<
class ViewY>
1542 if ((
size() < 1) || (y.
size() < 1))
1546 for (
int i=
size();
i--; )
1549 Support::quicksort<View,ViewLess<View> >(xs,
size(),xvl);
1551 for (
int j=y.
size(); j--; )
1553 ViewLess<ViewY> yvl;
1554 Support::quicksort<ViewY,ViewLess<ViewY> >(ys,y.
size(),yvl);
1557 while ((i <
size()) && (j < y.
size()))
1562 }
else if (
before(
x[i],y[j])) {
1573 template<
class View>
1579 template<
class View>
1581 ViewArray<View>::operator
delete(
void*,size_t) {
1593 return (n > onstack_size) ?
1594 heap.
alloc<T>(
static_cast<unsigned int>(
n)) : &onstack[0];
1601 assert(
n+i >= onstack_size);
1603 if (newCapacity <=
n+i)
1605 T* newA = allocate(newCapacity);
1617 :
n(0),
capacity(onstack_size),
a(allocate(0)) {}
1622 :
n(n0),
capacity(
n < onstack_size ? onstack_size :
n),
a(allocate(
n)) {}
1627 :
n(aa.
n),
capacity(
n < onstack_size ? onstack_size :
n),
a(allocate(
n)) {
1634 :
n(static_cast<int>(aa.
size())),
1635 capacity(
n < onstack_size ? onstack_size :
n),
a(allocate(
n)) {
1653 capacity = (
n < onstack_size ? onstack_size :
n);
1669 assert((i>=0) && (i <
n));
1676 assert((i>=0) && (i <
n));
1728 template<
class T>
template<
class A>
1731 assert(
n==0 || start <
n);
1738 s = (
n-start)/inc + ((
n-start) % inc == 0 ? 0 : 1);
1740 s = (start+1)/-inc + ((start+1) % -inc == 0 ? 0 : 1);
1742 for (
int i=0;
i<r.
size();
i++, start+=inc)
1743 new (&r[
i]) T(
a[start]);
1747 template<
class T>
template<
class A>
1752 return static_cast<A&
>(*this);
1756 template<
class InputIterator>
1759 :
n(0),
capacity(onstack_size),
a(allocate(0)) {
1760 while (first != last) {
1767 template<
class T>
template<
class A>
1771 for (
int i=0;
i<x.
size();
i++)
1772 new (&
a[
n++]) T(x[
i]);
1773 return static_cast<A&
>(*this);
1776 template<
class T>
template<
class A>
1781 new (&r[
i]) T(
a[i]);
1782 for (
int i=x.
n; i--;)
1783 new (&r[
n+
i]) T(x.
a[i]);
1787 template<
class T>
template<
class A>
1792 new (&r[
i]) T(
a[i]);
1805 ArgArrayBase<T>::operator
delete(
void*,size_t) {
1827 for (
int i = 1;
i <
n;
i++)
1828 a[
i] = va_arg(args,T);
1835 for (
int i=n;
i--; )
1850 template<
class InputIterator>
1882 return x.template concat
1887 typename ArrayTraits<PrimArgArray<T> >::ArgsType
1889 return x.template concat
1894 typename ArrayTraits<PrimArgArray<T> >::ArgsType
1917 for (
int i=n;
i--; )
1932 template<
class InputIterator>
1964 return x.template concat
1969 typename ArrayTraits<ArgArray<T> >::ArgsType
1971 return x.template concat
1976 typename ArrayTraits<ArgArray<T> >::ArgsType
1980 return xa.template concat
2008 template<
class InputIterator>
2017 for (
int i=x.
size();
i--; )
2048 return x.template concat
2053 typename ArrayTraits<VarArgArray<Var> >::ArgsType
2055 return x.template concat
2060 typename ArrayTraits<VarArgArray<Var> >::ArgsType
2064 return xa.template concat
2071 return a.varimp() < b.varimp();
2077 for (
int i =
n;
i--;)
2090 for (
int i =
n;
i--; )
2093 Support::quicksort<Var,VarLess>(y,
n,vl);
2094 for (
int i = n-1;
i--; )
2095 if (!y[
i].
assigned() && (y[
i+1].varimp() == y[
i].varimp())) {
2111 for (
int i =
n;
i--; )
2113 for (
int i = y.
n;
i--; )
2116 Support::quicksort<Var,VarLess>(z,m,vl);
2117 for (
int i = m-1;
i--; )
2118 if (!z[
i].
assigned() && (z[
i+1].varimp() == z[
i].varimp())) {
2131 for (
int i =
n;
i--; )
2132 if (
a[
i].varimp() == y.varimp())
2165 template<
class Char,
class Traits,
class Var>
2166 std::basic_ostream<Char,Traits>&
2167 operator <<(std::basic_ostream<Char,Traits>& os,
2169 std::basic_ostringstream<Char,Traits> s;
2170 s.copyfmt(os); s.width(0);
2174 for (
int i=1;
i<x.
size();
i++)
2178 return os << s.str();
2181 template<
class Char,
class Traits,
class View>
2182 std::basic_ostream<Char,Traits>&
2183 operator <<(std::basic_ostream<Char,Traits>& os,
2185 std::basic_ostringstream<Char,Traits> s;
2186 s.copyfmt(os); s.width(0);
2190 for (
int i=1;
i<x.
size();
i++)
2194 return os << s.str();
2197 template<
class Char,
class Traits,
class T>
2198 std::basic_ostream<Char,Traits>&
2199 operator <<(std::basic_ostream<Char,Traits>& os,
2201 std::basic_ostringstream<Char,Traits> s;
2202 s.copyfmt(os); s.width(0);
2206 for (
int i=1;
i<x.
size();
i++)
2210 return os << s.str();