Garfield++ 5.0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Heed::DynArr< T > Class Template Reference

#include <AbsArr.h>

+ Inheritance diagram for Heed::DynArr< T >:

Classes

class  IndexingProvider
 

Public Member Functions

 DynArr (void)
 
 DynArr (long fqel, T *val=NULL)
 
 DynArr (long fqel, T val, ArgInterp_Val)
 
 DynArr (long fqel, const T *ar, ArgInterp_Arr)
 
 DynArr (const DynLinArr< T > &f)
 
 DynArr (long fqel1, long fqel2, T *val=NULL)
 
 DynArr (long fqel1, long fqel2, T val, ArgInterp_Val)
 
 DynArr (long fqel1, long fqel2, long fqel3, T *val=NULL)
 
 DynArr (long fqel1, long fqel2, long fqel3, long fqel4, T *val=NULL)
 
 DynArr (const DynLinArr< long > &fqel, T val, ArgInterp_Val)
 
 DynArr (const DynLinArr< long > &fqel, T *val)
 
 DynArr (const DynArr< T > &f)
 
 DynArr (const DynArr< T > &f, Pilfer)
 
void pilfer (const DynArr< T > &f)
 
DynArr< T > & operator= (const DynArr< T > &f)
 
template<class D>
DynArr< T > & operator= (const DynArr< D > &f)
 
void pass (long q, DynLinArr< long > fqel, DynLinArr< long > fcum_qel, T *fel)
 
IndexingProvider< T > operator[] (long n)
 
const IndexingProvider< T > operator[] (long n) const
 
T & ac (long i)
 
const T & ac (long i) const
 
T & acu (long i1)
 
const T & acu (long i1) const
 
T & ac (const DynLinArr< long > &ind)
 
const T & ac (const DynLinArr< long > &ind) const
 
T & acp (const DynLinArr< long > &ind)
 
const T & acp (const DynLinArr< long > &ind) const
 
T & acu (const DynLinArr< long > &ind)
 
const T & acu (const DynLinArr< long > &ind) const
 
T & ac (long i1, long i2)
 
const T & ac (long i1, long i2) const
 
T & acu (long i1, long i2)
 
const T & acu (long i1, long i2) const
 
T & ac (long i1, long i2, long i3)
 
const T & ac (long i1, long i2, long i3) const
 
long get_qel_lin (void) const
 
T & ac_lin (long n)
 
const T & ac_lin (long n) const
 
T & acu_lin (long n)
 
const T & acu_lin (long n) const
 
void assignAll (const T &val)
 
long get_qdim (void) const
 
const DynLinArr< long > & get_qel (void) const
 
const DynLinArr< T > & get_el (void) const
 
const DynLinArr< long > & get_cum_qel (void) const
 
void put_qel (T *val=NULL)
 
void clear (void)
 
int confirm_ind (const DynLinArr< long > &ind)
 
int confirm_ind_ext (const DynLinArr< long > &ind)
 
DynArr< T > top (void)
 
void check (void) const
 
int get_s_non_emplty (void) const
 
virtual DynArrcopy () const
 
virtual ~DynArr ()
 
- Public Member Functions inherited from Heed::RegPassivePtr
 RegPassivePtr (void)
 
 RegPassivePtr (char fs_ban_del, char fs_ban_sub, char fs_ban_cop=0)
 
 RegPassivePtr (const RegPassivePtr &f)
 
RegPassivePtroperator= (const RegPassivePtr &f)
 
CountPP_ns::CountPassivePtrbook (void) const
 
void clear_pointers (void) const
 
virtual ~RegPassivePtr ()
 
virtual void print (std::ostream &file, int l=1) const
 
void set_s_ban_del (char fs_ban_del)
 
char get_s_ban_del (void) const
 
void set_s_ban_sub (char fs_ban_sub)
 
char get_s_ban_sub (void) const
 
void set_s_ban_cop (char fs_ban_cop)
 
char get_s_ban_cop (void) const
 
void set_s_allow_del_at_zero_count (char fs_allow_del_at_zero_count)
 
char get_s_allow_del_at_zero_count (void) const
 
long get_total_number_of_references (void) const
 

Friends

template<class P>
void apply1 (DynArr< P > &ar, void(*fun)(P &f))
 
template<class P, class X>
void apply2 (DynArr< P > &ar, void(*fun1)(P &f, void(*fun21)(X &f)), void(*fun2)(X &f))
 

Additional Inherited Members

- Static Public Member Functions inherited from Heed::RegPassivePtr
static void set_s_ban_del_ignore (char fs_ban_del_ignore)
 
static char get_s_ban_del_ignore (void)
 
static void set_s_print_adr_cpp (char fs_print_adr_cpp)
 
static char get_s_print_adr_cpp (void)
 

Detailed Description

template<class T>
class Heed::DynArr< T >

Definition at line 1363 of file AbsArr.h.

Constructor & Destructor Documentation

◆ DynArr() [1/13]

template<class T>
Heed::DynArr< T >::DynArr ( void )
inline

◆ DynArr() [2/13]

template<class T>
Heed::DynArr< T >::DynArr ( long fqel,
T * val = NULL )
inlineexplicit

Definition at line 1368 of file AbsArr.h.

