22 #ifndef ASTSHIM_FRAMESET_H
23 #define ASTSHIM_FRAMESET_H
104 static int constexpr
BASE = AST__BASE;
135 _basicAddFrame(1, mapping, currentFrame);
211 _basicAddFrame(iframe, map, frame);
271 auto *rawFrame =
reinterpret_cast<AstObject *
>(astGetFrame(
getRawPtr(), iframe));
276 return Object::fromAstObject<Frame>(rawFrame,
copy);
305 AstObject *rawMap =
reinterpret_cast<AstObject *
>(astGetMapping(
getRawPtr(),
from,
to));
310 return Object::fromAstObject<Mapping>(rawMap,
true);
480 return copyImpl<FrameSet, AstFrameSet>();
490 explicit FrameSet(AstFrameSet *rawPtr) :
Frame(reinterpret_cast<AstFrame *>(rawPtr)) {
493 os <<
"this is a " <<
getClassName() <<
", which is not a FrameSet";
500 void _basicAddFrame(
int iframe,
Mapping const &map,
Frame const &frame) {
501 if (iframe == AST__ALLFRAMES) {
table::Key< std::string > name
Frame is used to represent a coordinate system.
A FrameSet consists of a set of one or more Frames (which describe coordinate systems),...
static constexpr int CURRENT
index of current frame
std::shared_ptr< FrameSet > copy() const
Return a deep copy of this object.
static constexpr int BASE
index of base frame
std::shared_ptr< Frame > getFrame(int iframe, bool copy=true) const
Obtain a deep copy of the specified Frame.
void setBase(int ind)
Set Base: index of base Frame.
FrameSet(Frame const &frame, std::string const &options="")
Construct a FrameSet from a Frame.
FrameSet(FrameSet &&)=default
FrameSet & operator=(FrameSet const &)=delete
virtual void addFrame(int iframe, Mapping const &map, Frame const &frame)
Add a new Frame and an associated Mapping to this FrameSet so as to define a new coordinate system,...
void setCurrent(int ind)
Set Current: index of current Frame, starting from 1.
FrameSet(Frame const &baseFrame, Mapping const &mapping, Frame const ¤tFrame, std::string const &options="")
Construct a FrameSet from two frames and a mapping that connects them.
std::string getAllVariants() const
Get AllVariants: a list of all variant mappings stored with the current Frame.
static constexpr int NOFRAME
an invalid frame index
void mirrorVariants(int iframe)
Indicates that all access to the Variant attribute of the current Frame should should be forwarded to...
int getBase() const
Get Base: index of base Frame.
void renameVariant(std::string const &name)
Rename the current Variant of the current Mapping.
FrameSet(AstFrameSet *rawPtr)
Construct a FrameSet from a raw AST pointer.
std::string getVariant() const
Variant: name of variant mapping in use by current Frame
void addAxes(Frame const &frame)
Append the axes from a specified Frame to every existing Frame in this FrameSet.
FrameSet & operator=(FrameSet &&)=default
virtual std::shared_ptr< Object > copyPolymorphic() const override
Return a deep copy of this object.
std::shared_ptr< Mapping > getMapping(int from=BASE, int to=CURRENT) const
Obtain a Mapping that converts between two Frames in a FrameSet.
FrameSet(FrameSet const &)=default
Copy constructor: make a deep copy.
void remapFrame(int iframe, Mapping &map)
Modify the relationship (i.e.
void addVariant(Mapping const &map, std::string const &name)
Store a new variant Mapping with the current Frame.
int getCurrent() const
Get Current: index of current Frame, starting from 1.
int getNFrame() const
Get FrameSet_NFrame "NFrame": number of Frames in the FrameSet, starting from 1.
virtual void removeFrame(int iframe)
Remove a Frame from a FrameSet.
An abstract base class for objects which transform one set of coordinates to another.
std::shared_ptr< Mapping > copy() const
Return a deep copy of this object.
Abstract base class for all AST objects.
std::string const getC(std::string const &attrib) const
Get the value of an attribute as a string.
std::string getClassName() const
Get Class: the name of the class (e.g.
void setI(std::string const &attrib, int value)
Set the value of an attribute as an int.
AstObject const * getRawPtr() const
Get the raw AST pointer.
int getI(std::string const &attrib) const
Get the value of an attribute as an int.
AST wrapper classes and functions.
void assertOK(AstObject *rawPtr1=nullptr, AstObject *rawPtr2=nullptr)
Throw std::runtime_error if AST's state is bad.