11 namespace Instrument {
36 #define MTL_VISA_BUFFER_TYPE char
41 std::vector<MTL_VISA_BUFFER_TYPE> m_Vector;
45 : m_Vector(), m_Size(0)
49 reserve(InitialCapacity);
52 : m_Vector(), m_Size(0)
56 assign(pData, pData + DataLen);
71 if (capacity > m_Vector.size())
72 m_Vector.resize(capacity);
78 if (size > m_Vector.size())
81 m_Vector.resize(size);
96 return m_Vector.size();
99 std::vector<MTL_VISA_BUFFER_TYPE>::iterator
begin()
103 return m_Vector.begin();
105 std::vector<MTL_VISA_BUFFER_TYPE>::const_iterator
begin()
const
109 return m_Vector.begin();
111 std::vector<MTL_VISA_BUFFER_TYPE>::iterator
end()
115 return m_Vector.begin() + m_Size;
117 std::vector<MTL_VISA_BUFFER_TYPE>::const_iterator
end()
const
121 return m_Vector.begin() + m_Size;
128 return m_Vector.data();
134 return m_Vector.data();
152 if (capacity() < (
size_t)(Last - First))
153 reserve(Last - First);
154 std::copy(First, Last, m_Vector.begin());
155 m_Size = Last - First;
163 std::copy(pData, pData + n, m_Vector.begin());
174 std::vector<char>::const_iterator m_Bbegin;
175 std::vector<char>::const_iterator m_Bend;
176 std::vector<char>::const_iterator m_SplitOffset;
179 std::vector<char>::const_iterator
begin;
180 std::vector<char>::const_iterator
end;
181 sToken(std::vector<char>::const_iterator b, std::vector<char>::const_iterator e)
182 : begin(b), end(e) {}
187 CVISABufferParser(std::vector<char>::const_iterator begin, std::vector<char>::const_iterator end)
188 : m_Bbegin(begin), m_Bend(end), m_SplitOffset(begin) {}
190 std::vector<char>::const_iterator
begin()
194 std::vector<char>::const_iterator
end()
204 if (m_Bbegin == m_Bend)
208 std::vector<char>::const_iterator l_Start = m_Bbegin + Offset;
209 std::vector<char>::const_iterator l_Next = std::find(l_Start, m_Bend, Separator);
210 l_Tokens.push_back(
sToken(l_Start, l_Next));
213 while (l_Next != m_Bend)
215 l_Start = l_Next + 1;
216 l_Next = std::find(l_Start, m_Bend, Separator);
217 l_Tokens.push_back(
sToken(l_Start, l_Next));
221 const std::string l_Whitespace(
" \t\n\r");
222 for (
auto l_Token : l_Tokens)
224 while (std::string::npos != l_Whitespace.find(*l_Token.begin))
232 bool GetNext(std::vector<char>::const_iterator & rNextBegin, std::vector<char>::const_iterator & rNextEnd,
const char Separator =
';')
235 const std::string l_Whitespace(
" \t\n\r");
236 while (m_SplitOffset < m_Bend &&
237 std::string::npos != l_Whitespace.find(*m_SplitOffset))
241 if (m_SplitOffset == m_Bend)
249 rNextBegin = m_SplitOffset;
250 rNextEnd = std::find(m_SplitOffset, m_Bend, Separator);
253 if (rNextEnd == m_Bend)
254 m_SplitOffset = m_Bend;
256 m_SplitOffset = rNextEnd + 1;
264 m_SplitOffset = Offset;
266 if (m_SplitOffset < m_Bbegin)
267 m_SplitOffset = m_Bbegin;
268 if (m_SplitOffset > m_Bend)
269 m_SplitOffset = m_Bbegin;