JCAMPFile.h

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // $Id: JCAMPFile.h,v 1.20 2005/12/23 17:01:44 amoll Exp $
00005 //
00006 
00007 #ifndef BALL_FORMAT_JCAMPFILE_H
00008 #define BALL_FORMAT_JCAMPFILE_H
00009 
00010 #ifndef BALL_FORMAT_LINEBASEDFILE_H
00011 # include <BALL/FORMAT/lineBasedFile.h>
00012 #endif
00013 
00014 #ifndef BALL_DATATYPE_STRINGHASHMAP_H
00015 # include <BALL/DATATYPE/stringHashMap.h>
00016 #endif
00017 
00018 namespace BALL
00019 {
00030   class BALL_EXPORT JCAMPFile 
00031     : public LineBasedFile
00032   {
00033     public:
00034 
00038     // The value types supported by JCAMP
00039     enum ContentType
00040     {
00042       STRING,
00044       NUMERIC,
00046       ARRAY
00047     };
00048 
00050     class BALL_EXPORT JCAMPValue
00051     {
00052       public:
00054       String string_value;
00056       std::vector<double> numeric_value;
00058       ContentType type;
00059       
00060       JCAMPValue() : string_value(""), numeric_value(), type(STRING) {}
00061       
00062       bool operator == (const JCAMPValue& value) const
00063         ;
00064 
00065       bool operator != (const JCAMPValue& value) const
00066         ;
00067     };
00068 
00070     typedef std::pair<String, JCAMPValue> KeyValuePair;
00071 
00073     typedef StringHashMap<JCAMPValue> EntryMap;
00074 
00076     typedef StringHashMap<String> HeaderMap;
00077 
00079 
00082 
00084     JCAMPFile()  {}
00085 
00087     JCAMPFile(const String& name, OpenMode open_mode = std::ios::in)
00088       throw(Exception::FileNotFound);
00089 
00091     JCAMPFile(const JCAMPFile& file)
00092       throw(Exception::FileNotFound);
00093 
00095     virtual ~JCAMPFile()  {}
00096 
00098 
00101 
00103     void read() 
00104       throw(Exception::ParseError);
00105 
00107     bool write()
00108       throw(File::CannotWrite);
00109 
00111     HeaderMap& getHeader()  { return header_; }
00112 
00114     const HeaderMap& getHeader() const  { return header_; }
00115 
00117     EntryMap& getEntries()  { return entries_; }
00118 
00120     const EntryMap& getEntries() const  { return entries_; }
00121 
00123     const JCAMPValue& operator [] (const String& name) const { return entries_[name]; }
00124 
00126     double getDoubleValue(const String& name) const 
00127       throw(Exception::InvalidFormat);
00128     
00130     Index getIntValue(const String& name) const 
00131       throw(Exception::InvalidFormat);
00132 
00134     bool hasEntry(const String& name) const  { return entries_.has(name); }
00135 
00137     bool hasHeader(const String& name) const  { return header_.has(name); }
00138 
00140     const JCAMPFile& operator = (const JCAMPFile& file) ;
00141 
00143 
00146 
00149     bool operator == (const JCAMPFile& f)  const ;
00150 
00153     bool operator != (const JCAMPFile& f)  const ;
00155 
00156     
00157     protected:
00158 
00160     HeaderMap header_;
00161 
00163     EntryMap entries_;
00164   };
00165 }
00166 
00167 #endif // BALL_FORMAT_JCAMPFILE_H