Index: trunk/SophyaLib/BaseTools/pexceptions.h
===================================================================
--- trunk/SophyaLib/BaseTools/pexceptions.h	(revision 251)
+++ trunk/SophyaLib/BaseTools/pexceptions.h	(revision 256)
@@ -4,5 +4,4 @@
 
 #include "machdefs.h"
-//#include <exception>
 #include <string>
 
@@ -12,98 +11,127 @@
 
   // Ancestor for PError and PException
-  class PThrowable { // : public exception {
-	public:
-		explicit PThrowable(const string& m) : msg(m) {}
-                virtual ~PThrowable() { }
-		virtual string const& Msg() const  {return msg;}
-	private:
-		string msg;
+  // It has a message, and an id to give more
+  // information on the exception.
+  class PThrowable {
+  public:
+    explicit PThrowable(const string& m, int ident=0) 
+      : msg(m), id(ident) {}
+    virtual ~PThrowable() { }
+    virtual string const& Msg() const  {return msg;}
+  private:
+    string msg;
+    int    id;
   };
-
+  
   // A PError is a serious logic error. Usually not caught...
   class PError : public PThrowable {
-	public:
-        explicit PError(const string& m) : PThrowable(m) {}
+  public:
+    explicit PError(const string& m, int id=0) : PThrowable(m,id) {}
   };
   
   // A PException is not as serious... Can be caught.
   class PException : public PThrowable {
-	public:
-        explicit PException(const string& m) : PThrowable(m) {}
+  public:
+    explicit PException(const string& m, int id=0) : PThrowable(m,id) {}
+  };
+  
+  // Errors
+  // Memory allocation failure
+  class AllocationError : public PError {
+  public:
+    explicit AllocationError(const string& m, int id=0) : PError(m,id) {}
+  };
+  
+  // Null pointer error
+  class NullPtrError : public PError {
+  public:
+    explicit NullPtrError(const string& m, int id=0) : PError(m,id) {}
+  };
+  
+  // Size mismatch between objects
+  class SzMismatchError : public PError {
+  public:
+    explicit SzMismatchError(const string& m, int id=0) : PError(m,id) {}
+  };
+  
+  // Out of bounds for array, matrix, etc.
+  class RangeCheckError : public PError {
+  public:
+    explicit RangeCheckError(const string& m, int id=0) : PError(m,id) {}
+  };
+  
+  // Invalid parameter to method/constructor...
+  class ParmError : public PError {
+  public:
+    explicit ParmError(const string& m, int id=0) : PError(m,id) {}
+  };
+  
+  // Calling a forbidden method, trying a forbidden operation
+  class ForbiddenError : public PError {
+  public:
+    explicit ForbiddenError(const string& m, int id=0) : PError(m,id) {}
+  };
+  
+  // ASSERT macro failure. The message is the assertion...
+  class AssertionFailedError : public PError {
+  public:
+    explicit AssertionFailedError(const string& m, int id=0) : PError(m,id) {}
+  };
+  
+  // Standard exceptions
+  //
+  // PException
+  //   IOExc
+  //     FileFormatExc
+  //   TypeMismatchExc
+  //   DuplicateIdExc
+  //   NotFoundExc
+  //   MathExc
+  //     SingMatxExc
+  
+  // generic IO Exception
+  class IOExc : public PException {
+  public:
+    explicit IOExc(const string& m, int id=0) : PException(m,id) {}
   };
 
-  // Errors
-  class AllocationError : public PError {
-    public:
-        explicit AllocationError(const string& m) : PError(m) {}
+  // Bad type -> keep ?
+  class TypeMismatchExc : public PException {
+  public:
+    explicit TypeMismatchExc(const string& m, int id=0) : PException(m,id) {}
   };
   
-  class NullPtrError : public PError {
-    public:
-        explicit NullPtrError(const string& m) : PError(m) {}
+  class MathExc : public PException {
+  public:
+    explicit MathExc(const string& m, int id=0) : PException(m,id) {}
+  };
+  
+  class DuplicateIdExc : public PException {
+  public:
+    explicit DuplicateIdExc(const string& m, int id=0) : PException(m,id) {}
+  };
+  
+  class NotFoundExc : public PException {
+  public:
+    explicit NotFoundExc(const string& m, int id=0) : PException(m,id) {}
+  };
+  
+  class CaughtSignalExc : public PException {
+  public:
+    explicit CaughtSignalExc(const string& m, int id=0) : PException(m,id) {}
   };
 
-  class SzMismatchError : public PError {
-    public:
-        explicit SzMismatchError(const string& m) : PError(m) {}
-  };
-
-  class RangeCheckError : public PError {
-    public:
-        explicit RangeCheckError(const string& m) : PError(m) {}
-  };
-
-  class ParmError : public PError {
-    public:
-        explicit ParmError(const string& m) : PError(m) {}
-  };
-
-  class ForbiddenError : public PError {
-    public:
-        explicit ForbiddenError(const string& m) : PError(m) {}
-  };
-
-  class AssertionFailedError : public PError {
-    public:
-        explicit AssertionFailedError(const string& m) : PError(m) {}
-  };
-
-  // Standard exceptions
-  class TypeMismatchExc : public PException {
-    public:
-        explicit TypeMismatchExc(const string& m) : PException(m) {}
-  };
-
-  class FileExc : public PException {
-    public:
-        explicit FileExc(const string& m) : PException(m) {}
-  };
-
-  class FileFormatExc : public PException {
-    public:
-        explicit FileFormatExc(const string& m) : PException(m) {}
-  };
-
-  class DuplicateIdExc : public PException {
-    public:
-        explicit DuplicateIdExc(const string& m) : PException(m) {}
-  };
-
-  class NotFoundExc : public PException {
-    public:
-        explicit NotFoundExc(const string& m) : PException(m) {}
-  };
-
-  class CaughtSignalExc : public PException {
-    public:
-        explicit CaughtSignalExc(const string& m) : PException(m) {}
+  // Bad file format
+  class FileFormatExc : public IOExc {
+  public:
+    explicit FileFormatExc(const string& m, int id=0) : IOExc(m,id) {}
   };
   
-  class SingMatrixExc : public PException {
-    public:
-        explicit SingMatrixExc(const string& m) : PException(m) {}
+  class SingMatrixExc : public MathExc {
+  public:
+    explicit SingMatrixExc(const string& m, int id=0) : MathExc(m,id) {}
   };
   
-
+  
 }
 
@@ -149,5 +177,5 @@
 #define inconsistentErr  ParmError("")
 #define sizeMismatchErr  SzMismatchError("")
-#define fileErr          FileExc("")
+#define fileErr          IOExc("")
 #define nullPtrErr       NullPtrError("")
 #define singMatxErr      SingMatrixExc("")
