X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNavaids%2FNavDataCache.hxx;h=4975b0954fa89d5f96c0ce7ce0689e3989e7ad8b;hb=c3c0f68f76c031adcf610fdd3dbeee59bc33d553;hp=069ffa9074f794ff3d6cd483b2a76ebe358a2c7b;hpb=91c6e3433de99d6bcb80a329f9e3ef8bb80f330e;p=flightgear.git diff --git a/src/Navaids/NavDataCache.hxx b/src/Navaids/NavDataCache.hxx index 069ffa907..4975b0954 100644 --- a/src/Navaids/NavDataCache.hxx +++ b/src/Navaids/NavDataCache.hxx @@ -85,17 +85,12 @@ public: string_list readStringListProperty(const std::string& key); void writeStringListProperty(const std::string& key, const string_list& values); -// transaction API wrappers - void beginTransaction(); - void commitTransaction(); - void abortTransaction(); - /** * retrieve an FGPositioned from the cache. * This may be trivial if the object is previously loaded, or require actual * disk IO. */ - FGPositioned* loadById(PositionedID guid); + FGPositionedRef loadById(PositionedID guid); PositionedID insertAirport(FGPositioned::Type ty, const std::string& ident, const std::string& name); @@ -115,13 +110,21 @@ public: const std::string& name, const SGGeod& pos, int freq, int range, double multiuse, PositionedID apt, PositionedID runway); void updateILS(PositionedID ils, const SGGeod& newPos, double aHdg); + + + // Assign colocated DME to a navaid + void setNavaidColocated(PositionedID navaid, PositionedID colocatedDME); PositionedID insertCommStation(FGPositioned::Type ty, const std::string& name, const SGGeod& pos, int freq, int range, PositionedID apt); PositionedID insertFix(const std::string& ident, const SGGeod& aPos); - PositionedID createUserWaypoint(const std::string& ident, const SGGeod& aPos); + PositionedID createPOI(FGPositioned::Type ty, const std::string& ident, const SGGeod& aPos); + + bool removePOI(FGPositioned::Type ty, const std::string& aIdent); + + void dropGroundnetFor(PositionedID aAirport); PositionedID insertParking(const std::string& name, const SGGeod& aPos, PositionedID aAirport, @@ -142,13 +145,16 @@ public: */ void updatePosition(PositionedID item, const SGGeod &pos); - FGPositioned::List findAllWithIdent(const std::string& ident, - FGPositioned::Filter* filter, bool exact); - FGPositioned::List findAllWithName(const std::string& ident, - FGPositioned::Filter* filter, bool exact); + FGPositionedList findAllWithIdent( const std::string& ident, + FGPositioned::Filter* filter, + bool exact ); + FGPositionedList findAllWithName( const std::string& ident, + FGPositioned::Filter* filter, + bool exact ); - FGPositionedRef findClosestWithIdent(const std::string& aIdent, - const SGGeod& aPos, FGPositioned::Filter* aFilter); + FGPositionedRef findClosestWithIdent( const std::string& aIdent, + const SGGeod& aPos, + FGPositioned::Filter* aFilter ); /** @@ -190,7 +196,7 @@ public: * Given a runway and type, find the corresponding navaid (ILS / GS / OM) */ PositionedID findNavaidForRunway(PositionedID runway, FGPositioned::Type ty); - + /** * given a navaid name (or similar) from apt.dat / nav.dat, find the * corresponding airport and runway IDs. @@ -248,12 +254,33 @@ public: PositionedIDVec findAirportParking(PositionedID airport, const std::string& flightType, int radius); + + + class Transaction + { + public: + Transaction(NavDataCache* cache); + ~Transaction(); + + void commit(); + private: + NavDataCache* _instance; + bool _committed; + }; + + bool isReadOnly() const; private: NavDataCache(); friend class RebuildThread; void doRebuild(); + friend class Transaction; + + void beginTransaction(); + void commitTransaction(); + void abortTransaction(); + class NavDataCachePrivate; std::auto_ptr d; };