1369 : qel(DynLinArr<long>(1)),
1370 cum_qel(DynLinArr<long>(1)),
1371 el(DynLinArr<T>(fqel)) {
1372#ifdef DEBUG_DYNARR
1373 mcout << "explicit DynArr(long fqel, T* val=NULL) is called\n";
1374#endif
1375 qel[0] = fqel;
1376 cum_qel[0] = 1;
1377 if (val != NULL) assignAll(*val);
1378 }
void assignAll(const T &val)
Definition AbsArr.h:2459

◆ DynArr() [3/13]

template<class T>
Heed::DynArr< T >::DynArr ( long fqel,
T val,
ArgInterp_Val  )
inline

Definition at line 1379 of file AbsArr.h.

1380 : qel(DynLinArr<long>(1)),
1381 cum_qel(DynLinArr<long>(1)),
1382 el(DynLinArr<T>(fqel)) {
1383#ifdef DEBUG_DYNARR
1384 mcout << "explicit DynArr(long fqel, T* val=NULL) is called\n";
1385#endif
1386 qel[0] = fqel;
1387 cum_qel[0] = 1;
1388 assignAll(val);
1389 }

◆ DynArr() [4/13]

template<class T>
Heed::DynArr< T >::DynArr ( long fqel,
const T * ar,
ArgInterp_Arr  )
inline

Definition at line 1390 of file AbsArr.h.

1391 : qel(DynLinArr<long>(1)), cum_qel(DynLinArr<long>(1)), el(fqel) {
1392 qel[0] = fqel;
1393 cum_qel[0] = 1;
1394 long n;
1395 for (n = 0; n < fqel; n++) el.acu(n) = ar[n];
1396 }
T & acu(long i1)
Definition AbsArr.h:1716

◆ DynArr() [5/13]

template<class T>
Heed::DynArr< T >::DynArr ( const DynLinArr< T > & f)
inline

Definition at line 1400 of file AbsArr.h.

1401 : qel(DynLinArr<long>(1)), cum_qel(DynLinArr<long>(1)), el(f.get_qel()) {
1402 qel[0] = f.get_qel();
1403 cum_qel[0] = 1;
1404 for (long n = 0; n < qel[0]; n++) ac(n) = f[n];
1405 }
T & ac(long i)
Definition AbsArr.h:1696
const DynLinArr< long > & get_qel(void) const
Definition AbsArr.h:2148

◆ DynArr() [6/13]

template<class T>
Heed::DynArr< T >::DynArr ( long fqel1,
long fqel2,
T * val = NULL )
inline

Definition at line 1408 of file AbsArr.h.

1409 : qel(DynLinArr<long>(2)),
1410 cum_qel(DynLinArr<long>(2)),
1411 el(fqel1 * fqel2) {
1412#ifdef DEBUG_DYNARR
1413 mcout << "DynArr(long fqel1, long fqel2, T* val=NULL) is called\n";
1414#endif
1415 qel[0] = fqel1;
1416 qel[1] = fqel2;
1417 cum_qel[0] = fqel2;
1418 cum_qel[1] = 1;
1419 if (val != NULL) assignAll(*val);
1420 }

◆ DynArr() [7/13]

template<class T>
Heed::DynArr< T >::DynArr ( long fqel1,
long fqel2,
T val,
ArgInterp_Val  )
inline

Definition at line 1422 of file AbsArr.h.

1423 : qel(DynLinArr<long>(2)),
1424 cum_qel(DynLinArr<long>(2)),
1425 el(fqel1 * fqel2) {
1426#ifdef DEBUG_DYNARR
1427 mcout
1428 << "DynArr(long fqel1, long fqel2, T val, ArgInterp_Val t) is called\n";
1429#endif
1430 qel[0] = fqel1;
1431 qel[1] = fqel2;
1432 cum_qel[0] = fqel2;
1433 cum_qel[1] = 1;
1434 assignAll(val);
1435 }

◆ DynArr() [8/13]

template<class T>
Heed::DynArr< T >::DynArr ( long fqel1,
long fqel2,
long fqel3,
T * val = NULL )
inline

Definition at line 1438 of file AbsArr.h.

1439 : qel(DynLinArr<long>(3)),
1440 cum_qel(DynLinArr<long>(3)),
1441 el(fqel1 * fqel2 * fqel3) {
1442 qel[0] = fqel1;
1443 qel[1] = fqel2;
1444 qel[2] = fqel3;
1445 cum_qel[0] = fqel2 * fqel3;
1446 cum_qel[1] = fqel3;
1447 cum_qel[2] = 1;
1448 if (val != NULL) assignAll(*val);
1449 }

◆ DynArr() [9/13]

template<class T>
Heed::DynArr< T >::DynArr ( long fqel1,
long fqel2,
long fqel3,
long fqel4,
T * val = NULL )
inline

Definition at line 1452 of file AbsArr.h.

1453 : qel(DynLinArr<long>(4)),
1454 cum_qel(DynLinArr<long>(4)),
1455 el(fqel1 * fqel2 * fqel3 * fqel4) {
1456 qel[0] = fqel1;
1457 qel[1] = fqel2;
1458 qel[2] = fqel3;
1459 qel[3] = fqel4;
1460 cum_qel[0] = fqel2 * fqel3 * fqel4;
1461 cum_qel[1] = fqel3 * fqel4;
1462 cum_qel[2] = fqel4;
1463 cum_qel[3] = 1;
1464 if (val != NULL) assignAll(*val);
1465 }

◆ DynArr() [10/13]

template<class T>
Heed::DynArr< T >::DynArr ( const DynLinArr< long > & fqel,
T val,
ArgInterp_Val  )
inline

