home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DRWIN101.ZIP / STRING.HPP < prev    next >
C/C++ Source or Header  |  1991-11-08  |  4KB  |  116 lines

  1. #ifndef __STRING_HPP
  2. #define __STRING_HPP
  3.  
  4. #include <iostream.h>
  5. #include <string.h>
  6.  
  7.  
  8. class String {
  9. protected:
  10. #define STRING_MAX_SIZE    0x80
  11.   static char scrap;
  12.   char endchar;
  13.   char* str;
  14.   int len;
  15.   int size;
  16.   unsigned char flags;
  17. public:
  18.   enum
  19.   {
  20.     clip   = 0x01,                     //clip if doesn't fit in ostream width
  21.   };
  22.  
  23.   String(int _size=STRING_MAX_SIZE,char* s=NULL);
  24.   String(char* s);
  25.   ~String();
  26.   int operator ! (void) { return len; }
  27.   char* S (void) { return (char*) str; }
  28.   int Size(void) { return size; }
  29.   int Length(void) { return len; }
  30.   int Length(int l);
  31.   char End(void) { return endchar; }
  32.   char End(char end) { char c = endchar; endchar = end; return c; }
  33.   unsigned char Flags(void) { return flags; }
  34.   unsigned char Flags(unsigned char _flags, unsigned char which_flags = 0xFF)
  35.   {
  36.     unsigned char old = flags;
  37.     flags &= ~which_flags;
  38.     flags |= (_flags & which_flags);
  39.     return old;
  40.   }
  41.  
  42.   int Upper(void) { strupr(str); return len; }
  43.   int Lower(void) { strlwr(str); return len; }
  44.   String& Sub(int first,int length = 0x4000);      //substring
  45.  
  46.   String& operator -- (void)
  47.   {
  48.     if (len > 0) len--;
  49.     str[len] = 0;
  50.     return *this;
  51.   }
  52.   String& operator ++ (void)
  53.   {
  54.     if (len < (size-1)) str[len++] = ' ';
  55.     str[len] = 0;
  56.     return *this;
  57.   }
  58.   char& operator [] (int i);
  59.   void operator  = (String& s);
  60.   void operator  = (char* s);
  61.   void operator  = (char c);
  62.   String& operator + (String& s);
  63.   String& operator + (char* s);
  64.   String& operator + (char c);
  65.   void operator += (String& s) { *this = (*this+s); }
  66.   void operator += (char* s)   { *this = (*this+s); }
  67.   void operator += (char c)    { *this = (*this+c); }
  68.  
  69.   int operator <  (String& s) { return strcmp(str,s.str) <  0; }
  70.   int operator == (String& s) { return strcmp(str,s.str) == 0; }
  71.   int operator >  (String& s) { return strcmp(str,s.str) >  0; }
  72.   int operator >= (String& s) { return strcmp(str,s.str) >= 0; }
  73.   int operator != (String& s) { return strcmp(str,s.str) != 0; }
  74.   int operator <= (String& s) { return strcmp(str,s.str) <= 0; }
  75.  
  76.   int operator <= (char* s)   { return strcmp(str,s)     <= 0; }
  77.   int operator <  (char* s)   { return strcmp(str,s)     <  0; }
  78.   int operator == (char* s)   { return strcmp(str,s)     == 0; }
  79.   int operator >  (char* s)   { return strcmp(str,s)     >  0; }
  80.   int operator >= (char* s)   { return strcmp(str,s)     >= 0; }
  81.   int operator != (char* s)   { return strcmp(str,s)     != 0; }
  82.  
  83.   friend int operator <  (char* s,String& st) { return strcmp(s,st.str) <0; }
  84.   friend int operator == (char* s,String& st) { return strcmp(s,st.str)==0; }
  85.   friend int operator >  (char* s,String& st) { return strcmp(s,st.str) >0; }
  86.   friend int operator >= (char* s,String& st) { return strcmp(s,st.str)>=0; }
  87.   friend int operator != (char* s,String& st) { return strcmp(s,st.str)!=0; }
  88.   friend int operator <= (char* s,String& st) { return strcmp(s,st.str)<=0; }
  89.  
  90.   friend ostream& operator << (ostream& o,String& s);
  91.   friend String&  operator >> (istream& i,String& s);
  92. };   //class String
  93.  
  94.  
  95. inline char& String::operator [] (int i)
  96. {
  97.   if ((i < 0) || (i > len)) return scrap;
  98.   return str[i];
  99. }   //String::operator [](int)
  100.  
  101.  
  102. inline int String::Length(int l)
  103. {
  104.   int old = len;
  105.   if (l < 0)
  106.     len = 0;
  107.   else if (l < size)
  108.     len = l;
  109.   str[len] = 0;
  110.   return old;
  111. }   //String::Length(int l)
  112.  
  113.  
  114. #endif
  115.  
  116.