8 template <
class T>
inline void pack2d(
int n,
const T* sm, T* pac_sm ) {
9 for (
int i = 0; i <
n; i++ )
11 for (
int j = 0; j <= i; j++ )
13 int k = i * ( i + 1 ) / 2 + j;
14 pac_sm[k] = sm[i *
n + j];
21 return ( i > j ) ? i * ( i + 1 ) / 2 + j : j * ( j + 1 ) / 2 + i;
25 template <
class T>
inline T
get_element(
const T* pac_sm,
int i,
int j ) {
31 template <
class T>
inline void unpack2d(
int n, T* sm,
const T* pac_sm ) {
32 for (
int i = 0; i <
n; i++ )
34 for (
int j = 0; j <= i; j++ )
36 int k = i * ( i + 1 ) / 2 + j;
37 sm[i *
n + j] = sm[i + j *
n] = pac_sm[k];
T get_element(const T *pac_sm, int i, int j)
int get_idx(int i, int j)
void pack2d(int n, const T *sm, T *pac_sm)
void unpack2d(int n, T *sm, const T *pac_sm)