1 /* === S I N F G =========================================================== */
5 ** $Id: importer.cpp,v 1.1.1.1 2005/01/04 01:23:14 darco Exp $
8 ** Copyright (c) 2002 Robert B. Quattlebaum Jr.
10 ** This software and associated documentation
11 ** are CONFIDENTIAL and PROPRIETARY property of
12 ** the above-mentioned copyright holder.
14 ** You may not copy, print, publish, or in any
15 ** other way distribute this software without
16 ** a prior written agreement with
17 ** the copyright holder.
20 /* ========================================================================= */
22 /* === H E A D E R S ======================================================= */
24 #define SINFG_NO_ANGLE
44 /* === M A C R O S ========================================================= */
46 /* === G L O B A L S ======================================================= */
50 using namespace sinfg;
52 Importer::Book* sinfg::Importer::book_;
54 map<String,Importer::LooseHandle> *__open_importers;
56 /* === P R O C E D U R E S ================================================= */
58 /* === M E T H O D S ======================================================= */
61 Importer::subsys_init()
64 __open_importers=new map<String,Importer::LooseHandle>();
69 Importer::subsys_stop()
72 delete __open_importers;
83 Importer::open(const String &filename)
87 sinfg::error(_("Importer::open(): Cannot open empty filename"));
91 // If we already have an importer open under that filename,
92 // then use it instead.
93 if(__open_importers->count(filename))
95 //sinfg::info("Found importer already open, using it...");
96 return (*__open_importers)[filename];
99 if(find(filename.begin(),filename.end(),'.')==filename.end())
101 sinfg::error(_("Importer::open(): Couldn't find extension"));
105 String ext=string(filename.begin()+filename.find_last_of('.')+1,filename.end());
106 std::transform(ext.begin(),ext.end(),ext.begin(),&::tolower);
109 if(!Importer::book().count(ext))
111 sinfg::error(_("Importer::open(): Unknown file type -- ")+ext);
116 Importer::Handle importer;
117 importer=Importer::book()[ext](filename.c_str());
118 (*__open_importers)[filename]=importer;
128 Importer::Importer():
134 Importer::~Importer()
136 // Remove ourselves from the open importer list
137 map<String,Importer::LooseHandle>::iterator iter;
138 for(iter=__open_importers->begin();iter!=__open_importers->end();++iter)
139 if(iter->second==this)
141 __open_importers->erase(iter);