Definition at line 1472 of file AbsArr.h.

1472 : qel(fqel) {
1473 long qdim = qel.get_qel();
1474 if (qdim <= 0) return;
1475 cum_qel.put_qel(qdim);
1476 long ndim;
1477 long size = qel[0];
1478 for (ndim = 1; ndim < qdim; ndim++) size *= qel[ndim];
1479 el.put_qel(size);
1480 cum_qel[qdim - 1] = 1;
1481 for (ndim = qdim - 2; ndim >= 0; ndim--)
1482 cum_qel[ndim] = qel[ndim + 1] * cum_qel[ndim + 1];
1483 assignAll(val);
1484 }
void put_qel(T *val=NULL)
Definition AbsArr.h:2388
void put_qel(long fqel)
Definition AbsArr.h:527

◆ DynArr() [11/13]

template<class T>
Heed::DynArr< T >::DynArr ( const DynLinArr< long > & fqel,
T * val )
inlineexplicit

Definition at line 1486 of file AbsArr.h.

1486 : qel(fqel) {
1487 // fqel: array of dimensions
1488 // val: address of value to fill, may be NULL
1489 long qdim = qel.get_qel();
1490 if (qdim <= 0) return;
1491 cum_qel.put_qel(qdim);
1492 long ndim;
1493 long size = qel[0];
1494 for (ndim = 1; ndim < qdim; ndim++) size *= qel[ndim];
1495 el.put_qel(size);
1496 cum_qel[qdim - 1] = 1;
1497 for (ndim = qdim - 2; ndim >= 0; ndim--)
1498 cum_qel[ndim] = qel[ndim + 1] * cum_qel[ndim + 1];
1499 if (val != NULL) assignAll(*val);
1500 }

◆ DynArr() [12/13]

template<class T>
Heed::DynArr< T >::DynArr ( const DynArr< T > & f)
inline

Definition at line 1502 of file AbsArr.h.

1502 : RegPassivePtr() {
1503#ifdef DEBUG_DYNARR
1504 mcout << "DynArr(const DynArr<T>& f) is working\n";
1505#endif
1506 *this = f;
1507 }

◆ DynArr() [13/13]

template<class T>
Heed::DynArr< T >::DynArr ( const DynArr< T > & f,
Pilfer  )
inline

Definition at line 1508 of file AbsArr.h.

1509 : qel(f.qel, steal), cum_qel(f.cum_qel, steal), el(f.el, steal) {
1510#ifdef DEBUG_DYNARR
1511 mcout << "DynArr( DynArr<T>& f, Pilfer) is working\n";
1512#endif
1513 }

◆ ~DynArr()

template<class T>
virtual Heed::DynArr< T >::~DynArr ( )
inlinevirtual

Definition at line 2203 of file AbsArr.h.

2203{}

Member Function Documentation

◆ ac() [1/8]

template<class T>
T & Heed::DynArr< T >::ac ( const DynLinArr< long > & ind)
inline

Definition at line 1726 of file AbsArr.h.

1730 {
1731 long q;
1732 if ((q = qel.get_qel()) != ind.get_qel()) {
1733 mcerr << "ERROR in DynArr::ac(const DynLinArr<long>& ind): "
1734 << "qel.get_qel()!= ind.get_qel()\n"
1735 << "qel.get_qel()=" << qel.get_qel()
1736 << " ind.get_qel()=" << ind.get_qel() << '\n';
1737 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
1738 << '\n';
1739 spexit(mcerr);
1740 }
1741#ifdef ALR_CHECK_EACH_BOUND
1742#ifdef DEBUG_DYNARR
1743 if (q == 1) // faster for this case
1744 return el[ind.acu(0)];
1745 else
1746 return el[calc_lin_ind(ind)];
1747#else
1748 if (q == 1)
1749 return el[ind.acu(0)];
1750 else
1751 return el.acu(calc_lin_ind(ind));
1752#endif
1753#else
1754 if (q == 1)
1755 return el[ind.acu(0)];
1756 else
1757 return el[calc_lin_ind(ind)];
1758#endif
1759 }
#define spexit(stream)

◆ ac() [2/8]

template<class T>
const T & Heed::DynArr< T >::ac ( const DynLinArr< long > & ind) const
inline

Definition at line 1760 of file AbsArr.h.

1761 {
1762 long q;
1763 if ((q = qel.get_qel()) != ind.get_qel()) {
1764 mcerr << "ERROR in DynArr::ac(const DynLinArr<long>& ind): "
1765 << "qel.get_qel()!= ind.get_qel()\n"
1766 << "qel.get_qel()=" << qel.get_qel()
1767 << " ind.get_qel()=" << ind.get_qel() << '\n';
1768 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
1769 << '\n';
1770 spexit(mcerr);
1771 }
1772/*
1773#ifdef ALR_CHECK_EACH_BOUND
1774#ifdef DEBUG_DYNARR
1775 return el[calc_lin_ind(ind)];
1776#else
1777 return el.acu(calc_lin_ind(ind));
1778#endif
1779#else
1780 return el[calc_lin_ind(ind)];
1781#endif
1782 //return el[calc_lin_ind(ind)];
1783 */
1784
1785#ifdef ALR_CHECK_EACH_BOUND
1786#ifdef DEBUG_DYNARR
1787 if (q == 1) // faster for this case
1788 return el[ind.acu(0)];
1789 else
1790 return el[calc_lin_ind(ind)];
1791#else
1792 if (q == 1)
1793 return el[ind.acu(0)];
1794 else
1795 return el.acu(calc_lin_ind(ind));
1796#endif
1797#else
1798 if (q == 1)
1799 return el[ind.acu(0)];
1800 else
1801 return el[calc_lin_ind(ind)];
1802#endif
1803 }

