#ifndef VHDLSTRING_H #define VHDLSTRING_H #include #include #include /** @brief Minimal string class with std::string like behaviour that fulfills the JavaCC * string requirements. */ class VhdlString { public: VhdlString() { init(); } VhdlString(const VhdlString &other) { m_str = (char*)malloc(other.m_len+1); memcpy(m_str,other.m_str,other.m_len); m_len = other.m_len; m_str[m_len]=0; } VhdlString &operator=(const VhdlString &other) { if (this!=&other) { free(m_str); m_str = (char*)malloc(other.m_len+1); memcpy(m_str,other.m_str,other.m_len); m_len = other.m_len; m_str[m_len]=0; } return *this; } VhdlString(const char *s) { m_len = strlen(s); m_str=(char*)malloc(m_len+1); memcpy(m_str,s,m_len+1); } VhdlString(const char *s,int size) { m_str = (char*)malloc(size+1); memcpy(m_str,s,size); m_str[size]=0; m_len=size; } ~VhdlString() { free(m_str); } VhdlString& append(const char *s,int size) { int oldlen = m_len; m_len+=size+1; if (m_len) { m_str = (char*)realloc(m_str,m_len); memcpy(m_str+oldlen,s,m_len-oldlen-1); m_str[m_len-1]=0; } return *this; } VhdlString& append(const char *s) { return append(s,strlen(s)); } VhdlString& append(const VhdlString &other) { return append(other.m_str,other.m_len); } VhdlString substr(int pos=0,int len=-1) { return VhdlString(m_str?m_str+pos:0,len==-1?m_len-pos:m_len); } int copy(char *s,int len,int pos=0) const { if (len==0) return 0; if (pos>=m_len) { s[0]=0; return 0; } int r=m_len