00001 // -*- C++ -*- 00002 00003 // PLearn (A C++ Machine Learning Library) 00004 // Copyright (C) 1998 Pascal Vincent 00005 // Copyright (C) 1999-2002 Pascal Vincent, Yoshua Bengio and University of Montreal 00006 // 00007 00008 // Redistribution and use in source and binary forms, with or without 00009 // modification, are permitted provided that the following conditions are met: 00010 // 00011 // 1. Redistributions of source code must retain the above copyright 00012 // notice, this list of conditions and the following disclaimer. 00013 // 00014 // 2. Redistributions in binary form must reproduce the above copyright 00015 // notice, this list of conditions and the following disclaimer in the 00016 // documentation and/or other materials provided with the distribution. 00017 // 00018 // 3. The name of the authors may not be used to endorse or promote 00019 // products derived from this software without specific prior written 00020 // permission. 00021 // 00022 // THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 00023 // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00024 // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 00025 // NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00026 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 00027 // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00028 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00029 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00030 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00031 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00032 // 00033 // This file is part of the PLearn library. For more information on the PLearn 00034 // library, go to the PLearn Web site at www.plearn.org 00035 00036 // Julien Keable 00037 00038 00039 #ifndef MRUFileQueue_H 00040 #define MRUFileQueue_H 00041 00042 #include <fstream> 00043 //#include <iostream> 00044 //#include <string> 00045 #include <list> 00046 00047 namespace PLearn{ 00048 using namespace std; 00049 00050 /* 00051 This class implements a MRU-type (most recently used) list of a maximum of 1000 opened ofstreams, 00052 (so that on each call to 'getFile(string fname)', the file 'fname' is moved to the top of the list.) 00053 If you try to open more than that, the least recently used file is closed beforehand 00054 00055 Typically, after contructing the object, user will only need to call getFile(...), and check errorMsg() 00056 when the function returns NULL. 00057 */ 00058 00059 class MRUFileList 00060 { 00061 public: 00062 00063 typedef list<pair<string,ofstream*> > list_typ; 00064 00065 MRUFileList(int _max_opened_files=1000, ios_base::openmode _mode = ios_base::out | ios_base::app); 00066 ~MRUFileList(); 00067 00068 ofstream * getFile(string fname); 00069 00070 string errorMsg(){return error;} 00071 void clearError(){error="";} 00072 00073 // return the cache miss percentage (the % of times the wanted file is not already opened) 00074 float misses(){return 100.0f * (float)tot_miss/(float)tot_access;} 00075 00076 protected: 00077 int max_opened_files; 00078 string error; 00079 list_typ mru_list; 00080 int tot_miss,tot_access; 00081 ios_base::openmode mode; 00082 }; 00083 00084 } // end of namespace PLearn 00085 #endif