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);
void setRunwayReciprocal(PositionedID runway, PositionedID recip);
void setRunwayILS(PositionedID runway, PositionedID ils);
- void updateRunwayThreshold(PositionedID runwayID, const SGGeod &aThreshold,
- double aHeading, double aDisplacedThreshold,
- double aStopway);
-
PositionedID insertNavaid(FGPositioned::Type ty, const std::string& ident,
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);
+ /**
+ * Remove all ground-nets globally from the cache.
+ * This includes parking and taxi-nodes and edges between them. It's useful
+ * when scenery paths change, since the ground-nets depend on the scenery.
+ * Using this we can avoid havind to rebuild the entire cache.
+ */
+ void dropAllGroundnets();
+
PositionedID insertParking(const std::string& name, const SGGeod& aPos,
PositionedID aAirport,
double aHeading, int aRadius, const std::string& aAircraftType,
*/
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 );
/**
* 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.
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<NavDataCachePrivate> d;
};