4 #ifndef _CONTAINER_CLASSES_H_
5 #define _CONTAINER_CLASSES_H_
7 void do_dump_state(
const void* buf,
size_t nelem,
size_t size, FILE* out, int32 magic);
8 void do_restore_state(
void* buf,
size_t nelem,
size_t size, FILE *in, int32 magic);
18 static const int32
MA_VERS[
ML_TOP] = { 120070905, 220070803, 320071126 };
21 #define MEM_LAYOUT_VAL C_TYPE
23 #define MEM_LAYOUT_VAL ARPA_TYPE
27 #define lgBOUNDSCHECKVAL true
29 #define lgBOUNDSCHECKVAL false
34 template<
class T,
int d, mem_layout ALLOC,
bool lgBC>
37 static const int p_nd = lgBC ? 3 : 1;
45 # pragma warning( disable : 4127 )
49 if( t <
p_p[1] || t >=
p_p[2] )
58 # pragma warning( disable : 4127 )
128 template<
class T,
int d, mem_layout ALLOC,
bool lgBC>
149 template<
class T,
int d, mem_layout ALLOC,
bool lgBC>
158 template<
class T,
int d, mem_layout ALLOC,
bool lgBC>
196 template<
class T,
int d, mem_layout ALLOC,
bool lgBC>
264 return getvec(i-1,index).
d[index[i-1]];
271 return getvec(i-1,index).
d[index[i-1]];
277 template<
int d,mem_layout ALLOC=MEM_LAYOUT_VAL,
bool lgBC=lgBOUNDSCHECKVAL>
298 for(
int i=0; i < d; ++i )
327 for(
int i=0; i < d; ++i )
354 s[n-1] =
max(
s[n-1],index[n-1]);
355 nsl[n-1] += index[n-1];
382 # pragma warning( disable : 4127 )
387 for(
int dim=0; dim < d; ++dim )
388 n1[dim] = n2[dim] = 0L;
391 for(
int dim=0; dim < d-1; ++dim )
395 else if( ALLOC ==
C_TYPE )
398 for(
int i = d-2; i >= 0; --i )
399 st[i] =
st[i+1]*
s[i];
531 template<
class T,
int N, mem_layout ALLOC,
bool lgBC>
class n_pointer;
534 template<
class T,
int N>
548 template<
class T,
int N>
570 T& operator[] (
const size_t i)
const
584 T& operator[] (
const size_t i)
const
590 template<
class T,
int N>
606 template<
class T,
int N>
630 T& operator[] (
const size_t i)
const
646 T& operator[] (
const size_t i)
const
654 template<
class T,
int N>
668 template<
class T,
int N>
690 const T& operator[] (
const size_t i)
const
704 const T& operator[] (
const size_t i)
const
710 template<
class T,
int N>
726 template<
class T,
int N>
750 const T& operator[] (
const size_t i)
const
766 const T& operator[] (
const size_t i)
const
900 template<
class T,
int d, mem_layout ALLOC=MEM_LAYOUT_VAL,
bool lgBC=lgBOUNDSCHECKVAL>
932 for(
int i=0; i < d-1; ++i )
938 for(
int i=0; i < d-1; ++i )
961 size_type index[] = { d1, d2, d3, d4, d5, d6 };
987 memset(
data(), 0,
p_g.size*
sizeof(T) );
1014 const size_type index[] = { i1, i2, i3, i4, i5, i6 };
1016 while( n > 1 && index[n-1] == 0 )
1018 p_g.reserve( n, index );
1026 # pragma warning( disable : 4127 )
1032 for(
int dim=0; dim < d; ++dim )
1034 n1[dim] = n2[dim] = 0L;
1038 p_psl[dim] =
new T*[
p_g.nsl[dim] ];
1050 else if( ALLOC ==
C_TYPE )
1078 size_type index[] = { d1, d2, d3, d4, d5, d6 };
1083 for(
int n=0; n < d; n++ )
1086 p_g.reserve_recursive( 0, index );
1115 # pragma warning( disable : 4127 )
1128 if(
p_g.lgInbounds( 1, index ) )
1132 T* s = ( n > 0 ) ? &(*t)[i1][0] : NULL;
1145 # pragma warning( disable : 4127 )
1152 return iterator( &(*t)[i1][i2][i3] );
1158 if(
p_g.lgInbounds( 2, index ) )
1162 T* s = ( n > 0 ) ? &(*t)[i1][i2][0] : NULL;
1175 # pragma warning( disable : 4127 )
1182 return iterator( &(*t)[i1][i2][i3][i4] );
1188 if(
p_g.lgInbounds( 3, index ) )
1192 T* s = ( n > 0 ) ? &(*t)[i1][i2][i3][0] : NULL;
1205 # pragma warning( disable : 4127 )
1212 return iterator( &(*t)[i1][i2][i3][i4][i5] );
1218 if(
p_g.lgInbounds( 4, index ) )
1222 T* s = ( n > 0 ) ? &(*t)[i1][i2][i3][i4][0] : NULL;
1235 # pragma warning( disable : 4127 )
1242 return iterator( &(*t)[i1][i2][i3][i4][i5][i6] );
1247 size_type index[] = { i1, i2, i3, i4, i5 };
1248 if(
p_g.lgInbounds( 5, index ) )
1252 T* s = ( n > 0 ) ? &(*t)[i1][i2][i3][i4][i5][0] : NULL;
1283 if( !
p_g.lgInbounds( 2, index ) )
1285 return (*
this)[i1][i2];
1290 if( !
p_g.lgInbounds( 2, index ) )
1292 return (*
this)[i1][i2];
1297 if( !
p_g.lgInbounds( 3, index ) )
1299 return (*
this)[i1][i2][i3];
1304 if( !
p_g.lgInbounds( 3, index ) )
1306 return (*
this)[i1][i2][i3];
1311 if( !
p_g.lgInbounds( 4, index ) )
1313 return (*
this)[i1][i2][i3][i4];
1318 if( !
p_g.lgInbounds( 4, index ) )
1320 return (*
this)[i1][i2][i3][i4];
1324 size_type index[] = { i1, i2, i3, i4, i5 };
1325 if( !
p_g.lgInbounds( 5, index ) )
1327 return (*
this)[i1][i2][i3][i4][i5];
1331 size_type index[] = { i1, i2, i3, i4, i5 };
1332 if( !
p_g.lgInbounds( 5, index ) )
1334 return (*
this)[i1][i2][i3][i4][i5];
1338 size_type index[] = { i1, i2, i3, i4, i5, i6 };
1339 if( !
p_g.lgInbounds( 6, index ) )
1341 return (*
this)[i1][i2][i3][i4][i5][i6];
1345 size_type index[] = { i1, i2, i3, i4, i5, i6 };
1346 if( !
p_g.lgInbounds( 6, index ) )
1348 return (*
this)[i1][i2][i3][i4][i5][i6];
1437 # pragma warning( disable : 4127 )
1448 # pragma warning( disable : 4127 )
1459 # pragma warning( disable : 4127 )
1470 # pragma warning( disable : 4127 )
1481 # pragma warning( disable : 4127 )
1492 # pragma warning( disable : 4127 )
1503 # pragma warning( disable : 4127 )
1508 return p_iterator(i1, i2, i3, i4,
p_g.v.d[i1].d[i2].d[i3].d[i4].n);
1514 # pragma warning( disable : 4127 )
1519 return p_iterator(i1, i2, i3, i4,
p_g.v.d[i1].d[i2].d[i3].d[i4].n);
1525 # pragma warning( disable : 4127 )
1530 return p_iterator(i1, i2, i3, i4, i5,
p_g.v.d[i1].d[i2].d[i3].d[i4].d[i5].n);
1536 # pragma warning( disable : 4127 )
1541 return p_iterator(i1, i2, i3, i4, i5,
p_g.v.d[i1].d[i2].d[i3].d[i4].d[i5].n);
1554 return *
begin(i1, i2);
1558 return *
begin(i1, i2);
1562 return *
begin(i1, i2, i3);
1566 return *
begin(i1, i2, i3);
1570 return *
begin(i1, i2, i3, i4);
1574 return *
begin(i1, i2, i3, i4);
1578 return *
begin(i1, i2, i3, i4, i5);
1582 return *
begin(i1, i2, i3, i4, i5);
1587 return *(
end(i1) - 1);
1591 return *(
end(i1) - 1);
1595 return *(
end(i1, i2) - 1);
1599 return *(
end(i1, i2) - 1);
1603 return *(
end(i1, i2, i3) - 1);
1607 return *(
end(i1, i2, i3) - 1);
1611 return *(
end(i1, i2, i3, i4) - 1);
1615 return *(
end(i1, i2, i3, i4) - 1);
1619 return *(
end(i1, i2, i3, i4, i5) - 1);
1623 return *(
end(i1, i2, i3, i4, i5) - 1);
1636 return (
p_g.size == 0UL );
1646 return &
const_cast<valarray<T>&
>(
p_dsl)[0];
1709 #if defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(_MSC_VER)
1710 #define INST_EXTERN EXTERN
1717 # pragma warning( disable : 4231 )
1721 #define INSTANTIATE_MULTI_ARR( TYPE, LAYOUT, BC ) \
1722 INST_EXTERN template class pntr<TYPE,2,LAYOUT,BC>; \
1723 INST_EXTERN template class pntr<TYPE,3,LAYOUT,BC>; \
1724 INST_EXTERN template class pntr<TYPE,4,LAYOUT,BC>; \
1725 INST_EXTERN template class pntr<TYPE,5,LAYOUT,BC>; \
1726 INST_EXTERN template class pntr<TYPE,6,LAYOUT,BC>; \
1727 INST_EXTERN template class const_pntr<TYPE,2,LAYOUT,BC>; \
1728 INST_EXTERN template class const_pntr<TYPE,3,LAYOUT,BC>; \
1729 INST_EXTERN template class const_pntr<TYPE,4,LAYOUT,BC>; \
1730 INST_EXTERN template class const_pntr<TYPE,5,LAYOUT,BC>; \
1731 INST_EXTERN template class const_pntr<TYPE,6,LAYOUT,BC>
1740 template<
class T,
bool lgBC=lgBOUNDSCHECKVAL>
1787 alloc( begin, end );
1854 # pragma warning( disable : 4127 )
1874 p_size = (size_t)(end-begin);
1892 T* nptr_alloc =
new T[end-
p_begin];
1893 T* nptr = nptr_alloc -
p_begin;
1906 p_size = (size_t)(end-p_begin);
1922 # pragma warning( disable : 4127 )
1939 # pragma warning( disable : 4127 )
2029 return (
size() == 0 );