00001 #include "UniqueID.h"
00002 #include "LogicErrors.h"
00003
00004 #include <sstream>
00005
00006 using namespace std;
00007 using namespace Sct;
00008
00009 namespace SctData {
00010
00011 UniqueID::UniqueID(){
00012 }
00013
00014 UniqueID& UniqueID::operator=(const UniqueID& other){
00015 runNumber=other.runNumber;
00016 scanNumber=other.scanNumber;
00017 module=other.module;
00018 nameAsString=other.nameAsString;
00019 return *this;
00020 }
00021
00022 bool UniqueID::operator==(const UniqueID& other) const{
00023 return (runNumber==other.runNumber &&
00024 scanNumber==other.scanNumber &&
00025 module==other.module &&
00026 nameAsString==other.nameAsString);
00027 }
00028
00029 bool UniqueID::operator!=(const UniqueID& other) const{
00030 return (!(*this==other));
00031 }
00032
00033
00034 UniqueID::UniqueID(string idAsString) : nameAsString(idAsString) {
00035 unsigned int dot = nameAsString.find('.');
00036 if (dot == nameAsString.npos) throw InvalidArgumentError("UniqueID can parse " + nameAsString + " - no run number", __FILE__, __LINE__);
00037 std::string temp = nameAsString.substr(0, dot);
00038 std::istringstream iss(temp);
00039 iss >> runNumber;
00040
00041 unsigned int dot2 = nameAsString.find('.', ++dot);
00042 if (dot2 == nameAsString.npos) throw InvalidArgumentError("UniqueID can parse " + nameAsString + " - no scan number", __FILE__, __LINE__);
00043 temp = nameAsString.substr(dot, dot2-dot);
00044 std::istringstream iss2(temp);
00045 iss2 >> scanNumber;
00046
00047 module = nameAsString.substr(++dot2);
00048 }
00049
00050 UniqueID::UniqueID(unsigned int runNumber, unsigned int scanNumber, string module)
00051 : runNumber(runNumber), scanNumber(scanNumber), module(module) {
00052 ostringstream oss;
00053 oss << runNumber << "." << scanNumber << "." << module;
00054 nameAsString = oss.str();
00055 }
00056
00057 UniqueID UniqueID::getUniqueID() const {
00058 return nameAsString;
00059 }
00060
00061
00062 UniqueID::operator string () const {
00063 return nameAsString;
00064 }
00065
00066 string UniqueID::getModule() const {
00067 return module;
00068 }
00069
00070 unsigned int UniqueID::getRunNumber() const {
00071 return runNumber;
00072 }
00073
00074 unsigned int UniqueID::getScanNumber() const {
00075 return scanNumber;
00076 }
00077
00078 }
00079
00080 std::ostream& operator<<(std::ostream& os, const Sct::UniqueID& id){
00081 os << (string)id;
00082 return os;
00083 }
00084
00085 std::istream& operator>>(std::istream& is, Sct::UniqueID& id){
00086 std::string parseMe;
00087 is >> parseMe;
00088 id=UniqueID(parseMe);
00089 return is;
00090 }
00091