const, baby
[asdcplib.git] / src / KM_error.h
index 612a92c7dc5452540574025a682701052123c8cd..8c2f5fceb611e0584cdd99feb7df73be7de0f951 100755 (executable)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2004-2006, John Hurst
+Copyright (c) 2004-2009, John Hurst
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -43,21 +43,26 @@ namespace Kumu
 
   class Result_t
     {
-      long value;
+      int value;
       const char* label;
       Result_t();
 
     public:
-      Result_t(long v, const char* l) : value(v), label(l) {}
+      static const Result_t& Find(int);
+      static Result_t Delete(int);
+
+      Result_t(int v, const char* l);
+      ~Result_t();
+
       inline bool        operator==(const Result_t& rhs) const { return value == rhs.value; }
       inline bool        operator!=(const Result_t& rhs) const { return value != rhs.value; }
-      inline bool        Success() { return ( value >= 0 ); }
-      inline bool        Failure() { return ( value < 0 ); }
+      inline bool        Success() const { return ( value >= 0 ); }
+      inline bool        Failure() const { return ( value < 0 ); }
 
-      inline long        Value() { return value; }
-      inline operator    long() const { return value; }
+      inline int         Value() const { return value; }
+      inline operator    int() const { return value; }
 
-      inline const char* Label() { return label; }
+      inline const char* Label() const { return label; }
       inline operator    const char*() const { return label; }
     };
 
@@ -82,6 +87,10 @@ namespace Kumu
   const Result_t RESULT_ENDOFFILE  (-17,  "Attempt to read past end of file.");
   const Result_t RESULT_FILEEXISTS (-18,  "Filename already exists.");
   const Result_t RESULT_NOTAFILE   (-19,  "Filename not found.");
+  const Result_t RESULT_UNKNOWN    (-20,  "Unknown result code.");
+  const Result_t RESULT_DIR_CREATE (-21,  "Unable to create directory.");
+  // -22 is reserved
 } // namespace Kumu
 
 //--------------------------------------------------------------------------------
@@ -110,6 +119,35 @@ namespace Kumu
     return Kumu::RESULT_NULL_STR; \
   }
 
+namespace Kumu
+{
+  // simple tracing mechanism
+  class DTrace_t
+  {
+    DTrace_t();
+    
+  protected:
+    const char* m_Label;
+    Result_t*   m_Watch;
+    int         m_Line;
+    const char* m_File;
+    int         m_Sequence;
+
+  public:
+    DTrace_t(const char* Label, Result_t* Watch, int Line, const char* File);
+    ~DTrace_t();
+  };
+}
+
+#ifdef KM_TRACE
+#define WDTRACE(l) DTrace_t __wl__Trace__((l), 0, __LINE__, __FILE__)
+#define WDTRACER(l,r) DTrace_t __wl__Trace__((l), &(r), __LINE__, __FILE__)
+#else
+#define WDTRACE(l)
+#define WDTRACER(l,r)
+#endif
+
+
 #endif // _KM_ERROR_H_
 
 //