Split string class into a .h and .C component; strings can now
[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 <stdio.h> // FILE *
14 #include <iostream.h>
15 #include "util/h/headers.h"
16
17 \f
18 /************************************************************************
19  * class string
20 ************************************************************************/
21
22 class string {
23 public:
24      string ();
25      string (const char *);
26      string (const string &);
27      string (int);      // convert int to its string representation
28      string (unsigned); // convert unsigned to its string representation
29      string (float);    // convert float to its string representation
30      string (FILE *);   // load from a binary file
31     ~string ();
32
33     int save(FILE *outfile) const; // complement of string(FILE *)
34
35     string& operator= (const char *);
36     string& operator= (const string &);
37     string& operator+= (const string &);
38     string  operator+ (const string &) const;
39
40     bool operator== (const string &) const;
41     bool operator!= (const string &) const;
42     bool operator<  (const string &s) const {return STRLT(str_, s.str_);}
43     bool operator<= (const string &) const;
44     bool operator>  (const string &s) const {return STRGT(str_, s.str_);}
45     bool operator>= (const string &) const;
46
47     bool prefix_of (const char *, unsigned) const;
48     bool prefix_of (const char *s)          const {return prefix_of(s, STRLEN(s));};
49     bool prefix_of (const string &)         const;
50
51     bool prefixed_by (const char *, unsigned) const;
52     bool prefixed_by (const char *s)          const {return prefixed_by(s, STRLEN(s));};
53     bool prefixed_by (const string &)         const;
54
55     const char*   string_of () const {return str_;}
56     unsigned         length () const {return len_;}
57
58     friend ostream& operator<< (ostream &os, const string &s);
59
60     static unsigned       hash (const string &s) {return s.key_;}
61
62     static string quote;
63
64 private:
65     static unsigned      hashs (const char *);
66
67     static unsigned     STRLEN (const char *);
68     static char*        STRDUP (const char *);
69
70     static bool          STREQ (const char *, const char *);
71     static bool         STREQN (const char *, const char *, unsigned);
72     static bool          STRNE (const char *, const char *);
73     static bool          STRLT (const char *, const char *);
74     static bool          STRLE (const char *, const char *);
75     static bool          STRGT (const char *, const char *);
76     static bool          STRGE (const char *, const char *);
77
78     char*    str_;
79     unsigned len_;
80     unsigned key_;
81 };
82
83 #endif /* !defined(_String_h_) */