summaryrefslogtreecommitdiffstats
path: root/src/lib/netlist/plib/pstring.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/plib/pstring.cpp')
-rw-r--r--src/lib/netlist/plib/pstring.cpp64
1 files changed, 37 insertions, 27 deletions
diff --git a/src/lib/netlist/plib/pstring.cpp b/src/lib/netlist/plib/pstring.cpp
index 7deeb011bd7..fc97409097f 100644
--- a/src/lib/netlist/plib/pstring.cpp
+++ b/src/lib/netlist/plib/pstring.cpp
@@ -9,7 +9,6 @@
#include "palloc.h"
#include "plists.h"
-#include <cstring>
#include <algorithm>
#include <stack>
#include <cstdlib>
@@ -23,15 +22,25 @@ pstring_t<F>::~pstring_t()
sfree(m_ptr);
}
+template <typename T>
+std::size_t strlen_mem(const T *s)
+{
+ std::size_t len(0);
+ while (*s++)
+ ++len;
+ return len;
+}
+
+
template<typename F>
void pstring_t<F>::pcat(const mem_t *s)
{
- std::size_t slen = strlen(s);
+ std::size_t slen = strlen_mem(s);
pstr_t *n = salloc(m_ptr->len() + slen);
if (m_ptr->len() > 0)
- std::memcpy(n->str(), m_ptr->str(), m_ptr->len());
+ n->copy_from(m_ptr->str(), m_ptr->len());
if (slen > 0)
- std::memcpy(n->str() + m_ptr->len(), s, slen);
+ std::copy(s, s + slen, n->str() + m_ptr->len());
*(n->str() + n->len()) = 0;
sfree(m_ptr);
m_ptr = n;
@@ -43,9 +52,9 @@ void pstring_t<F>::pcat(const pstring_t &s)
std::size_t slen = s.blen();
pstr_t *n = salloc(m_ptr->len() + slen);
if (m_ptr->len() > 0)
- std::memcpy(n->str(), m_ptr->str(), m_ptr->len());
+ n->copy_from(m_ptr->str(), m_ptr->len());
if (slen > 0)
- std::memcpy(n->str() + m_ptr->len(), s.c_str(), slen);
+ std::copy(s.c_str(), s.c_str() + slen, n->str() + m_ptr->len());
*(n->str() + n->len()) = 0;
sfree(m_ptr);
m_ptr = n;
@@ -64,7 +73,14 @@ int pstring_t<F>::pcmp(const pstring_t &right) const
else
return -1;
}
- int ret = memcmp(m_ptr->str(), right.c_str(), l);
+ auto si = this->begin();
+ auto ri = right.begin();
+ while (si != this->end() && *si == *ri)
+ {
+ ri++;
+ si++;
+ }
+ int ret = (si == this->end() ? 0 : *si - *ri);
if (ret == 0)
{
if (this->blen() > right.blen())
@@ -79,10 +95,10 @@ int pstring_t<F>::pcmp(const pstring_t &right) const
template<typename F>
void pstring_t<F>::pcopy(const mem_t *from, std::size_t size)
{
- pstr_t *n = salloc(size);
+ pstr_t *n = salloc(size * sizeof(mem_t));
if (size > 0)
- std::memcpy(n->str(), from, size);
- *(n->str() + size) = 0;
+ n->copy_from((char *)from, size);
+ *((mem_t *) n->str() + size) = 0;
sfree(m_ptr);
m_ptr = n;
}
@@ -228,7 +244,7 @@ const pstring_t<F> pstring_t<F>::rpad(const pstring_t &ws, const size_type cnt)
template<typename F>
void pstring_t<F>::pcopy(const mem_t *from)
{
- pcopy(from, strlen(from));
+ pcopy(from, strlen_mem(from));
}
template<typename F>
@@ -270,7 +286,7 @@ bool pstring_t<F>::startsWith(const pstring_t &arg) const
if (arg.blen() > blen())
return false;
else
- return (memcmp(arg.c_str(), c_str(), arg.blen()) == 0);
+ return std::equal(arg.c_str(), arg.c_str() + arg.blen(), c_str());
}
template<typename F>
@@ -279,13 +295,7 @@ bool pstring_t<F>::endsWith(const pstring_t &arg) const
if (arg.blen() > blen())
return false;
else
- return (memcmp(c_str()+this->blen()-arg.blen(), arg.c_str(), arg.blen()) == 0);
-}
-
-template<typename F>
-int pstring_t<F>::pcmp(const mem_t *right) const
-{
- return std::strcmp(m_ptr->str(), right);
+ return std::equal(arg.c_str(), arg.c_str() + arg.blen(), c_str()+this->blen()-arg.blen());
}
// ----------------------------------------------------------------------------------------
@@ -314,7 +324,7 @@ void pstringbuffer::resize(const std::size_t size)
while (m_size < size)
m_size *= 2;
char *new_buf = plib::palloc_array<char>(m_size);
- std::memcpy(new_buf, m_ptr, m_len + 1);
+ std::copy(m_ptr, m_ptr + m_len + 1, new_buf);
plib::pfree_array(m_ptr);
m_ptr = new_buf;
}
@@ -322,24 +332,24 @@ void pstringbuffer::resize(const std::size_t size)
void pstringbuffer::pcopy(const char *from)
{
- std::size_t nl = strlen(from) + 1;
+ std::size_t nl = strlen_mem(from) + 1;
resize(nl);
- std::memcpy(m_ptr, from, nl);
+ std::copy(from, from + nl, m_ptr);
}
void pstringbuffer::pcopy(const pstring &from)
{
std::size_t nl = from.blen() + 1;
resize(nl);
- std::memcpy(m_ptr, from.c_str(), nl);
+ std::copy(from.c_str(), from.c_str() + nl, m_ptr);
}
void pstringbuffer::pcat(const char *s)
{
- const std::size_t slen = std::strlen(s);
+ const std::size_t slen = strlen_mem(s);
const std::size_t nl = m_len + slen + 1;
resize(nl);
- std::memcpy(m_ptr + m_len, s, slen + 1);
+ std::copy(s, s + slen + 1, m_ptr + m_len);
m_len += slen;
}
@@ -347,7 +357,7 @@ void pstringbuffer::pcat(const void *m, std::size_t l)
{
const std::size_t nl = m_len + l + 1;
resize(nl);
- std::memcpy(m_ptr + m_len, m, l);
+ std::copy((char *) m, (char *) m + l, m_ptr + m_len);
m_len += l;
*(m_ptr + m_len) = 0;
}
@@ -357,7 +367,7 @@ void pstringbuffer::pcat(const pstring &s)
const std::size_t slen = s.blen();
const std::size_t nl = m_len + slen + 1;
resize(nl);
- std::memcpy(m_ptr + m_len, s.c_str(), slen);
+ std::copy(s.c_str(), s.c_str() + slen, m_ptr + m_len);
m_len += slen;
m_ptr[m_len] = 0;
}