11/* *
22 * @file environment_cache.cpp
3- * @brief A environment cache
3+ * @brief Default environment cache
44 *
55 * @author Levi Armstrong
66 * @date December 3, 2020
2828
2929namespace tesseract_environment
3030{
31- DefaultEnvironmentCache::DefaultEnvironmentCache (Environment::ConstPtr env, std::size_t cache_size)
31+ DefaultEnvironmentCache::DefaultEnvironmentCache (tesseract_environment::Environment::ConstPtr env,
32+ std::size_t cache_size)
3233 : env_(std::move(env)), cache_size_(cache_size)
3334{
3435}
@@ -44,8 +45,28 @@ long DefaultEnvironmentCache::getCacheSize() const { return static_cast<long>(ca
4445void DefaultEnvironmentCache::refreshCache () const
4546{
4647 std::unique_lock<std::shared_mutex> lock (cache_mutex_);
47- tesseract_environment::Environment::UPtr env;
48+ refreshCacheHelper ();
49+ }
50+
51+ tesseract_environment::Environment::UPtr DefaultEnvironmentCache::getCachedEnvironment () const
52+ {
53+ tesseract_scene_graph::SceneState current_state = env_->getState ();
54+
55+ std::unique_lock<std::shared_mutex> lock (cache_mutex_);
56+ refreshCacheHelper (); // This is to make sure the cached items are updated if needed
57+ assert (!cache_.empty ());
58+ tesseract_environment::Environment::UPtr t = std::move (cache_.back ());
59+ // Update to the current joint values
60+ t->setState (current_state.joints );
61+
62+ cache_.pop_back ();
4863
64+ return t;
65+ }
66+
67+ void DefaultEnvironmentCache::refreshCacheHelper () const
68+ {
69+ tesseract_environment::Environment::UPtr env;
4970 auto lock_read = env_->lockRead ();
5071 int rev = env_->getRevision ();
5172 if (rev != cache_env_revision_ || cache_.empty ())
@@ -67,21 +88,4 @@ void DefaultEnvironmentCache::refreshCache() const
6788 }
6889}
6990
70- Environment::UPtr DefaultEnvironmentCache::getCachedEnvironment () const
71- {
72- // This is to make sure the cached items are updated if needed
73- refreshCache ();
74-
75- tesseract_scene_graph::SceneState current_state = env_->getState ();
76-
77- std::unique_lock<std::shared_mutex> lock (cache_mutex_);
78- tesseract_environment::Environment::UPtr t = std::move (cache_.back ());
79-
80- // Update to the current joint values
81- t->setState (current_state.joints );
82-
83- cache_.pop_back ();
84-
85- return t;
86- }
8791} // namespace tesseract_environment
0 commit comments