diff liboctave/file-ops.h @ 8007:a2ab20ba78f7

make file_ops a proper singleton class
author John W. Eaton <jwe@octave.org>
date Mon, 04 Aug 2008 23:44:50 -0400
parents 05ee52d7fad6
children d936b21b3a6b
line wrap: on
line diff
--- a/liboctave/file-ops.h
+++ b/liboctave/file-ops.h
@@ -35,6 +35,12 @@
 OCTAVE_API
 file_ops
 {
+protected:
+
+  file_ops (void);
+
+public:
+
   static int mkdir (const std::string&, mode_t);
   static int mkdir (const std::string&, mode_t, std::string&);
 
@@ -84,13 +90,46 @@
   static int unlink (const std::string&);
   static int unlink (const std::string&, std::string&);
 
-  static bool is_dir_sep (char);
+  static bool is_dir_sep (char c)
+  {
+    return instance_ok () ? instance->do_is_dir_sep (c) : false;
+  }
 
   static std::string concat (const std::string&, const std::string&);
 
-  static char dir_sep_char;
-  static std::string dir_sep_str;
-  static std::string dir_sep_chars;
+  static char dir_sep_char (void)
+  {
+    return instance_ok () ? instance->xdir_sep_char : 0;
+  }
+
+  static std::string dir_sep_str (void)
+  {
+    return instance_ok () ? instance->xdir_sep_str : std::string ();
+  }
+
+  static std::string dir_sep_chars (void)
+  {
+    return instance_ok () ? instance->xdir_sep_chars : std::string ();
+  }
+
+private:
+
+  // No copying!
+
+  file_ops (const file_ops&);
+
+  file_ops& operator = (const file_ops&);
+
+  // The real thing.
+  static file_ops *instance;
+
+  static bool instance_ok (void);
+
+  char xdir_sep_char;
+  std::string xdir_sep_str;
+  std::string xdir_sep_chars;
+
+  bool do_is_dir_sep (char c) { return xdir_sep_chars.find (c) != NPOS; }
 };
 
 #endif