◆ ac() [3/8]

template<class T>
T & Heed::DynArr< T >::ac ( long i)
inline

Definition at line 1696 of file AbsArr.h.

1696 {
1697 // for 1-dimensional array
1698 if (qel.get_qel() == 1) return el[i];
1699 mcerr << "ERROR in DynArr::ac(long i): qel.get_qel()!= 1, qel.get_qel()="
1700 << qel.get_qel() << '\n';
1701 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
1702 << '\n';
1703 spexit(mcerr);
1704 return el[0];
1705 }

Referenced by Heed::convert_DynArr(), Heed::copy_DynArr(), Heed::determinant_DynArr(), DynArr(), Heed::DynLinArr< T >::DynLinArr(), Heed::DynLinArr< T >::DynLinArr(), Heed::inverse_DynArr(), Heed::inverse_DynArr(), Heed::inverse_DynArr(), Heed::inverse_DynArr(), Heed::inverse_DynArr_prot(), Heed::inverse_DynArr_prot(), Heed::Parabola::Parabola(), Heed::Parabola::Parabola(), Heed::Parabola::Parabola(), Heed::print_DynArr_double(), Heed::print_DynArr_float(), Heed::print_DynArr_int_w(), top(), and Heed::DynLinArr< T >::top().

◆ ac() [4/8]

template<class T>
const T & Heed::DynArr< T >::ac ( long i) const
inline

Definition at line 1706 of file AbsArr.h.

1706 {
1707 // for 1-dimensional array
1708 if (qel.get_qel() == 1) return el[i];
1709 mcerr << "ERROR in DynArr::ac(long i): qel.get_qel()!= 1, qel.get_qel()="
1710 << qel.get_qel() << '\n';
1711 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
1712 << '\n';
1713 spexit(mcerr);
1714 return el[0];
1715 }

◆ ac() [5/8]

template<class T>
T & Heed::DynArr< T >::ac ( long i1,
long i2 )
inline

Definition at line 1886 of file AbsArr.h.

1887 {
1888 if (qel.get_qel() == 2) {
1889#ifdef ALR_CHECK_EACH_BOUND
1890 if (i1 >= 0 && i1 < qel.acu(0)) {
1891 if (i2 >= 0 && i2 < qel.acu(1)) {
1892#ifdef DEBUG_DYNARR
1893 return el[i1 * cum_qel.acu(0) + i2];
1894#else
1895 return el.acu(i1 * cum_qel.acu(0) + i2);
1896#endif
1897 } else {
1898 mcerr << "Error in DynArr::ac(long i1, long i2): i2 < 0 || i2 >= "
1899 "qel.acu(1)\n";
1900 Iprint2n(mcout, i2, qel[1]);
1901 }
1902 } else {
1903 mcerr << "Error in DynArr::ac(long i1, long i2): i1 < 0 || i1 >= "
1904 "qel.acu(0)\n";
1905 Iprint2n(mcout, i1, qel[0]);
1906 }
1907 } else {
1908 mcerr << "ERROR in DynArr::ac(long i1, long i2): qel.get_qel()!= 2,"
1909 << " qel.get_qel()=" << qel.get_qel() << '\n';
1910 }
1911 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
1912 << '\n';
1913 spexit(mcerr);
1914 return el[0];
1915#else // for ifdef ALR_CHECK_EACH_BOUND
1916 return el[i1 * cum_qel.acu(0) + i2];
1917
1918#endif
1919 }
#define Iprint2n(file, name1, name2)
Definition prstream.h:219

◆ ac() [6/8]

template<class T>
const T & Heed::DynArr< T >::ac ( long i1,
long i2 ) const
inline

Definition at line 1953 of file AbsArr.h.

1954 {
1955 if (qel.get_qel() == 2) {
1956#ifdef ALR_CHECK_EACH_BOUND
1957 if (i1 >= 0 && i1 < qel.acu(0)) {
1958 if (i2 >= 0 && i2 < qel.acu(1)) {
1959#ifdef DEBUG_DYNARR
1960 return el[i1 * cum_qel.acu(0) + i2];
1961#else
1962 return el.acu(i1 * cum_qel.acu(0) + i2);
1963#endif
1964 } else {
1965 mcerr << "Error in DynArr::ac(long i1, long i2): i2 < 0 || i2 >= "
1966 "qel.acu(1)\n";
1967 Iprint2n(mcout, i2, qel[1]);
1968 }
1969 } else {
1970 mcerr << "Error in DynArr::ac(long i1, long i2): i1 < 0 || i1 >= "
1971 "qel.acu(0)\n";
1972 Iprint2n(mcout, i1, qel[0]);
1973 }
1974 } else {
1975 mcerr << "ERROR in DynArr::ac(long i1, long i2): qel.get_qel()!= 2,"
1976 << " qel.get_qel()=" << qel.get_qel() << '\n';
1977 }
1978 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
1979 << '\n';
1980 spexit(mcerr);
1981 return el[0];
1982#else // for ifdef ALR_CHECK_EACH_BOUND
1983 return el[i1 * cum_qel.acu(0) + i2];
1984
1985#endif
1986 }

