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),...
std::shared_ptr< FrameSet > copy() const
Return a deep copy of this object.
static constexpr int CURRENT
index of current frame
static constexpr int BASE
index of base 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 &&)=default
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
virtual std::shared_ptr< Object > copyPolymorphic() const override
Return a deep copy of this object.
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(FrameSet const &)=default
Copy constructor: make a deep copy.
std::shared_ptr< Mapping > getMapping(int from=BASE, int to=CURRENT) const
Obtain a Mapping that converts between two Frames in a FrameSet.
void remapFrame(int iframe, Mapping &map)
Modify the relationship (i.e.
std::shared_ptr< Frame > getFrame(int iframe, bool copy=true) const
Obtain a deep copy of the specified Frame.
void addVariant(Mapping const &map, std::string const &name)
Store a new variant Mapping with the current Frame.
FrameSet & operator=(FrameSet const &)=delete
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.
int getI(std::string const &attrib) const
Get the value of an attribute as an int.
AstObject const * getRawPtr() const
Get the raw AST pointer.
AST wrapper classes and functions.
void assertOK(AstObject *rawPtr1=nullptr, AstObject *rawPtr2=nullptr)
Throw std::runtime_error if AST's state is bad.