lsst.astshim
gf5dcc679e7+7aca86229d
Toggle main menu visibility
Loading...
Searching...
No Matches
src
base.cc
Go to the documentation of this file.
1
#include "
astshim/base.h
"
2
3
#include <sstream>
4
#include <stdexcept>
5
#include <string>
6
#include <vector>
7
8
namespace
ast
{
9
namespace
{
10
11
static
std::ostringstream errorMsgStream;
12
13
/*
14
Write an error message to `errorMsgStream`
15
16
Intended to be registered as an error handler to AST by calling `astSetPutErr(reportError)`.
17
*/
18
void
reportError(
int
errNum,
const
char
*errMsg) { errorMsgStream << errMsg; }
19
20
/*
21
Instantiate this class to register `reportError` as an AST error handler.
22
*/
23
class
ErrorHandler {
24
public
:
25
ErrorHandler() { astSetPutErr(reportError); }
26
27
ErrorHandler(ErrorHandler
const
&) =
delete
;
28
ErrorHandler(ErrorHandler &&) =
delete
;
29
ErrorHandler &
operator=
(ErrorHandler
const
&) =
delete
;
30
ErrorHandler &
operator=
(ErrorHandler &&) =
delete
;
31
32
static
std::string getErrMsg() {
33
auto
errMsg = errorMsgStream.
str
();
34
// clear status bits
35
errorMsgStream.
clear
();
36
if
(errMsg.empty()) {
37
errMsg =
"Failed with AST status = "
+
std::to_string
(astStatus);
38
}
else
{
39
// empty the stream
40
errorMsgStream.
str
(
""
);
41
}
42
astClearStatus;
43
return
errMsg;
44
}
45
};
46
47
}
// namespace
48
49
void
assertOK
(AstObject *rawPtr1, AstObject *rawPtr2) {
50
// Construct ErrorHandler once, the first time this function is called.
51
// This is done to initialize `errorMsgStream` and register `reportError` as the AST error handler.
52
// See https://isocpp.org/wiki/faq/ctors#static-init-order-on-first-use
53
static
ErrorHandler *errHandler =
new
ErrorHandler();
54
if
(!astOK) {
55
if
(rawPtr1) {
56
astAnnul(rawPtr1);
57
}
58
if
(rawPtr2) {
59
astAnnul(rawPtr2);
60
}
61
throw
std::runtime_error
(errHandler->getErrMsg());
62
}
63
}
64
65
ConstArray2D
arrayFromVector
(
std::vector<double>
const
&vec,
int
nAxes) {
66
return
static_cast<
ConstArray2D
>
(
arrayFromVector
(
const_cast<
std::vector<double>
&
>
(vec), nAxes));
67
}
68
69
Array2D
arrayFromVector
(
std::vector<double>
&vec,
int
nAxes) {
70
int
nPoints = vec.
size
() / nAxes;
71
if
(
static_cast<
std::size_t
>
(nPoints * nAxes) != vec.
size
()) {
72
std::ostringstream
os;
73
os <<
"vec length = "
<< vec.
size
() <<
" not a multiple of nAxes = "
<< nAxes;
74
throw
std::runtime_error
(os.
str
());
75
}
76
Array2D::Index shape = ndarray::makeVector(nAxes, nPoints);
77
Array2D::Index strides = ndarray::makeVector(nPoints, 1);
78
return
external(vec.
data
(), shape, strides);
79
}
80
81
}
// namespace ast
base.h
std::ostringstream
std::ostringstream::clear
T clear(T... args)
std::vector::data
T data(T... args)
ast
AST wrapper classes and functions.
Definition
attributes_channel.dox:1
ast::ConstArray2D
ndarray::Array< const double, 2, 2 > ConstArray2D
2D array of const double; typically used for lists of const points
Definition
base.h:46
ast::operator=
Frame & operator=(Frame const &)=delete
ast::Array2D
ndarray::Array< double, 2, 2 > Array2D
2D array of const double; typically used for lists of const points
Definition
base.h:42
ast::assertOK
void assertOK(AstObject *rawPtr1=nullptr, AstObject *rawPtr2=nullptr)
Throw std::runtime_error if AST's state is bad.
Definition
base.cc:49
ast::arrayFromVector
ConstArray2D arrayFromVector(std::vector< double > const &vec, int nAxes)
Reshape a vector as a 2-dimensional array that shares the same memory.
Definition
base.cc:65
std::runtime_error
std::vector::size
T size(T... args)
std::size_t
std::ostringstream::str
T str(T... args)
std::to_string
T to_string(T... args)
std::vector
Generated on
for lsst.astshim by
1.17.0