◆ ac() [7/8]

template<class T>
T & Heed::DynArr< T >::ac ( long i1,
long i2,
long i3 )
inline

Definition at line 2030 of file AbsArr.h.

2031 {
2032 if (qel.get_qel() != 3) {
2033 mcerr << "ERROR in DynArr::ac(long i1, long i2, long i3): "
2034 "qel.get_qel()!= 3,"
2035 << " qel.get_qel()=" << qel.get_qel() << '\n';
2036 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
2037 << '\n';
2038 spexit(mcerr);
2039 }
2040#ifdef ALR_CHECK_EACH_BOUND
2041 if (i1 < 0 || i1 >= qel.acu(0)) {
2042 mcerr << "Error in DynArr::ac(long i1, long i2, long i3): i1 < 0 || i1 "
2043 ">= qel.acu(0)\n";
2044 Iprint2n(mcout, i1, qel[0]);
2045 spexit(mcerr);
2046 }
2047 if (i2 < 0 || i2 >= qel.acu(1)) {
2048 mcerr << "Error in DynArr::ac(long i1, long i2, long i3): i2 < 0 || i2 "
2049 ">= qel.acu(1)\n";
2050 Iprint2n(mcout, i2, qel[1]);
2051 spexit(mcerr);
2052 }
2053 if (i3 < 0 || i3 >= qel.acu(2)) {
2054 mcerr << "Error in DynArr::ac(long i1, long i2, long i3): i3 < 0 || i3 "
2055 ">= qel.acu(2)\n";
2056 Iprint2n(mcout, i3, qel[2]);
2057 spexit(mcerr);
2058 }
2059#ifdef DEBUG_DYNARR
2060 return el.acu(i1 * cum_qel.acu(0) + i2 * cum_qel.acu(1) + i3);
2061#else
2062 return el[i1 * cum_qel.acu(0) + i2 * cum_qel[1] + i3];
2063#endif
2064#else
2065 return el[i1 * cum_qel.acu(0) + i2 * cum_qel[1] + i3];
2066#endif
2067 // return el[i1*cum_qel[0] + i2*cum_qel[1] + i3];
2068 }

◆ ac() [8/8]

template<class T>
const T & Heed::DynArr< T >::ac ( long i1,
long i2,
long i3 ) const
inline

Definition at line 2070 of file AbsArr.h.

2071 {
2072 if (qel.get_qel() != 3) {
2073 mcerr << "ERROR in DynArr::ac(long i1, long i2, long i3): "
2074 "qel.get_qel()!= 3,"
2075 << " qel.get_qel()=" << qel.get_qel() << '\n';
2076 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
2077 << '\n';
2078 spexit(mcerr);
2079 }
2080#ifdef ALR_CHECK_EACH_BOUND
2081 if (i1 < 0 || i1 >= qel.acu(0)) {
2082 mcerr << "Error in DynArr::ac(long i1, long i2, long i3): i1 < 0 || i1 "
2083 ">= qel.acu(0)\n";
2084 Iprint2n(mcout, i1, qel[0]);
2085 spexit(mcerr);
2086 }
2087 if (i2 < 0 || i2 >= qel.acu(1)) {
2088 mcerr << "Error in DynArr::ac(long i1, long i2, long i3): i2 < 0 || i2 "
2089 ">= qel.acu(1)\n";
2090 Iprint2n(mcout, i2, qel[1]);
2091 spexit(mcerr);
2092 }
2093 if (i3 < 0 || i3 >= qel.acu(2)) {
2094 mcerr << "Error in DynArr::ac(long i1, long i2, long i3): i3 < 0 || i3 "
2095 ">= qel.acu(2)\n";
2096 Iprint2n(mcout, i3, qel[2]);
2097 spexit(mcerr);
2098 }
2099#ifdef DEBUG_DYNARR
2100 return el.acu(i1 * cum_qel.acu(0) + i2 * cum_qel.acu(1) + i3);
2101#else
2102 return el[i1 * cum_qel.acu(0) + i2 * cum_qel[1] + i3];
2103#endif
2104#else
2105 return el[i1 * cum_qel.acu(0) + i2 * cum_qel[1] + i3];
2106#endif
2107 // return el[i1*cum_qel[0] + i2*cum_qel[1] + i3];
2108 }

◆ ac_lin() [1/2]

template<class T>
T & Heed::DynArr< T >::ac_lin ( long n)
inline

Definition at line 2113 of file AbsArr.h.

2113 {
2114 long qelln = el.get_qel();
2115#ifdef ALR_CHECK_BOUND
2116 if (n >= 0 && n < qelln) return el[n];
2117 mcerr << "ERROR in T& DynArr::ac_lin(long n): "
2118 << "n is out of bounds, n=" << n << " qelln=" << qelln << '\n';
2119 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
2120 << '\n';
2121 spexit(mcerr);
2122 return el[0];
2123#else
2124 return el[n];
2125#endif
2126 }

Referenced by Heed::operator>>().

◆ ac_lin() [2/2]

template<class T>
const T & Heed::DynArr< T >::ac_lin ( long n) const
inline

Definition at line 2127 of file AbsArr.h.

2127 {
2128 long qelln = el.get_qel();
2129#ifdef ALR_CHECK_BOUND
2130 if (n >= 0 && n < qelln) return el[n];
2131 mcerr << "ERROR in T& DynArr::ac_lin(long n): "
2132 << "n is out of bounds, n=" << n << " qelln=" << qelln << '\n';
2133 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
2134 << '\n';
2135 spexit(mcerr);
2136 return el[0];
2137#else
2138 return el[n];
2139#endif
2140 }

◆ acp() [1/2]

template<class T>
T & Heed::DynArr< T >::acp ( const DynLinArr< long > & ind)
inline

Definition at line 1805 of file AbsArr.h.

1808 {
1809 long q;
1810 if ((q = qel.get_qel()) > ind.get_qel()) {
1811 mcerr << "ERROR in DynArr::acp(const DynLinArr<long>& ind): "
1812 << "qel.get_qel()!= ind.get_qel()\n"
1813 << "qel.get_qel()=" << qel.get_qel()
1814 << " ind.get_qel()=" << ind.get_qel() << '\n';
1815 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
1816 << '\n';
1817 spexit(mcerr);
1818 }
1819
1820#ifdef ALR_CHECK_EACH_BOUND
1821#ifdef DEBUG_DYNARR
1822 if (q == 1) // faster for this case
1823 return el[ind.acu(0)];
1824 else
1825 return el[calc_lin_ind(ind)];
1826#else
1827 if (q == 1)
1828 return el[ind.acu(0)];
1829 else
1830 return el.acu(calc_lin_ind(ind));
1831#endif
1832#else
1833 if (q == 1)
1834 return el[ind.acu(0)];
1835 else
1836 return el[calc_lin_ind(ind)];
1837#endif
1838 }

Referenced by put_qel().

◆ acp() [2/2]

template<class T>
const T & Heed::DynArr< T >::acp ( const DynLinArr< long > & ind) const
inline

Definition at line 1840 of file AbsArr.h.

1840 {
1841 long q;
1842 if ((q = qel.get_qel()) > ind.get_qel()) {
1843 mcerr << "ERROR in DynArr::acp(const DynLinArr<long>& ind): "
1844 << "qel.get_qel()!= ind.get_qel()\n"
1845 << "qel.get_qel()=" << qel.get_qel()
1846 << " ind.get_qel()=" << ind.get_qel() << '\n';
1847 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
1848 << '\n';
1849 spexit(mcerr);
1850 }
1851#ifdef ALR_CHECK_EACH_BOUND
1852#ifdef DEBUG_DYNARR
1853 if (q == 1) // faster for this case
1854 return el[ind.acu(0)];
1855 else
1856 return el[calc_lin_ind(ind)];
1857#else
1858 if (q == 1)
1859 return el[ind.acu(0)];
1860 else
1861 return el.acu(calc_lin_ind(ind));
1862#endif
1863#else
1864 if (q == 1)
1865 return el[ind.acu(0)];
1866 else
1867 return el[calc_lin_ind(ind)];
1868#endif
1869 }

◆ acu() [1/6]

template<class T>
T & Heed::DynArr< T >::acu ( const DynLinArr< long > & ind)
inline

Definition at line 1871 of file AbsArr.h.

1872 {
1873 if (qel.get_qel() == 1)
1874 return el.acu(ind.acu(0));
1875 else
1876 return el.acu(calc_lin_ind(ind));
1877 }

◆ acu() [2/6]

template<class T>
const T & Heed::DynArr< T >::acu ( const DynLinArr< long > & ind) const
inline

Definition at line 1878 of file AbsArr.h.

1879 {
1880 if (qel.get_qel() == 1)
1881 return el.acu(ind.acu(0));
1882 else
1883 return el.acu(calc_lin_ind(ind));
1884 }

◆ acu() [3/6]

template<class T>
T & Heed::DynArr< T >::acu ( long i1)
inline

◆ acu() [4/6]

template<class T>
const T & Heed::DynArr< T >::acu ( long i1) const
inline

Definition at line 1720 of file AbsArr.h.

1722 {
1723 return el.acu(i1);
1724 }

◆ acu() [5/6]

template<class T>
T & Heed::DynArr< T >::acu ( long i1,
long i2 )
inline

Definition at line 2020 of file AbsArr.h.

2022 {
2023 return el.acu(i1 * cum_qel.acu(0) + i2);
2024 }

◆ acu() [6/6]

template<class T>
const T & Heed::DynArr< T >::acu ( long i1,
long i2 ) const
inline

Definition at line 2025 of file AbsArr.h.

2026 {
2027 return el.acu(i1 * cum_qel.acu(0) + i2);
2028 }

◆ acu_lin() [1/2]

◆ acu_lin() [2/2]

template<class T>
const T & Heed::DynArr< T >::acu_lin ( long n) const
inline

Definition at line 2143 of file AbsArr.h.

2143{ return el[n]; }

◆ assignAll()

template<class T>
void Heed::DynArr< T >::assignAll ( const T & val)

Definition at line 2459 of file AbsArr.h.

2459 {
2460 check();
2461 // try faster and simpler way (30.10.2006):
2462 el.assignAll(val);
2463 /*
2464 IterDynArr<T> iter(this);
2465 T* at;
2466 while( (at=iter.more()) != NULL )
2467 {
2468 *at=val;
2469 }
2470 */
2471}
void check(void) const
Definition AbsArr.h:2188

Referenced by DynArr(), DynArr(), DynArr(), DynArr(), DynArr(), DynArr(), DynArr(), DynArr(), Heed::inverse_DynArr(), Heed::inverse_DynArr(), Heed::inverse_DynArr(), Heed::inverse_DynArr(), Heed::inverse_DynArr_prot(), and Heed::inverse_DynArr_prot().

◆ check()

template<class T>
void Heed::DynArr< T >::check ( void ) const
inline

◆ clear()

template<class T>
void Heed::DynArr< T >::clear ( void )
inline

Definition at line 2165 of file AbsArr.h.

2165 {
2166 qel.clear();
2167 cum_qel.clear();
2168 el.clear();
2169 }

Referenced by pass().

◆ confirm_ind()

template<class T>
int Heed::DynArr< T >::confirm_ind ( const DynLinArr< long > & ind)
inline

Definition at line 2171 of file AbsArr.h.

2171{ return gconfirm_ind(qel, ind); }
int gconfirm_ind(const DynLinArr< long > &qel, const DynLinArr< long > &ind)
Definition AbsArr.cpp:418

◆ confirm_ind_ext()

template<class T>
int Heed::DynArr< T >::confirm_ind_ext ( const DynLinArr< long > & ind)
inline

Definition at line 2172 of file AbsArr.h.

2172 {
2173 return gconfirm_ind_ext(qel, ind);
2174 }
int gconfirm_ind_ext(const DynLinArr< long > &qel, const DynLinArr< long > &ind)
Definition AbsArr.cpp:433

Referenced by put_qel().

◆ copy()

template<class T>
virtual DynArr * Heed::DynArr< T >::copy ( ) const
inlinevirtual

Reimplemented from Heed::RegPassivePtr.

Definition at line 2202 of file AbsArr.h.

2202{ return new DynArr(*this); }
DynArr(void)
Definition AbsArr.h:1366

◆ get_cum_qel()

template<class T>
const DynLinArr< long > & Heed::DynArr< T >::get_cum_qel ( void ) const
inline

Definition at line 2152 of file AbsArr.h.

2152{ return cum_qel; }

Referenced by Heed::operator<<(), operator=(), and Heed::print_DynArr().

◆ get_el()

template<class T>
const DynLinArr< T > & Heed::DynArr< T >::get_el ( void ) const
inline

Definition at line 2149 of file AbsArr.h.

2149{ return el; }

Referenced by Heed::apeq_mant(), Heed::operator!=(), and Heed::operator==().

◆ get_qdim()

◆ get_qel()

◆ get_qel_lin()

◆ get_s_non_emplty()

template<class T>
int Heed::DynArr< T >::get_s_non_emplty ( void ) const
inline

Definition at line 2193 of file AbsArr.h.

2193 {
2194 long q = qel.get_qel();
2195 if (q == 0) return 0;
2196 long n;
2197 for (n = 0; n < q; n++) {
2198 if (qel[n] <= 0) return 0;
2199 }
2200 return 1;
2201 }

Referenced by Heed::operator<<().

◆ operator=() [1/2]

template<class T>
template<class D>
DynArr< T > & Heed::DynArr< T >::operator= ( const DynArr< D > & f)

Definition at line 2305 of file AbsArr.h.

2305 {
2306#ifdef DEBUG_DYNLINARR
2307 mcout << "DynArr<T>& DynArr<T>::operator=(const DynArr<D>& f)\n";
2308#endif
2309 if (this == &f) return *this;
2310 check();
2311 f.check();
2314 // for example, one of its elements.
2315 const long q = f.get_qel_lin();
2316 T* temp_el = (q > 0) ? (new T[q]) : (T*)NULL;
2317 for (long n = 0; n < q; n++) temp_el[n] = f.acu_lin(n);
2319 return *this;
2320}
const DynLinArr< long > & get_cum_qel(void) const
Definition AbsArr.h:2152
long get_qel_lin(void) const
Definition AbsArr.h:2110
T & acu_lin(long n)
Definition AbsArr.h:2142
void pass(long q, DynLinArr< long > fqel, DynLinArr< long > fcum_qel, T *fel)
Definition AbsArr.h:1546

◆ operator=() [2/2]

template<class T>
DynArr< T > & Heed::DynArr< T >::operator= ( const DynArr< T > & f)

Definition at line 2287 of file AbsArr.h.

2287 {
2288#ifdef DEBUG_DYNARR
2289 mcout << "DynArr<T>& DynArr<T>::operator=(const DynArr<T>& f)\n";
2290#endif
2291 if (this != &f) {
2292 // mcout<<"DynLinArr<T>& operator=(const DynLinArr<T>& f): long(el)="
2293 //<<long(el)<<'\n';
2294 check();
2295 f.check();
2296 qel = f.qel;
2297 cum_qel = f.cum_qel;
2298 el = f.el;
2299 }
2300 return *this;
2301}

◆ operator[]() [1/2]

template<class T>
IndexingProvider< T > Heed::DynArr< T >::operator[] ( long n)
inline

Definition at line 1653 of file AbsArr.h.

1653 {
1654 if (qel.get_qel() < 1) {
1655 mcerr << "ERROR in DynArr::IndexingProvider DynArr::operator[](long n): "
1656 "qel.get_qel()< 1, qel.get_qel()=" << qel.get_qel() << '\n';
1657 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
1658 << '\n';
1659 spexit(mcerr);
1660 }
1661#ifdef ALR_CHECK_EACH_BOUND
1662 if (n < 0 || n >= qel.acu(0)) {
1663 mcerr << "Error in IndexingProvider<T> DynArr::operator[](long n): n < 0 "
1664 "|| n >= qel.acu(0)\n";
1665 Iprint2n(mcout, n, qel.acu(0));
1666 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
1667 << '\n';
1668 spexit(mcerr);
1669 }
1670#endif
1671 return IndexingProvider<T>(*this, 1, n * cum_qel.acu(0));
1672 }

