fileutil.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:7k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: fileutil.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:36:07  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.14
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef FILEUTIL_HPP
  10. #define FILEUTIL_HPP
  11. /*  $Id: fileutil.hpp,v 1000.0 2003/10/29 17:36:07 gouriano Exp $
  12. * ===========================================================================
  13. *
  14. *                            PUBLIC DOMAIN NOTICE
  15. *               National Center for Biotechnology Information
  16. *
  17. *  This software/database is a "United States Government Work" under the
  18. *  terms of the United States Copyright Act.  It was written as part of
  19. *  the author's official duties as a United States Government employee and
  20. *  thus cannot be copyrighted.  This software/database is freely available
  21. *  to the public for use. The National Library of Medicine and the U.S.
  22. *  Government have not placed any restriction on its use or reproduction.
  23. *
  24. *  Although all reasonable efforts have been taken to ensure the accuracy
  25. *  and reliability of the software and data, the NLM and the U.S.
  26. *  Government do not and cannot warrant the performance or results that
  27. *  may be obtained by using this software or data. The NLM and the U.S.
  28. *  Government disclaim all warranties, express or implied, including
  29. *  warranties of performance, merchantability or fitness for any particular
  30. *  purpose.
  31. *
  32. *  Please cite the author in any work or product based on this material.
  33. *
  34. * ===========================================================================
  35. *
  36. * Author: Eugene Vasilchenko
  37. *
  38. * File Description:
  39. *   Several file utility functions/classes.
  40. */
  41. #include <corelib/ncbistd.hpp>
  42. #include <serial/serialdef.hpp>
  43. #include <memory>
  44. BEGIN_NCBI_SCOPE
  45. static const size_t MAX_FILE_NAME_LENGTH = 31;
  46. class SourceFile
  47. {
  48. public:
  49.     SourceFile(const string& name, bool binary = false);
  50.     SourceFile(const string& name, const list<string>& dirs,
  51.                bool binary = false);
  52.     ~SourceFile(void);
  53.     operator CNcbiIstream&(void) const
  54.         {
  55.             return *m_StreamPtr;
  56.         }
  57.     enum EType {
  58.         eUnknown,  // Unknown type
  59.         eASN,      // ASN file
  60.         eDTD       // DTD file
  61.     };
  62.     EType GetType(void) const;
  63. private:
  64.     string m_Name;
  65.     CNcbiIstream* m_StreamPtr;
  66.     bool m_Open;
  67.     bool x_Open(const string& name, bool binary);
  68. };
  69. class DestinationFile
  70. {
  71. public:
  72.     DestinationFile(const string& name, bool binary = false);
  73.     ~DestinationFile(void);
  74.     operator CNcbiOstream&(void) const
  75.         {
  76.             return *m_StreamPtr;
  77.         }
  78. private:
  79.     CNcbiOstream* m_StreamPtr;
  80.     bool m_Open;
  81. };
  82. struct FileInfo {
  83.     FileInfo(void)
  84.         : type(ESerialDataFormat(eSerial_None))
  85.         { }
  86.     FileInfo(const string& n, ESerialDataFormat t)
  87.         : name(n), type(t)
  88.         { }
  89.     operator bool(void) const
  90.         { return !name.empty(); }
  91.     operator const string&(void) const
  92.         { return name; }
  93.     string name;
  94.     ESerialDataFormat type;
  95. };
  96. class CDelayedOfstream : public CNcbiOstrstream
  97. {
  98. public:
  99.     CDelayedOfstream(const string& fileName);
  100.     virtual ~CDelayedOfstream(void);
  101.     bool is_open(void) const
  102.         {
  103.             return !m_FileName.empty();
  104.         }
  105.     void open(const string& fileName);
  106.     void close(void);
  107. protected:
  108.     bool equals(void);
  109.     bool rewrite(void);
  110. private:
  111.     string m_FileName;
  112.     auto_ptr<CNcbiIfstream> m_Istream;
  113.     auto_ptr<CNcbiOfstream> m_Ostream;
  114. };
  115. // return combined dir and name, inserting if needed '/'
  116. string Path(const string& dir, const string& name);
  117. // file name will be valid after adding at most addLength symbols
  118. string MakeFileName(const string& s, size_t addLength = 0);
  119. // return base name of file i.e. without dir and extension
  120. string BaseName(const string& path);
  121. // return dir name of file
  122. string DirName(const string& path);
  123. bool IsLocalPath(const string& path);
  124. // Convert system-dependent path to the standard path
  125. // ('' ==> '/', ':' ==> '/', etc.)
  126. string GetStdPath(const string& path);
  127. END_NCBI_SCOPE
  128. /*
  129. * ===========================================================================
  130. *
  131. * $Log: fileutil.hpp,v $
  132. * Revision 1000.0  2003/10/29 17:36:07  gouriano
  133. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.14
  134. *
  135. * Revision 1.14  2002/10/15 13:52:09  gouriano
  136. * added "GetType" method - module file type by extension
  137. *
  138. * Revision 1.13  2002/08/06 17:03:48  ucko
  139. * Let -opm take a comma-delimited list; move relevant CVS logs to end.
  140. *
  141. * Revision 1.12  2001/08/31 20:05:43  ucko
  142. * Fix ICC build.
  143. *
  144. * Revision 1.11  2001/08/15 19:16:10  juran
  145. * Add GetStdPath() prototype.
  146. *
  147. * Revision 1.10  2001/05/17 15:00:42  lavr
  148. * Typos corrected
  149. *
  150. * Revision 1.9  2001/02/02 16:19:55  vasilche
  151. * Fixed file path processing on Mac
  152. *
  153. * Revision 1.8  2000/11/29 17:42:30  vasilche
  154. * Added CComment class for storing/printing ASN.1/XML module comments.
  155. * Added srcutil.hpp file to reduce file dependency.
  156. *
  157. * Revision 1.7  2000/11/15 20:34:43  vasilche
  158. * Added user comments to ENUMERATED types.
  159. * Added storing of user comments to ASN.1 module definition.
  160. *
  161. * Revision 1.6  2000/11/14 21:41:13  vasilche
  162. * Added preserving of ASN.1 definition comments.
  163. *
  164. * Revision 1.5  2000/04/28 16:58:08  vasilche
  165. * Added classes CByteSource and CByteSourceReader for generic reading.
  166. * Added delayed reading of choice variants.
  167. *
  168. * Revision 1.4  2000/04/13 14:50:22  vasilche
  169. * Added CObjectIStream::Open() and CObjectOStream::Open() for easier use.
  170. *
  171. * Revision 1.3  2000/04/07 19:26:09  vasilche
  172. * Added namespace support to datatool.
  173. * By default with argument -oR datatool will generate objects in namespace
  174. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  175. * Datatool's classes also moved to NCBI namespace.
  176. *
  177. * Revision 1.2  2000/03/29 15:51:42  vasilche
  178. * Generated files names limited to 31 symbols due to limitations of Mac.
  179. *
  180. * Revision 1.1  2000/02/01 21:46:18  vasilche
  181. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  182. * Removed CMemberInfo subclasses.
  183. * Added support for DEFAULT/OPTIONAL members.
  184. * Changed class generation.
  185. * Moved datatool headers to include/internal/serial/tool.
  186. *
  187. * Revision 1.5  1999/12/30 21:33:39  vasilche
  188. * Changed arguments - more structured.
  189. * Added intelligence in detection of source directories.
  190. *
  191. * Revision 1.4  1999/12/28 18:55:57  vasilche
  192. * Reduced size of compiled object files:
  193. * 1. avoid inline or implicit virtual methods (especially destructors).
  194. * 2. avoid std::string's methods usage in inline methods.
  195. * 3. avoid string literals ("xxx") in inline methods.
  196. *
  197. * Revision 1.3  1999/12/21 17:44:19  vasilche
  198. * Fixed compilation on SunPro C++
  199. *
  200. * Revision 1.2  1999/12/21 17:18:34  vasilche
  201. * Added CDelayedFostream class which rewrites file only if contents is changed.
  202. *
  203. * Revision 1.1  1999/12/20 21:00:18  vasilche
  204. * Added generation of sources in different directories.
  205. *
  206. * ===========================================================================
  207. */
  208. #endif