Back to index

nordugrid-arc-nox  1.1.0~rc6
MessageAttributes.cpp
Go to the documentation of this file.
00001 #ifdef HAVE_CONFIG_H
00002 #include <config.h>
00003 #endif
00004 
00005 // MessageAttributes.h
00006 
00007 #include "MessageAttributes.h"
00008 
00009 namespace Arc {
00010 
00011   AttributeIterator::AttributeIterator(){
00012   }
00013 
00014   AttributeIterator::AttributeIterator(AttrConstIter begin,
00015                                    AttrConstIter end) :
00016     current_(begin), end_(end) {
00017   }
00018   
00019   const std::string& AttributeIterator::operator*() const {
00020     return current_->second;
00021   }
00022 
00023   const std::string* AttributeIterator::operator->() const {
00024     return &(current_->second);
00025   }
00026 
00027   const std::string& AttributeIterator::key(void) const {
00028     return current_->first;
00029   }
00030 
00031   const AttributeIterator& AttributeIterator::operator++() {
00032     ++current_;
00033     return *this;
00034   }
00035 
00036   AttributeIterator AttributeIterator::operator++(int) {
00037     AttrConstIter recent=current_++;
00038     return AttributeIterator(recent,end_);
00039   }
00040 
00041   bool AttributeIterator::hasMore() const {
00042     return current_!=end_;
00043   }
00044 
00045   MessageAttributes::MessageAttributes() {
00046   }
00047 
00048   void MessageAttributes::set(const std::string& key,
00049                            const std::string& value) {
00050     removeAll(key);
00051     add(key, value);
00052   }
00053 
00054   void MessageAttributes::add(const std::string& key,
00055                            const std::string& value) {
00056     attributes_.insert(make_pair(key, value));
00057   }
00058 
00059   void MessageAttributes::removeAll(const std::string& key) {
00060     attributes_.erase(key);
00061   }
00062 
00063   void MessageAttributes::remove(const std::string& key,
00064                              const std::string& value) {
00065     AttrIter begin = attributes_.lower_bound(key);
00066     AttrIter end   = attributes_.upper_bound(key);
00067     for (AttrIter i=begin; i!=end; i++)
00068       if (i->second==value)
00069        attributes_.erase(i);
00070   }
00071 
00072   int MessageAttributes::count(const std::string& key) const {
00073     return attributes_.count(key);
00074   }
00075 
00076   const std::string& MessageAttributes::get(const std::string& key) const {
00077     static std::string emptyString="";
00078     if (count(key)==1)
00079       return attributes_.find(key)->second;
00080     else
00081       return emptyString; // Throw an exception?
00082   }
00083 
00084   AttributeIterator MessageAttributes::getAll(const std::string& key) const {
00085     return AttributeIterator(attributes_.lower_bound(key),
00086                           attributes_.upper_bound(key));
00087   }
00088 
00089   AttributeIterator MessageAttributes::getAll(void) const {
00090     return AttributeIterator(attributes_.begin(),
00091                           attributes_.end());
00092   }
00093 
00094 }