Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jerrrrry
infinicore
Commits
a0eab6bf
Commit
a0eab6bf
authored
Mar 25, 2025
by
YdrMaster
Browse files
issue/121/feat: 添加 Result 类型
Signed-off-by:
YdrMaster
<
ydrml@hotmail.com
>
parent
beaf1e8c
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
62 additions
and
6 deletions
+62
-6
src/utils/rearrange.cc
src/utils/rearrange.cc
+5
-3
src/utils/rearrange.h
src/utils/rearrange.h
+3
-3
src/utils/result.hpp
src/utils/result.hpp
+54
-0
No files found.
src/utils/rearrange.cc
View file @
a0eab6bf
...
...
@@ -13,7 +13,7 @@ namespace utils {
RearrangeMeta
::
RearrangeMeta
(
std
::
vector
<
ptrdiff_t
>
meta
)
:
_meta
(
std
::
move
(
meta
))
{}
std
::
optional
<
RearrangeMeta
>
RearrangeMeta
::
create
(
Result
<
RearrangeMeta
>
RearrangeMeta
::
create
(
const
size_t
*
shape
,
const
ptrdiff_t
*
dst_strides_
,
const
ptrdiff_t
*
src_strides_
,
...
...
@@ -32,7 +32,9 @@ std::optional<RearrangeMeta> RearrangeMeta::create(
// 剔除初始的 1 长维度
if
(
shape
[
i
]
!=
1
)
{
auto
sd
=
dst_strides_
[
i
]
*
unit
,
ss
=
src_strides_
[
i
]
*
unit
;
// assert (sd != 0)
if
(
sd
==
0
)
{
return
Result
<
RearrangeMeta
>
(
INFINI_STATUS_BAD_TENSOR_STRIDES
);
}
dims
.
push_back
(
Dim
{
shape
[
i
],
sd
,
ss
});
}
}
...
...
@@ -81,7 +83,7 @@ std::optional<RearrangeMeta> RearrangeMeta::create(
for
(
ptrdiff_t
i
=
ndim
;
i
>
0
;
--
i
)
{
meta
[
1
+
i
-
1
]
*=
meta
[
1
+
i
];
}
return
{
RearrangeMeta
(
std
::
move
(
meta
)
)}
;
return
Result
<
RearrangeMeta
>
(
meta
);
}
size_t
RearrangeMeta
::
ndim
()
const
{
return
(
_meta
.
size
()
-
2
)
/
3
;
}
...
...
src/utils/rearrange.h
View file @
a0eab6bf
#ifndef __INFINIUTILS_REARRANGE_H__
#define __INFINIUTILS_REARRANGE_H__
#include
<optional>
#include <stddef
.h
>
#include
"result.hpp"
#include <
c
stddef>
#include <vector>
namespace
utils
{
...
...
@@ -12,7 +12,7 @@ class RearrangeMeta {
RearrangeMeta
(
std
::
vector
<
ptrdiff_t
>
);
public:
static
std
::
optional
<
RearrangeMeta
>
create
(
static
Result
<
RearrangeMeta
>
create
(
const
size_t
*
shape
,
const
ptrdiff_t
*
dst_strides
,
const
ptrdiff_t
*
src_strides
,
...
...
src/utils/result.hpp
0 → 100644
View file @
a0eab6bf
#ifndef __INFINIUTILS_RESULT_H__
#define __INFINIUTILS_RESULT_H__
#include "check.h"
#include <infinicore.h>
#include <variant>
namespace
utils
{
template
<
typename
T
,
typename
=
std
::
enable_if_t
<!
std
::
is_same_v
<
T
,
infiniStatus_t
>
>>
class
Result
{
std
::
variant
<
infiniStatus_t
,
T
>
_result
;
public:
explicit
Result
(
T
value
)
:
_result
(
std
::
move
(
value
))
{}
explicit
Result
(
infiniStatus_t
status
)
:
_result
(
status
)
{
if
(
status
==
INFINI_STATUS_SUCCESS
)
{
std
::
cerr
<<
"Warning: Result created with success status but value is not set."
<<
std
::
endl
;
std
::
abort
();
}
}
infiniStatus_t
status
()
const
{
return
_result
.
index
()
==
0
?
std
::
get
<
0
>
(
_result
)
:
INFINI_STATUS_SUCCESS
;
}
T
take
()
{
return
std
::
move
(
std
::
get
<
1
>
(
_result
));
}
operator
bool
()
const
{
return
status
()
==
INFINI_STATUS_SUCCESS
;
}
T
*
operator
->
()
{
return
&
std
::
get
<
1
>
(
_result
);
}
const
T
*
operator
->
()
const
{
return
&
std
::
get
<
1
>
(
_result
);
}
T
&
operator
*
()
{
return
std
::
get
<
1
>
(
_result
);
}
const
T
&
operator
*
()
const
{
return
std
::
get
<
1
>
(
_result
);
}
};
}
// namespace utils
#endif // __INFINIUTILS_RESULT_H__
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment