added strip_path in metascene
[laserbrain_demo] / src / datamap.cc
index 1f3befe..e448923 100644 (file)
 
 static char *clean_line(char *s);
 
+DataMap::DataMap()
+{
+       strip_paths = false;
+}
+
 void DataMap::clear()
 {
        dmap.clear();
@@ -22,6 +27,11 @@ void DataMap::set_path(const char *path)
        root = std::string(path);
 }
 
+void DataMap::set_strip(bool s)
+{
+       strip_paths = s;
+}
+
 bool DataMap::load_map(const char *fname)
 {
        std::string path = root.empty() ? fname : root + std::string("/") + fname;
@@ -91,15 +101,17 @@ int DataMap::lookup(const char *in, char *buf, int bsz) const
 {
        std::string res;
 
-       char *inbuf = (char*)alloca(strlen(in) + 1);
-       strcpy(inbuf, in);
-       if(!(in = clean_line(inbuf))) {
-               if(buf && bsz > 0) {
-                       buf[0] = 0;
+       if(strip_paths) {
+               const char *ptr = strrchr(in, '/');
+               if(ptr) {
+                       in = ptr + 1;
                }
-               return 0;
        }
 
+       char *inbuf = (char*)alloca(strlen(in) + 1);
+       strcpy(inbuf, in);
+       in = clean_line(inbuf);
+
        // first check the cache
        std::map<std::string, std::string>::iterator it = cache.find(in);
        if(it != cache.end()) {