Program Listing for File FrameContainer.h#
↰ Return to documentation for file (include/Karana/Frame/FrameContainer.h)
/*
*Copyright(c)2024-2025KaranaDynamicsPtyLtd.Allrightsreserved.
*
*NOTICETOUSER:
*
*Thissourcecodeand/ordocumentation(the"LicensedMaterials")is
*theconfidentialandproprietaryinformationofKaranaDynamicsInc.
*UseoftheseLicensedMaterialsisgovernedbythetermsandconditions
*ofaseparatesoftwarelicenseagreementbetweenKaranaDynamicsandthe
*Licensee("LicenseAgreement").Unlessexpresslypermittedunderthat
*agreement,anyreproduction,modification,distribution,ordisclosure
*oftheLicensedMaterials,inwholeorinpart,toanythirdparty
*withoutthepriorwrittenconsentofKaranaDynamicsisstrictlyprohibited.
*
*THELICENSEDMATERIALSAREPROVIDED"ASIS"WITHOUTWARRANTYOFANYKIND.
*KARANADYNAMICSDISCLAIMSALLWARRANTIES,EXPRESSORIMPLIED,INCLUDING
*BUTNOTLIMITEDTOWARRANTIESOFMERCHANTABILITY,NON-INFRINGEMENT,AND
*FITNESSFORAPARTICULARPURPOSE.
*
*INNOEVENTSHALLKARANADYNAMICSBELIABLEFORANYDAMAGESWHATSOEVER,
*INCLUDINGBUTNOTLIMITEDTOLOSSOFPROFITS,DATA,ORUSE,EVENIF
*ADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGES,WHETHERINCONTRACT,TORT,
*OROTHERWISEARISINGOUTOFORINCONNECTIONWITHTHELICENSEDMATERIALS.
*
*U.S.GovernmentEndUsers:TheLicensedMaterialsarea"commercialitem"
*asdefinedat48C.F.R.2.101,andareprovidedtotheU.S.Government
*onlyasacommercialenditemunderthetermsofthislicense.
*
*AnyuseoftheLicensedMaterialsinindividualorcommercialsoftwaremust
*include,intheuserdocumentationandinternalsourcecodecomments,
*thisNotice,Disclaimer,andU.S.GovernmentUseProvision.
*/
#pragmaonce
#include<memory>
#include<string>
#include"Karana/Frame/OrientedChainedFrame2Frame.h"
#include"Karana/KCore/LockingBase.h"
#include"Karana/KCore/UsageTrackingMap.h"
#include"Karana/Frame/EdgeFrame2Frame.h"
#include"Karana/Frame/Frame.h"
#include"Karana/KCore/Tree.h"
namespaceKarana::Frame{
classFrame;
classSpiceFrame2Frame;
namespacekc=Karana::Core;
classFrameContainer:publickc::LockingBase{
//foraccessto_edgeOrientation
friendclassFrame2Frame;
//Foraccesstocontainerelementsfordiscard
friendclassFrame;
friendclassEdgeFrame2Frame;
friendclassChainedFrame2Frame;
friendclassOrientedChainedFrame2Frame;
//foraccessto_spce_f2fs_list
friendclassSpiceFrame2Frame;
friendclassSpiceFrame;
public:
FrameContainer();
virtual~FrameContainer();
virtualconststd::string&typeString()constnoexceptoverride;
statickc::ks_ptr<FrameContainer>create(conststd::string&root_frame_name);
structdumpOptions:LockingBase::dumpOptions{
boolframes=false;
booledges=false;
booloriented=false;
boolchains=false;
dumpOptions&operator=(constdumpOptions&p){
if(this!=&p){
LockingBase::dumpOptions::operator=(p);//Callbaseclassassignmentoperator
//AssignDerived-specificmembershere
frames=p.frames;
edges=p.edges;
oriented=p.oriented;
chains=p.chains;
}
return*this;
}
};
std::stringdumpString(conststd::string&prefix="",
constBase::dumpOptions*options=nullptr)constoverride;
constkc::ks_ptr<Frame>&root()const;
std::vector<kc::ks_ptr<Frame>>lookupFrame(conststd::string&name);
boolisAncestorOf(constFrame&oframe,constFrame&pframe,boolstrict);
constkc::ks_ptr<Frame>&getAncestor(constFrame&frame1,constFrame&frame2);
voidtrackUsageFrame(constkc::ks_ptr<Frame>&frame);
voidtrackUsageEdgeFrame2Frame(constkc::ks_ptr<EdgeFrame2Frame>&f2f);
void
trackUsageOrientedChainedFrame2Frame(constkc::ks_ptr<OrientedChainedFrame2Frame>&of2f);
voidtrackUsageChainedFrame2Frame(constkc::ks_ptr<ChainedFrame2Frame>&cf2f);
voidfreezeUpstream(constkc::ks_ptr<Frame>&frame);
voidunfreezeUpstream(constkc::ks_ptr<Frame>&frame);
std::vector<kc::ks_ptr<Frame>>frames();
std::vector<kc::ks_ptr<EdgeFrame2Frame>>edgeFrame2Frames();
std::vector<kc::ks_ptr<ChainedFrame2Frame>>chainedFrame2Frames();
//voidsetEphemerisTime(conststd::string&utc_time);
voidsetEphemerisTime(doubleephemeris_time);
doublegetEphemerisTime();
boolisUsingSpice();
voiddumpFrameTree(conststd::string&prefix,
constFrame&f,
conststd::function<std::string(constFrame&)>&callback)const;
conststd::unique_ptr<constkc::Tree<kc::id_t>>&tree(){return_tree;}
protected:
void_discard(kc::ks_ptr<Base>&base)override;
//void_ensureTree();
void_makeStale()override;
void_makeCurrent()override;
std::optional<bool>_subchainOrientation(constFrame2Frame&f2f,
constFrame2Frame&sub_f2f)const;
kc::RegistryList<Frame2Frame>_spice_f2fs_list;
private:
kc::UsageTrackingMap<kc::id_t, Frame>_frame_usage_map;
kc::UsageTrackingMap<kc::id_t, EdgeFrame2Frame>_edge_usage_map;
kc::UsageTrackingMap<std::pair<kc::id_t, kc::id_t>,ChainedFrame2Frame>_chain_usage_map;
kc::UsageTrackingMap<std::pair<kc::id_t, kc::id_t>,OrientedChainedFrame2Frame>
_oriented_chain_usage_map;
mutablestd::unique_ptr<constkc::Tree<kc::id_t>>_tree;
kc::ks_ptr<Frame>_root_frame;
double_ephemeris_time=km::uninitializedNaN;
};
}//namespaceKarana::Frame