PLearn 0.1
MRUFileList.h
Go to the documentation of this file.
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
00086 
00087 
00088 /*
00089   Local Variables:
00090   mode:c++
00091   c-basic-offset:4
00092   c-file-style:"stroustrup"
00093   c-file-offsets:((innamespace . 0)(inline-open . 0))
00094   indent-tabs-mode:nil
00095   fill-column:79
00096   End:
00097 */
00098 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=79 :
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines