summaryrefslogtreecommitdiffstats
path: root/Source/cmCacheManager.cxx
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2001-02-12 19:26:25 (GMT)
committerBill Hoffman <bill.hoffman@kitware.com>2001-02-12 19:26:25 (GMT)
commitd195c01a900c24df9b4ff262cd4dbb9fd901592b (patch)
tree5db9a5c3b4716024f900846ecabf5de8648eec35 /Source/cmCacheManager.cxx
parent452a127004220c10354fc986f69b66580ce7de31 (diff)
downloadCMake-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.cxx117
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;
+}