All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
FittedRouteRepository.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Types.h"
6 #include "MortonKey.h"
7 #include "Routes.h"
8 #include <vector>
9 #include <map>
10 
11 
12 namespace Eegeo
13 {
14  namespace Routes
15  {
16  namespace Fitting
17  {
19  {
20  private:
21  typedef std::multimap<Eegeo::Streaming::MortonKey, FittedRoute*> TMapKeyToFittedRoutes;
22 
23  TMapKeyToFittedRoutes m_keysToFittedRoutes;
24 
25  std::vector<IFittedRouteCallback*> m_routeAddedCallbacks;
26  std::vector<IFittedRouteCallback*> m_routeRemovedCallbacks;
27 
28  void FireCallbacks(std::vector<IFittedRouteCallback*>& callbacks, const FittedRoute& fittedRoute);
29  void InsertCallback(std::vector<IFittedRouteCallback*>& callbacks, IFittedRouteCallback* callback);
30  void RemoveCallback(std::vector<IFittedRouteCallback*>& callbacks, IFittedRouteCallback* callback);
31 
32  public:
33  void AddFittedRoute(FittedRoute& fittedRoute);
34  void GetFittedRoutesForKey(const Eegeo::Streaming::MortonKey& key, std::vector<FittedRoute*>& out_fittedRoutes) const;
35  bool HasAnyFittedRouteForKey(const Eegeo::Streaming::MortonKey& key) const;
36 
37  void RemoveFittedRoutesForKey(const Eegeo::Streaming::MortonKey& key, std::vector<FittedRoute*>& out_fittedRoutes);
38  void RemoveFittedRoute(const FittedRoute* pFittedRoute);
39 
40  FittedRoute* GetFittedRoute(const Route* pRoute, const Eegeo::Streaming::MortonKey& key) const;
41 
42  void GetFittedRouteKeys(std::vector<Eegeo::Streaming::MortonKey>& keys) const;
43 
44  void GetAll(std::vector<FittedRoute*>& out_fittedRoutes) const;
45  void GetAllForRoute(const Route* pRoute, std::vector<FittedRoute*>& out_fittedRoutes) const;
46 
47  void RemoveAllForRoute(const Route* pRoute, std::vector<FittedRoute*>& out_removedFittedRoutes);
48 
49  void Clear();
50 
51  void RegisterFittedRouteAddedCallback(IFittedRouteCallback* callback);
52  void RegisterFittedRouteRemovalCallback(IFittedRouteCallback* callback);
53  void UnregisterFittedRouteAddedCallback(IFittedRouteCallback* callback);
54  void UnregisterFittedRouteRemovalCallback(IFittedRouteCallback* callback);
55  };
56  }
57  }
58 }