Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Писарев Василий Вячеславович
Введение в суперкомпьютерное моделирование
Commits
d9ac3cf1
Commit
d9ac3cf1
authored
3 years ago
by
Писарев Василий Вячеславович
Browse files
Options
Download
Patches
Plain Diff
Vector and matrix types
parent
b84fbb41
master
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
vectors_and_matrices/array_types.hpp
+64
-0
vectors_and_matrices/array_types.hpp
with
64 additions
and
0 deletions
+64
-0
vectors_and_matrices/array_types.hpp
0 → 100644
+
64
−
0
View file @
d9ac3cf1
#ifndef ARRAY_TYPES_H
#define ARRAY_TYPES_H
#include
<memory>
#include
<cstdint>
#include
<cstring>
using
intptr_t
=
std
::
intptr_t
;
template
<
class
T
>
class
vec
final
{
private:
intptr_t
len
;
std
::
shared_ptr
<
T
[]
>
data
;
public:
vec
(
intptr_t
n
)
:
len
(
n
),
data
(
new
T
[
n
])
{};
~
vec
()
=
default
;
intptr_t
length
()
{
return
len
;}
T
*
raw_ptr
()
{
return
data
.
get
();}
T
&
operator
()(
intptr_t
idx
)
{
return
data
[
idx
];}
};
template
<
class
T
>
class
matrix
final
{
private:
intptr_t
nr_
,
nc_
;
std
::
shared_ptr
<
T
[]
>
data
;
public:
matrix
(
intptr_t
nr
,
intptr_t
nc
)
:
nr_
(
nr
),
nc_
(
nc
),
data
(
new
T
[
nr
*
nc
])
{};
~
matrix
()
=
default
;
intptr_t
length
()
{
return
nr_
*
nc_
;}
intptr_t
nrows
()
{
return
nr_
;}
intptr_t
ncols
()
{
return
nc_
;}
T
*
raw_ptr
()
{
return
data
.
get
();}
T
&
operator
()(
intptr_t
row
,
intptr_t
col
)
{
return
data
[
row
*
nc_
+
col
];}
T
&
operator
()(
intptr_t
idx
)
{
return
data
[
idx
];}
vec
<
T
>
row
(
intptr_t
);
vec
<
T
>
col
(
intptr_t
);
};
template
<
class
T
>
vec
<
T
>
matrix
<
T
>::
row
(
intptr_t
r
)
{
vec
<
T
>
v
(
nc_
);
std
::
memcpy
(
v
.
raw_ptr
(),
raw_ptr
()
+
r
*
nc_
,
nc_
*
sizeof
(
T
));
return
v
;
}
template
<
class
T
>
vec
<
T
>
matrix
<
T
>::
col
(
intptr_t
c
)
{
vec
<
T
>
v
(
nr_
);
for
(
intptr_t
i
=
0
;
i
<
nr_
;
i
++
)
{
v
(
i
)
=
data
[
i
*
nc_
+
c
];
}
return
v
;
}
#endif
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets