Back to index

nordugrid-arc-nox  1.1.0~rc6
IString.cpp
Go to the documentation of this file.
00001 // -*- indent-tabs-mode: nil -*-
00002 
00003 #ifdef HAVE_CONFIG_H
00004 #include <config.h>
00005 #endif
00006 
00007 #ifdef ENABLE_NLS
00008 #include <libintl.h>
00009 #endif
00010 
00011 #include "IString.h"
00012 
00013 namespace Arc {
00014 
00015   PrintFBase::PrintFBase()
00016     : refcount(1) {}
00017 
00018   PrintFBase::~PrintFBase() {}
00019 
00020   void PrintFBase::Retain() {
00021     refcount++;
00022   }
00023 
00024   bool PrintFBase::Release() {
00025     refcount--;
00026     return (refcount == 0);
00027   }
00028 
00029   const char* FindTrans(const char *p) {
00030 #ifdef ENABLE_NLS
00031     return dgettext(PACKAGE,
00032                     p ? *p ? p : istring("(empty)") : istring("(null)"));
00033 #else
00034     return p ? *p ? p : "(empty)" : "(null)";
00035 #endif
00036   }
00037 
00038   const char* FindNTrans(const char *s, const char *p, unsigned long n) {
00039 #ifdef ENABLE_NLS
00040     return dngettext(PACKAGE,
00041                      s ? *s ? s : istring("(empty)") : istring("(null)"),
00042                      p ? *p ? p : istring("(empty)") : istring("(null)"), n);
00043 #else
00044     return n == 1 ?
00045       s ? *s ? s : "(empty)" : "(null)" :
00046       p ? *p ? p : "(empty)" : "(null)";
00047 #endif
00048   }
00049 
00050   IString::IString(const IString& istr)
00051     : p(istr.p) {
00052     p->Retain();
00053   }
00054 
00055   IString::~IString() {
00056     if (p->Release())
00057       delete p;
00058   }
00059 
00060   IString& IString::operator=(const IString& istr) {
00061     if (p->Release())
00062       delete p;
00063     p = istr.p;
00064     p->Retain();
00065     return *this;
00066   }
00067 
00068   std::ostream& operator<<(std::ostream& os, const IString& msg) {
00069     msg.p->msg(os);
00070     return os;
00071   }
00072 
00073 } // namespace Arc