summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib/pstring.h
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2017-01-22 23:36:54 +0100
committer couriersud <couriersud@gmx.org>2017-01-25 22:17:46 +0100
commit093bda019317a5a66699b35f8b25ab73802f1f1c (patch)
treeb0e35b6f83d8cba9f7d69eda8c857cf799f1bfc1 /src/lib/netlist/plib/pstring.h
parent624463dc3457e2719af007a6afee3da107af4a94 (diff)
Added infix notation parsing to the function parser. (nw)
Diffstat (limited to 'src/lib/netlist/plib/pstring.h')
-rw-r--r--src/lib/netlist/plib/pstring.h29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/lib/netlist/plib/pstring.h b/src/lib/netlist/plib/pstring.h
index 999bd10ce6b..059df4b6376 100644
--- a/src/lib/netlist/plib/pstring.h
+++ b/src/lib/netlist/plib/pstring.h
@@ -10,6 +10,7 @@
#include <cstdarg>
#include <cstddef>
#include <iterator>
+#include <exception>
#include "pconfig.h"
@@ -22,27 +23,24 @@
struct pstr_t
{
- //str_t() : m_ref_count(1), m_len(0) { m_str[0] = 0; }
- pstr_t(const std::size_t alen)
- {
- init(alen);
- }
+ pstr_t(const int alen) { init(alen); }
void init(const std::size_t alen)
{
- m_ref_count = 1;
- m_len = alen;
- m_str[0] = 0;
+ m_ref_count = 1;
+ m_len = alen;
+ m_str[0] = 0;
}
char *str() { return &m_str[0]; }
unsigned char *ustr() { return reinterpret_cast<unsigned char *>(&m_str[0]); }
std::size_t len() const { return m_len; }
- int m_ref_count;
+ void inc() { m_ref_count++; }
+ bool dec_and_check() { --m_ref_count; return m_ref_count == 0; }
private:
+ int m_ref_count;
std::size_t m_len;
char m_str[1];
};
-
template <typename F>
struct pstring_t
{
@@ -75,7 +73,8 @@ public:
pstring_t(C (&string)[N]) : m_ptr(&m_zero) {
static_assert(std::is_same<C, const mem_t>::value, "pstring constructor only accepts const mem_t");
static_assert(N>0,"pstring from array of length 0");
- //static_assert(string[N-1] == 0, "pstring constructor parameter not a string literal");
+ if (string[N-1] != 0)
+ throw std::exception();
init(string);
}
@@ -185,13 +184,13 @@ protected:
private:
void init(const mem_t *string)
{
- m_ptr->m_ref_count++;
+ m_ptr->inc();
if (string != nullptr && *string != 0)
pcopy(string);
}
void init(const pstring_t &string)
{
- m_ptr->m_ref_count++;
+ m_ptr->inc();
pcopy(string);
}
@@ -206,7 +205,7 @@ private:
{
sfree(m_ptr);
m_ptr = from.m_ptr;
- m_ptr->m_ref_count++;
+ m_ptr->inc();
}
void pcat(const mem_t *s);
void pcat(const pstring_t &s);
@@ -217,8 +216,6 @@ private:
static pstr_t m_zero;
};
-template <typename F> pstr_t pstring_t<F>::m_zero(0);
-
struct pu8_traits
{
static const unsigned MAXCODELEN = 1; /* in memory units */