◆ operator[]() [2/2]

template<class T>
const IndexingProvider< T > Heed::DynArr< T >::operator[] ( long n) const
inline

Definition at line 1674 of file AbsArr.h.

1674 {
1675 if (qel.get_qel() < 1) {
1676 mcerr << "ERROR in DynArr::IndexingProvider DynArr::operator[](long n): "
1677 "qel.get_qel()< 1, qel.get_qel()=" << qel.get_qel() << '\n';
1678 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
1679 << '\n';
1680 spexit(mcerr);
1681 }
1682#ifdef ALR_CHECK_EACH_BOUND
1683 if (n < 0 || n >= qel.acu(0)) {
1684 mcerr << "Error in IndexingProvider<T> DynArr::operator[](long n): n < 0 "
1685 "|| n >= qel.acu(0)\n";
1686 Iprint2n(mcout, n, qel.acu(0));
1687 mcerr << "Type of T is (in internal notations) " << typeid(T).name()
1688 << '\n';
1689 spexit(mcerr);
1690 }
1691#endif
1692 DynArr<T>* temp = const_cast<DynArr<T>*>(this);
1693 return IndexingProvider<T>(*temp, 1, n * cum_qel.acu(0));
1694 }

◆ pass()

template<class T>
void Heed::DynArr< T >::pass ( long q,
DynLinArr< long > fqel,
DynLinArr< long > fcum_qel,
T * fel )
inline

Definition at line 1546 of file AbsArr.h.

1549 {
1550 clear();
1551 qel = fqel;
1552 cum_qel = fcum_qel;
1553 el.pass(q, fel);
1554 }
void clear(void)
Definition AbsArr.h:2165

Referenced by operator=().

◆ pilfer()

template<class T>
void Heed::DynArr< T >::pilfer ( const DynArr< T > & f)
inline

Definition at line 1515 of file AbsArr.h.

1515 {
1516#ifdef DEBUG_DYNARR
1517 mcout << "DynArr::pilfer is called\n";
1518#endif
1519 if (this != &f) {
1520 if (qel.get_qel() != 0) {
1521 if (f.qel.get_qel() != 0) {
1522 mcerr << "ERROR in DynArr::pilfer(...):\n";
1523 mcerr << "Both the destination and source arrays are not empty\n";
1524 // For explanations why it is dangerous, see similar function
1525 // of ActivePtr.
1526 spexit(mcerr);
1527 } else {
1528 qel.clear();
1529 cum_qel.clear();
1530 el.clear();
1531 }
1532 }
1533 qel.pilfer(f.qel);
1534 cum_qel.pilfer(f.cum_qel);
1535 el.pilfer(f.el);
1536 f.qel.clear();
1537 f.cum_qel.clear();
1538 f.el.clear();
1539 }
1540 }
void clear(void)
Definition AbsArr.h:313
long get_qel(void) const
Definition AbsArr.h:283

Referenced by Heed::operator>>().

◆ put_qel()

template<class T>
void Heed::DynArr< T >::put_qel ( T * val = NULL)

Definition at line 2388 of file AbsArr.h.

2390{
2391 check();
2392 if (qel.get_qel() == 0) {
2393 *this = DynArr<T>(qel_communicat, val);
2394 return;
2395 }
2396
2397 DynArr<T> datemp(qel_communicat, val); // all init to val
2399 T* at;
2400 while ((at = iter.more()) != NULL) {
2401 if (confirm_ind_ext(iter.get_ncur()))
2402 *at = acp(iter.get_ncur()); // change to old values where they were
2403 }
2404 *this = datemp;
2405}
int confirm_ind_ext(const DynLinArr< long > &ind)
Definition AbsArr.h:2172
T & acp(const DynLinArr< long > &ind)
Definition AbsArr.h:1805

◆ top()

template<class T>
DynArr< T > Heed::DynArr< T >::top ( void )

Definition at line 2517 of file AbsArr.h.

2517 {
2518 mfunnamep("template<class T> DynArr<T> DynArr<T>::top(void)");
2519 check();
2520 long qdim = get_qdim();
2521 check_econd11(qdim, != 2, mcerr);
2522 long n1, n2;
2523 DynArr<T> r(qel[1], qel[0]);
2524 for (n1 = 0; n1 < qel[0]; n1++) {
2525 for (n2 = 0; n2 < qel[1]; n2++) {
2526 r.ac(n2, n1) = ac(n1, n2);
2527 }
2528 }
2529 return r;
2530}
#define check_econd11(a, signb, stream)
#define mfunnamep(string)
long get_qdim(void) const
Definition AbsArr.h:2147

Friends And Related Symbol Documentation

◆ apply1

template<class T>
template<class P>
void apply1 ( DynArr< P > & ar,
void(* fun )(P &f) )
friend

◆ apply2

template<class T>
template<class P, class X>
void apply2 ( DynArr< P > & ar,
void(* fun1 )(P &f, void(*fun21)(X &f)),
void(* fun2 )(X &f) )
friend

The documentation for this class was generated from the following file: