9 /** @brief Minimal string class with std::string like behaviour that fulfills the JavaCC
10 * string requirements.
20 VhdlString(const VhdlString &other)
22 m_str = (char*)malloc(other.m_len+1);
23 memcpy(m_str,other.m_str,other.m_len);
27 VhdlString &operator=(const VhdlString &other)
32 m_str = (char*)malloc(other.m_len+1);
33 memcpy(m_str,other.m_str,other.m_len);
39 VhdlString(const char *s)
42 m_str=(char*)malloc(m_len+1);
43 memcpy(m_str,s,m_len+1);
45 VhdlString(const char *s,int size)
47 m_str = (char*)malloc(size+1);
56 VhdlString& append(const char *s,int size)
62 m_str = (char*)realloc(m_str,m_len);
63 memcpy(m_str+oldlen,s,m_len-oldlen-1);
68 VhdlString& append(const char *s)
70 return append(s,strlen(s));
72 VhdlString& append(const VhdlString &other)
74 return append(other.m_str,other.m_len);
76 VhdlString substr(int pos=0,int len=-1)
78 return VhdlString(m_str?m_str+pos:0,len==-1?m_len-pos:m_len);
80 int copy(char *s,int len,int pos=0) const
83 if (pos>=m_len) { s[0]=0; return 0; }
84 int r=m_len<pos+len ? m_len-pos : len;
85 memcpy(s,m_str+pos,r);
88 const char *c_str() const { return m_str; }
89 const char *data() const { return m_str; }
90 int size() const { return m_len; }
91 int length() const { return m_len; }
92 char & operator[](int i) { return m_str[i]; }
93 const char &operator[](int i) const { return m_str[i]; }
94 void clear() { free(m_str); init(); }
95 VhdlString &operator+=(char c) { char s[2]; s[0]=c; s[1]=0; return append(s); }
96 VhdlString &operator+=(const char *s) { return append(s); }
97 VhdlString &operator+=(VhdlString s) { return append(s); }
98 VhdlString operator+ (const char *s) { return append(s); }
101 void init() { m_str=(char*)calloc(1,1); m_len=0; }
106 // declare it static otherwise we will get:
107 // multiple definition of `operator+(char const*, VhdlString)'
108 // as we are in an include file
109 static VhdlString operator+ (const char *s, VhdlString v) { return VhdlString(s).append(v); }