FRIBParallelanalysis  1.0
FrameworkforMPIParalleldataanalysisatFRIB
TCLString.h
1 // CTCLString.h:
2 //
3 // This file defines the CTCLString class.
4 //
5 // Author:
6 // Ron Fox
7 // NSCL
8 // Michigan State University
9 // East Lansing, MI 48824-1321
10 // mailto:fox@nscl.msu.edu
11 //
12 // Copyright 1999 NSCL, All Rights Reserved.
13 //
15 
16 #ifndef TCLSTRING_H //Required for current class
17 #define TCLSTRING_H
18 
19 #ifndef TCLPLUSTYPES_H
20 #include <libtclplusdatatypes.h>
21 #endif
22 
23 
24 #include <tcl.h>
25 #include <string>
26 #include <string.h>
27 
28 class CTCLString
29 {
30  Tcl_DString m_String; // Dynamic string maintained by TCL allocation/free.
31 
32 public:
33  //Default constructor
34 
35  CTCLString () {
36  Tcl_DStringInit(&m_String);
37  }
38  ~ CTCLString () {
39  Tcl_DStringFree(&m_String);
40  } //Destructor
41 
42  //Constructors with arguments
43 
44  CTCLString (const char* pString )
45  {
46  Tcl_DStringInit(&m_String);
47  Tcl_DStringAppend(&m_String, pString, -1);
48  }
49  CTCLString(const std::string& rString) {
50  Tcl_DStringInit(&m_String);
51  Tcl_DStringAppend(&m_String, rString.c_str(), -1);
52  }
53  CTCLString(const Tcl_DString& rString) {
54  Tcl_DStringInit(&m_String);
55  Tcl_DStringAppend(&m_String, Tcl_DStringValue(&rString), -1);
56  }
57 
58  //Copy constructor
59 
60  CTCLString (const CTCLString& aCTCLString )
61  {
62  Tcl_DStringInit(&m_String); // So free operates correctly in doassign.
63  DoAssign(aCTCLString);
64  }
65 
66  //Operator= Assignment Operator
67 
68  CTCLString& operator= (const CTCLString& aCTCLString)
69  {
70  if (this == &aCTCLString) return *this;
71 
72  DoAssign(aCTCLString);
73  return *this;
74  }
75 
76  //Operator== Equality Operator
77 
78  int operator== (const CTCLString& aCTCLString)
79  {
80  return(strcmp(Tcl_DStringValue(&m_String),
81  Tcl_DStringValue(&aCTCLString.m_String)) == 0);
82  }
83  int operator!= (const CTCLString& aCTCLString) {
84  return !(operator==(aCTCLString));
85  }
86  int operator> (const CTCLString& aCTCLString) {
87  return(strcmp(Tcl_DStringValue(&m_String),
88  Tcl_DStringValue(&aCTCLString.m_String)) > 0);
89 
90  }
91  int operator< (const CTCLString& aCTCLString) {
92  return(strcmp(Tcl_DStringValue(&m_String),
93  Tcl_DStringValue(&aCTCLString.m_String)) < 0);
94 
95  }
96  int operator>=(const CTCLString& aCTCLString) {
97  return (operator>(aCTCLString) || operator==(aCTCLString));
98  }
99  int operator<=(const CTCLString& aCTCLString) {
100  return (operator<(aCTCLString) || operator==(aCTCLString));
101  }
102  // Selectors:
103 public:
104  //Get accessor function for attribute
105  Tcl_DString& getString()
106  {
107  return m_String;
108  }
109  // Mutators:
110  //
111  //Set accessor function for attribute
112  void setString (const Tcl_DString& am_String)
113  {
114  operator=(am_String);
115  }
116  // Operations:
117  //
118 public:
119  // Append subchunk of strings:
120  //
121  CTCLString& Append (const std::string& rString, TCLPLUS::Int_t nLength=-1) {
122  return Append(rString.c_str(), nLength);
123  }
124  CTCLString& Append (const CTCLString& rString, TCLPLUS::Int_t nLength=-1) {
125  return Append(Tcl_DStringValue(&rString.m_String), nLength);
126  }
127  CTCLString& Append (Tcl_DString& pString, TCLPLUS::Int_t nLength=-1) {
128  return Append(Tcl_DStringValue(&pString), nLength);
129  }
130  CTCLString& Append (const char* pString, TCLPLUS::Int_t nLength=-1);
131  //
132  // Append a list element to a string:
133  //
134  CTCLString& AppendElement (const Tcl_DString* pRhs) {
135  return AppendElement(Tcl_DStringValue(pRhs));
136  }
137  CTCLString& AppendElement (const CTCLString& rRhs) {
138  return AppendElement(Tcl_DStringValue(&rRhs.m_String));
139  }
140  CTCLString& AppendElement (const std::string& rRhs) {
141  return AppendElement(rRhs.c_str());
142  }
143  CTCLString& AppendElement (const char* pRhs);
144  CTCLString& AppendElement(TCLPLUS::DFloat_t value, const char* pFormat = "%f");
145  CTCLString& AppendElement(long value, const char* pFormat = "%i");
146  //
147  // List/sublist bracketing calls:
148  //
149  CTCLString& StartSublist () ;
150  CTCLString& EndSublist () ;
151  TCLPLUS::UInt_t Length () const ;
152  CTCLString& Truncate (TCLPLUS::UInt_t nNewLength) ;
153  TCLPLUS::Bool_t isCommand () const ;
154  //
155  // Match a substring in the string - using glob rules
156  //
157  TCLPLUS::Bool_t Match (const char* pPattern) const;
158  TCLPLUS::Bool_t Match (std::string& rPattern) const {
159  return Match(rPattern.c_str());
160  }
161  TCLPLUS::Bool_t Match (const CTCLString& rPattern) const {
162  return Match(Tcl_DStringValue(&rPattern.m_String));
163  }
164 
165  operator const char* () const {
166  return Tcl_DStringValue(&m_String);
167  }
168  operator std::string () const {
169  return std::string(Tcl_DStringValue(&m_String));
170  }
171  operator Tcl_DString* () {
172  return &m_String;
173  }
174  CTCLString& operator+= (const CTCLString& rRhs) {
175  return Append(rRhs);
176  }
177  CTCLString operator+ (const CTCLString& rRhs) ;
178 
179  // Protected utility functions:
180 
181 protected:
182  void DoAssign(const CTCLString& rRhs);
183 
184 };
185 
186 #endif
Definition: TCLString.h:28