diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2001-02-12 19:26:25 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2001-02-12 19:26:25 (GMT) |
commit | d195c01a900c24df9b4ff262cd4dbb9fd901592b (patch) | |
tree | 5db9a5c3b4716024f900846ecabf5de8648eec35 /Source/cmCacheManager.cxx | |
parent | 452a127004220c10354fc986f69b66580ce7de31 (diff) | |
download | CMake-d195c01a900c24df9b4ff262cd4dbb9fd901592b.zip CMake-d195c01a900c24df9b4ff262cd4dbb9fd901592b.tar.gz CMake-d195c01a900c24df9b4ff262cd4dbb9fd901592b.tar.bz2 |
ENH: add cache manager class, move all commands into cmCommands.cxx to speed up compile times, share a .lib with the command line and mfc versions.
Diffstat (limited to 'Source/cmCacheManager.cxx')
-rw-r--r-- | Source/cmCacheManager.cxx | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/Source/cmCacheManager.cxx b/Source/cmCacheManager.cxx new file mode 100644 index 0000000..79d6366 --- /dev/null +++ b/Source/cmCacheManager.cxx @@ -0,0 +1,117 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) 2000 National Library of Medicine + All rights reserved. + + See COPYRIGHT.txt for copyright details. + +=========================================================================*/ + +#include "cmCacheManager.h" +#include "cmSystemTools.h" + +const char* cmCacheManagerTypes[] = +{ "BOOL", + "PATH", + "STRING", + 0 +}; + +cmCacheManager::CacheEntryType cmCacheManager::StringToType(const char* s) +{ + int i = 0; + while(cmCacheManagerTypes[i]) + { + if(strcmp(s, cmCacheManagerTypes[i]) == 0) + { + return static_cast<CacheEntryType>(i); + } + } + return STRING; +} + + +cmCacheManager* cmCacheManager::s_Instance = 0; + +cmCacheManager* cmCacheManager::GetInstance() +{ + if(!cmCacheManager::s_Instance) + { + cmCacheManager::s_Instance = new cmCacheManager; + } + return cmCacheManager::s_Instance; +} + + + +bool cmCacheManager::LoadCache(const char* path) +{ + std::ifstream fin(path); + if(!fin) + { + cmSystemTools::Error("Unable to open cache file for load. ", path); + return false; + } + const int bsize = 4096; + char buffer[bsize]; + std::string inputLine; + while(fin) + { + CacheEntry e; + std::string key; + fin.getline(buffer, bsize, '|'); + key = buffer; + fin.getline(buffer, bsize, '|'); + e.m_Value = buffer; + fin.getline(buffer, bsize); // last token is separated by a newline + e.m_Type = cmCacheManager::StringToType(buffer); + if(fin) + { + m_Cache[key] = e; + } + } +} + +bool cmCacheManager::SaveCache(const char* path) +{ + std::ofstream fout(path); + if(!fout) + { + cmSystemTools::Error("Unable to open cache file for save. ", path); + return false; + } + for( std::map<std::string, CacheEntry>::iterator i = m_Cache.begin(); + i != m_Cache.end(); ++i) + { + fout << (*i).first.c_str() << " | " << (*i).second.m_Value << " | "; + CacheEntryType t = (*i).second.m_Type; + fout << cmCacheManagerTypes[t]; + } + fout << "\n"; +} + +void cmCacheManager::AddCacheEntry(const char* key, + const char* value, + CacheEntryType type) +{ + CacheEntry e; + e.m_Value = value; + e.m_Type = type; + m_Cache[key] = e; +} + +const char* cmCacheManager::GetCacheValue(const char* key) +{ + if(m_Cache.count(key)) + { + return m_Cache[key].m_Value.c_str(); + } + return 0; +} |