Doxygen
vhdlstring.h
浏览该文件的文档.
1 #ifndef VHDLSTRING_H
2 #define VHDLSTRING_H
3 
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <string.h>
7 
8 #include "VhdlParser.h"
9 // super class for VhdlParserTokenManager
10 // is generated in vhdlparser.jj
11 // -option TOKEN_MANAGER_SUPER_CLASS = "TokenParser"
12 // sets the Vhdlparser in vhdljjparser.cpp
13 // tokenManager->setLexParser(vhdlParser);
14 
15 namespace vhdl {
16  namespace parser {
17  class TokenParser {
18  public:
19  VhdlParser* parser = nullptr;
21  {
22  parser = p;
23  }
24  };
25  }
26 }
27 
28 
29 /** @brief Minimal string class with std::string like behaviour that fulfills the JavaCC
30  * string requirements.
31  */
32 
34 {
35  public:
37  {
38  init();
39  }
40  VhdlString(const VhdlString &other)
41  {
42  m_str = (char*)malloc(other.m_len+1);
43  memcpy(m_str,other.m_str,other.m_len);
44  m_len = other.m_len;
45  m_str[m_len]=0;
46  }
48  {
49  if (this!=&other)
50  {
51  free(m_str);
52  m_str = (char*)malloc(other.m_len+1);
53  memcpy(m_str,other.m_str,other.m_len);
54  m_len = other.m_len;
55  m_str[m_len]=0;
56  }
57  return *this;
58  }
59  VhdlString(const char *s)
60  {
61  m_len = (int)strlen(s);
62  m_str=(char*)malloc(m_len+1);
63  memcpy(m_str,s,m_len+1);
64  }
65  VhdlString(const char *s,int size)
66  {
67  m_str = (char*)malloc(size+1);
68  memcpy(m_str,s,size);
69  m_str[size]=0;
70  m_len=size;
71  }
73  {
74  free(m_str);
75  }
76  VhdlString& append(const char *s,int size)
77  {
78  int oldlen = m_len;
79  m_len+=size+1;
80  if (m_len)
81  {
82  m_str = (char*)realloc(m_str,m_len);
83  memcpy(m_str+oldlen,s,m_len-oldlen-1);
84  m_str[m_len-1]=0;
85  }
86  return *this;
87  }
88  VhdlString& append(const char *s)
89  {
90  return append(s,(int)strlen(s));
91  }
92  VhdlString& append(const VhdlString &other)
93  {
94  return append(other.m_str,other.m_len);
95  }
96  VhdlString substr(int pos=0,int len=-1)
97  {
98  return VhdlString(m_str?m_str+pos:0,len==-1?m_len-pos:m_len);
99  }
100  int copy(char *s,int len,int pos=0) const
101  {
102  if (len==0) return 0;
103  if (pos>=m_len) { s[0]=0; return 0; }
104  int r=m_len<pos+len ? m_len-pos : len;
105  memcpy(s,m_str+pos,r);
106  return r;
107  }
108  const char *c_str() const { return m_str; }
109  const char *data() const { return m_str; }
110  int size() const { return m_len; }
111  int length() const { return m_len; }
112  char & operator[](int i) { return m_str[i]; }
113  const char &operator[](int i) const { return m_str[i]; }
114  void clear() { free(m_str); init(); }
115  VhdlString &operator+=(char c) { char s[2]; s[0]=c; s[1]=0; return append(s); }
116  VhdlString &operator+=(const char *s) { return append(s); }
118  VhdlString operator+ (const char *s) { return append(s); }
119 
120  private:
121  void init() { m_str=(char*)calloc(1,1); m_len=0; }
122  char *m_str;
123  int m_len;
124 };
125 
126 inline VhdlString operator+ (const char *s, VhdlString v) { return VhdlString(s).append(v); }
127 
128 #endif
VhdlString
Minimal string class with std::string like behaviour that fulfills the JavaCC string requirements.
Definition: vhdlstring.h:33
VhdlString::VhdlString
VhdlString(const VhdlString &other)
Definition: vhdlstring.h:40
VhdlString::VhdlString
VhdlString(const char *s, int size)
Definition: vhdlstring.h:65
VhdlString::VhdlString
VhdlString(const char *s)
Definition: vhdlstring.h:59
VhdlString::copy
int copy(char *s, int len, int pos=0) const
Definition: vhdlstring.h:100
VhdlString::operator+
VhdlString operator+(const char *s)
Definition: vhdlstring.h:118
VhdlString::data
const char * data() const
Definition: vhdlstring.h:109
vhdl::parser::TokenParser::setLexParser
void setLexParser(VhdlParser *p)
Definition: vhdlstring.h:20
VhdlString::operator+=
VhdlString & operator+=(char c)
Definition: vhdlstring.h:115
vhdl::parser::VhdlParser
Definition: VhdlParser.h:21
VhdlString::m_len
int m_len
Definition: vhdlstring.h:123
VhdlString::operator+=
VhdlString & operator+=(const char *s)
Definition: vhdlstring.h:116
VhdlString::operator[]
const char & operator[](int i) const
Definition: vhdlstring.h:113
VhdlString::append
VhdlString & append(const VhdlString &other)
Definition: vhdlstring.h:92
VhdlString::clear
void clear()
Definition: vhdlstring.h:114
VhdlString::m_str
char * m_str
Definition: vhdlstring.h:122
VhdlString::operator+=
VhdlString & operator+=(VhdlString s)
Definition: vhdlstring.h:117
vhdl::parser::TokenParser
Definition: vhdlstring.h:17
operator+
VhdlString operator+(const char *s, VhdlString v)
Definition: vhdlstring.h:126
VhdlString::operator=
VhdlString & operator=(const VhdlString &other)
Definition: vhdlstring.h:47
VhdlString::length
int length() const
Definition: vhdlstring.h:111
VhdlString::~VhdlString
~VhdlString()
Definition: vhdlstring.h:72
vhdl
Token literal values and constants.
Definition: CharStream.h:12
VhdlString::append
VhdlString & append(const char *s, int size)
Definition: vhdlstring.h:76
VhdlString::substr
VhdlString substr(int pos=0, int len=-1)
Definition: vhdlstring.h:96
VhdlString::size
int size() const
Definition: vhdlstring.h:110
VhdlString::append
VhdlString & append(const char *s)
Definition: vhdlstring.h:88
VhdlString::VhdlString
VhdlString()
Definition: vhdlstring.h:36
VhdlParser.h
VhdlString::init
void init()
Definition: vhdlstring.h:121
VhdlString::c_str
const char * c_str() const
Definition: vhdlstring.h:108
VhdlString::operator[]
char & operator[](int i)
Definition: vhdlstring.h:112
vhdl::parser::TokenParser::parser
VhdlParser * parser
Definition: vhdlstring.h:19