added operator==(const char *)
[dyninst.git] / common / h / String.h
1 /************************************************************************
2  * String.h: a simple character string class.
3 ************************************************************************/
4
5 #if !defined(_String_h_)
6 #define _String_h_
7
8
9 /************************************************************************
10  * header files.
11 ************************************************************************/
12
13 #include <iostream.h>
14 #include "util/h/headers.h"
15
16 \f
17 /************************************************************************
18  * class string
19 ************************************************************************/
20
21 class string {
22 public:
23      string ();
24      string (const char *);
25      string (const string &);
26      string (int);      // convert int to its string representation
27      string (unsigned); // convert unsigned to its string representation
28      string (float);    // convert float to its string representation
29      string (double);   // convert double to its string representation
30     ~string ();
31
32     string& operator= (const char *);
33     string& operator= (const string &);
34     string& operator+= (const string &);
35     string  operator+ (const string &) const;
36
37     bool operator== (const string &) const;
38     bool operator== (const char *ptr) const {
39        // we have this routine as a time-saver
40        return STREQ(ptr, str_);
41     }
42     bool operator!= (const string &) const;
43     bool operator<  (const string &s) const {return STRLT(str_, s.str_);}
44     bool operator<= (const string &) const;
45     bool operator>  (const string &s) const {return STRGT(str_, s.str_);}
46     bool operator>= (const string &) const;
47
48     bool prefix_of (const char *, unsigned) const;
49     bool prefix_of (const char *s)          const {return prefix_of(s, STRLEN(s));};
50     bool prefix_of (const string &)         const;
51
52     bool prefixed_by (const char *, unsigned) const;
53     bool prefixed_by (const char *s)          const {return prefixed_by(s, STRLEN(s));};
54     bool prefixed_by (const string &)         const;
55
56     const char*   string_of () const {return str_;}
57     unsigned         length () const {return len_;}
58
59     friend ostream& operator<< (ostream &os, const string &s);
60
61     static unsigned       hash (const string &s) {return s.key_;}
62
63     static string quote;
64
65 private:
66     static unsigned      hashs (const char *);
67
68     static unsigned     STRLEN (const char *);
69     static char*        STRDUP (const char *);
70
71     static bool          STREQ (const char *, const char *);
72     static bool         STREQN (const char *, const char *, unsigned);
73     static bool          STRNE (const char *, const char *);
74     static bool          STRLT (const char *, const char *);
75     static bool          STRLE (const char *, const char *);
76     static bool          STRGT (const char *, const char *);
77     static bool          STRGE (const char *, const char *);
78
79     char*    str_;
80     unsigned len_;
81     unsigned key_;
82 };
83
84 #endif /* !defined(_String_h_) */