Index: /trunk/FACT++/src/EventImp.h
===================================================================
--- /trunk/FACT++/src/EventImp.h	(revision 10880)
+++ /trunk/FACT++/src/EventImp.h	(revision 10881)
@@ -60,23 +60,36 @@
     virtual Time GetTime() const { return Time::None; }
 
+    // Generalized access operators
+    template<typename T>
+        T Get(int offset=0) const
+    {
+        if (offset>=GetSize())
+            throw std::logic_error("EventImp::Get - offset out of range.");
+        return *reinterpret_cast<const T*>(GetText()+offset);
+    }
+
+    template<typename T>
+        const T *Ptr(int offset=0) const
+    {
+        if (offset>=GetSize())
+            throw std::logic_error("EventImp::Ptr - offset out of range.");
+        return reinterpret_cast<const T*>(GetText()+offset);
+    }
+
     // Getter for all the data contained (name, format, data and time)
-    bool              GetBool() const   { return GetText()[0]!=0; }
-    short             GetShort()  const { return *reinterpret_cast<const short*>(GetData()); }
-    unsigned short    GetUShort() const { return *reinterpret_cast<const unsigned short*>(GetData()); }
-    int               GetInt() const    { return *reinterpret_cast<const int*>(GetData()); }
-    unsigned int      GetUInt() const   { return *reinterpret_cast<const unsigned int*>(GetData()); }
-    float             GetFloat() const  { return *reinterpret_cast<const float*>(GetData()); }
-    double            GetDouble() const { return *reinterpret_cast<const double*>(GetData()); }
-    const char       *GetText() const   { return  reinterpret_cast<const char*>(GetData()); }
+    const char *GetText() const { return reinterpret_cast<const char*>(GetData()); }
+
+    bool     GetBool() const   { return Get<uint8_t>()!=0; }
+    int16_t  GetShort() const  { return Get<int16_t>();    }
+    uint16_t GetUShort() const { return Get<uint16_t>();   }
+    int32_t  GetInt() const    { return Get<int32_t>();    }
+    uint32_t GetUInt() const   { return Get<uint32_t>();   }
+    int64_t  GetXtra() const   { return Get<int64_t>();    }
+    uint64_t GetUXtra() const  { return Get<int64_t>();    }
+    float    GetFloat() const  { return Get<float>();      }
+    double   GetDouble() const { return Get<double>();     }
+
     std::vector<char> GetVector() const { return std::vector<char>(GetText(), GetText()+GetSize()); }
     std::string       GetString() const;
-
-    // FIXME: Do we need a range check?
-
-    template<typename T>
-        T Get(int offset=0) const { return *reinterpret_cast<const T*>(GetText()+offset); }
-
-    template<typename T>
-        T *Ptr(int offset=0) const { return *reinterpret_cast<const T*>(GetText()+offset); }
 };
 
