Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F81057830
Array.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Sep 4, 00:22
Size
3 KB
Mime Type
text/x-c++
Expires
Fri, Sep 6, 00:22 (2 d)
Engine
blob
Format
Raw Data
Handle
20504611
Attached To
rLAMMPS lammps
Array.h
View Options
#ifndef ARRAY_H
#define ARRAY_H
//#include<stdlib.h>
//#include<stdio.h>
#include<iostream>
#include<string>
#include<cstdio>
template
<
typename
T
>
class
Array
{
public:
Array
();
Array
(
int
len
);
Array
(
const
Array
<
T
>&
A
);
~
Array
();
// Resize and reinitialize the array
void
reset
(
int
len
);
// Access method to get the element i:
T
&
operator
()
(
int
i
);
// Access method to get the element i:
const
T
&
operator
()
(
int
i
)
const
;
// Assignment
Array
<
T
>&
operator
=
(
const
Array
<
T
>
&
other
);
Array
<
T
>&
operator
=
(
const
T
&
value
);
// Get length of array
int
get_length
()
const
;
int
size
()
const
;
// Do I have this element?
bool
has_member
(
T
val
)
const
;
// Return pointer to internal data
const
T
*
get_data
()
const
;
T
*
get_ptr
()
const
;
// print
void
print
(
std
::
string
name
=
""
)
const
;
// Dump templated type to disk; operation not safe for all types
void
write_restart
(
FILE
*
f
)
const
;
private:
int
len_
;
T
*
data_
;
};
template
<
typename
T
>
Array
<
T
>::
Array
(
void
)
{
len_
=
0
;
data_
=
NULL
;
}
template
<
typename
T
>
Array
<
T
>::
Array
(
int
len
)
{
len_
=
len
;
data_
=
new
T
[
len_
];
}
template
<
typename
T
>
Array
<
T
>::
Array
(
const
Array
<
T
>&
A
)
{
len_
=
A
.
len_
;
if
(
A
.
data_
==
NULL
)
data_
=
NULL
;
else
{
data_
=
new
T
[
len_
];
for
(
int
i
=
0
;
i
<
len_
;
i
++
)
data_
[
i
]
=
A
.
data_
[
i
];
}
}
template
<
typename
T
>
void
Array
<
T
>::
reset
(
int
len
)
{
if
(
len_
==
len
)
{
// no size change; don't realloc memory
return
;
}
else
{
// size change, realloc memory
len_
=
len
;
if
(
data_
!=
NULL
)
delete
[]
data_
;
if
(
len_
>
0
)
data_
=
new
T
[
len_
];
else
{
data_
=
NULL
;
len_
=
0
;
}
}
}
template
<
typename
T
>
T
&
Array
<
T
>::
operator
()
(
int
i
)
{
// Array bounds checking
return
data_
[
i
];
}
template
<
typename
T
>
Array
<
T
>&
Array
<
T
>::
operator
=
(
const
Array
<
T
>
&
other
)
{
if
(
data_
==
NULL
)
{
// initialize my internal storage to match LHS
len_
=
other
.
len_
;
if
(
other
.
data_
==
NULL
)
data_
=
NULL
;
else
data_
=
new
T
[
len_
];
}
for
(
int
i
=
0
;
i
<
len_
;
i
++
)
data_
[
i
]
=
other
.
data_
[
i
];
return
*
this
;
}
template
<
typename
T
>
Array
<
T
>&
Array
<
T
>::
operator
=
(
const
T
&
value
)
{
for
(
int
i
=
0
;
i
<
len_
;
i
++
)
data_
[
i
]
=
value
;
return
*
this
;
}
template
<
typename
T
>
const
T
&
Array
<
T
>::
operator
()
(
int
i
)
const
{
// Array bounds checking
return
data_
[
i
];
}
template
<
typename
T
>
int
Array
<
T
>::
get_length
(
void
)
const
{
return
len_
;
}
template
<
typename
T
>
int
Array
<
T
>::
size
(
void
)
const
{
return
len_
;
}
template
<
typename
T
>
bool
Array
<
T
>::
has_member
(
T
val
)
const
{
int
i
;
bool
retval
=
false
;
for
(
i
=
0
;
i
<
len_
;
i
++
)
if
(
val
==
data_
[
i
])
retval
=
true
;
return
(
retval
);
}
template
<
typename
T
>
void
Array
<
T
>::
write_restart
(
FILE
*
f
)
const
{
fwrite
(
&
len_
,
sizeof
(
int
),
1
,
f
);
if
(
len_
>
0
)
fwrite
(
data_
,
sizeof
(
T
),
len_
,
f
);
}
template
<
typename
T
>
const
T
*
Array
<
T
>::
get_data
()
const
{
return
data_
;
}
template
<
typename
T
>
T
*
Array
<
T
>::
get_ptr
()
const
{
return
data_
;
}
template
<
typename
T
>
Array
<
T
>::~
Array
()
{
if
(
data_
!=
NULL
)
delete
[]
data_
;
}
template
<
typename
T
>
void
Array
<
T
>::
print
(
std
::
string
name
)
const
{
std
::
cout
<<
"------- Begin "
<<
name
<<
" -----------------
\n
"
;
if
(
data_
!=
NULL
)
{
for
(
int
i
=
0
;
i
<
len_
;
i
++
)
std
::
cout
<<
data_
[
i
]
<<
" "
;
std
::
cout
<<
"
\n
"
;
}
std
::
cout
<<
"
\n
------- End "
<<
name
<<
" -------------------
\n
"
;
}
#endif
// Array.h
Event Timeline
Log In to Comment