compiler specific fixes (mostly MWCW)

[SVN r8032]
This commit is contained in:
John Maddock
2000-10-24 11:53:07 +00:00
parent 13df83ab96
commit 209636b869
8 changed files with 94 additions and 70 deletions

View File

@ -72,6 +72,12 @@ Do not change this file unless you really really have to, add options to
#if (defined(__WIN32__) || defined(_WIN32) || defined(WIN32)) && !defined(__GNUC__)
#define BOOST_RE_PLATFORM_W32
#endif
#ifdef __MWERKS__
// no std::maessages facet
#define BOOST_RE_NO_MESSAGES
#endif
#ifdef __BORLANDC__
#if __BORLANDC__ < 0x500

View File

@ -120,7 +120,7 @@ private:
typename alloc_inst_type::pointer last;
alloc_data(const Allocator& a) : alloc_inst_type(a){}
} alloc_inst;
raw_storage<Allocator>::pointer start, end;
pointer start, end;
public:
raw_storage(const Allocator& a = Allocator());

View File

@ -72,7 +72,7 @@ private:
};
data alloc_inst;
mutable node* stack;
mutable node* m_stack;
mutable node* unused;
node base;
size_type block_size;
@ -96,51 +96,51 @@ public:
bool BOOST_RE_CALL empty()
{
return (stack->start == stack->end) && (stack->next == 0);
return (m_stack->start == m_stack->end) && (m_stack->next == 0);
}
bool BOOST_RE_CALL good()
{
return (stack->start != stack->end) || (stack->next != 0);
return (m_stack->start != m_stack->end) || (m_stack->next != 0);
}
T& BOOST_RE_CALL peek()
{
if(stack->start == stack->end)
if(m_stack->start == m_stack->end)
pop_aux();
return *stack->end;
return *m_stack->end;
}
const T& BOOST_RE_CALL peek()const
{
if(stack->start == stack->end)
if(m_stack->start == m_stack->end)
pop_aux();
return *stack->end;
return *m_stack->end;
}
void BOOST_RE_CALL pop()
{
if(stack->start == stack->end)
if(m_stack->start == m_stack->end)
pop_aux();
jm_destroy(stack->end);
++(stack->end);
jm_destroy(m_stack->end);
++(m_stack->end);
}
void BOOST_RE_CALL pop(T& t)
{
if(stack->start == stack->end)
if(m_stack->start == m_stack->end)
pop_aux();
t = *stack->end;
jm_destroy(stack->end);
++(stack->end);
t = *m_stack->end;
jm_destroy(m_stack->end);
++(m_stack->end);
}
void BOOST_RE_CALL push(const T& t)
{
if(stack->end == stack->last)
if(m_stack->end == m_stack->last)
push_aux();
--(stack->end);
jm_construct(stack->end, t);
--(m_stack->end);
jm_construct(m_stack->end, t);
}
};
@ -151,7 +151,7 @@ jstack<T, Allocator>::jstack(size_type n, const Allocator& a)
{
unused = 0;
block_size = n;
stack = &base;
m_stack = &base;
base.last = reinterpret_cast<T*>(alloc_inst.buf);
base.end = base.start = base.last + 16;
base.next = 0;
@ -166,14 +166,14 @@ void BOOST_RE_CALL jstack<T, Allocator>::push_aux()
{
new_node = unused;
unused = new_node->next;
new_node->next = stack;
stack = new_node;
new_node->next = m_stack;
m_stack = new_node;
}
else
{
new_node = get_node();
new_node->next = stack;
stack = new_node;
new_node->next = m_stack;
m_stack = new_node;
}
}
@ -182,9 +182,9 @@ void BOOST_RE_CALL jstack<T, Allocator>::pop_aux()const
{
// make sure that we have a valid item
// on TOS:
jm_assert(stack->next);
register node* p = stack;
stack = p->next;
jm_assert(m_stack->next);
register node* p = m_stack;
m_stack = p->next;
p->next = unused;
unused = p;
}
@ -201,10 +201,10 @@ jstack<T, Allocator>::~jstack()
unused = unused->next;
alloc_inst.deallocate((unsigned char*)condemned, sizeof(node) + sizeof(T) * block_size);
}
while(stack != &base)
while(m_stack != &base)
{
condemned = stack;
stack = stack->next;
condemned = m_stack;
m_stack = m_stack->next;
alloc_inst.deallocate((unsigned char*)condemned, sizeof(node) + sizeof(T) * block_size);
}
}

View File

@ -849,16 +849,16 @@ public:
protected:
typedef BOOST_RE_MAYBE_TYPENAME REBIND_TYPE(char, Allocator) c_alloc;
struct reference : public c_alloc
struct c_reference : public c_alloc
{
unsigned int cmatches;
unsigned count;
sub_match<iterator> head, tail, null;
unsigned int lines;
iterator line_pos, base;
reference(const Allocator& a) : c_alloc(a) { }
c_reference(const Allocator& a) : c_alloc(a) { }
bool operator==(const reference& that)const
bool operator==(const c_reference& that)const
{
return (cmatches == that.cmatches) &&
(count == that.count) &&
@ -867,11 +867,11 @@ protected:
(lines == that.lines) &&
(base == that.base);
}
bool operator!=(const reference& that)const
bool operator!=(const c_reference& that)const
{ return !(*this == that); }
};
reference* ref;
c_reference* ref;
void BOOST_RE_CALL cow();
@ -904,7 +904,7 @@ public:
const sub_match<iterator>& BOOST_RE_CALL operator[](int n) const
{
if((n >= 0) && ((unsigned int)n < ref->cmatches))
return *(sub_match<iterator>*)((char*)ref + sizeof(reference) + sizeof(sub_match<iterator>)*n);
return *(sub_match<iterator>*)((char*)ref + sizeof(c_reference) + sizeof(sub_match<iterator>)*n);
return (n == -1) ? ref->head : (n == -2) ? ref->tail : ref->null;
}
@ -956,7 +956,7 @@ public:
void swap(match_results_base& that)
{
reference* t = that.ref;
c_reference* t = that.ref;
that.ref = ref;
ref = t;
}
@ -987,8 +987,8 @@ public:
void BOOST_RE_CALL set_second(iterator i, size_t pos)
{
cow();
((sub_match<iterator>*)((char*)ref + sizeof(reference) + sizeof(sub_match<iterator>) * pos))->second = i;
((sub_match<iterator>*)((char*)ref + sizeof(reference) + sizeof(sub_match<iterator>) * pos))->matched = true;
((sub_match<iterator>*)((char*)ref + sizeof(c_reference) + sizeof(sub_match<iterator>) * pos))->second = i;
((sub_match<iterator>*)((char*)ref + sizeof(c_reference) + sizeof(sub_match<iterator>) * pos))->matched = true;
if(pos == 0)
{
ref->tail.first = i;
@ -1032,7 +1032,7 @@ template <class iterator, class Allocator>
void BOOST_RE_CALL match_results_base<iterator, Allocator>::set_first(iterator i, size_t pos)
{
cow();
((sub_match<iterator>*)((char*)ref + sizeof(reference) + sizeof(sub_match<iterator>) * pos))->first = i;
((sub_match<iterator>*)((char*)ref + sizeof(c_reference) + sizeof(sub_match<iterator>) * pos))->first = i;
if(pos == 0)
{
ref->head.second = i;
@ -1056,10 +1056,10 @@ void BOOST_RE_CALL match_results_base<iterator, Allocator>::set_first(iterator i
template <class iterator, class Allocator>
match_results_base<iterator, Allocator>::match_results_base(const Allocator& a)
{
ref = (reference*)c_alloc(a).allocate(sizeof(sub_match<iterator>) + sizeof(reference));
ref = (c_reference*)c_alloc(a).allocate(sizeof(sub_match<iterator>) + sizeof(c_reference));
try
{
new (ref) reference(a);
new (ref) c_reference(a);
ref->cmatches = 1;
ref->count = 1;
// construct the sub_match<iterator>:
@ -1075,7 +1075,7 @@ match_results_base<iterator, Allocator>::match_results_base(const Allocator& a)
}
catch(...)
{
c_alloc(a).deallocate((char*)(void*)ref, sizeof(sub_match<iterator>) + sizeof(reference));
c_alloc(a).deallocate((char*)(void*)ref, sizeof(sub_match<iterator>) + sizeof(c_reference));
throw;
}
}
@ -1114,7 +1114,7 @@ void BOOST_RE_CALL match_results_base<iterator, Allocator>::free()
++p1;
}
jm_destroy(ref);
a.deallocate((char*)(void*)ref, sizeof(sub_match<iterator>) * ref->cmatches + sizeof(reference));
a.deallocate((char*)(void*)ref, sizeof(sub_match<iterator>) * ref->cmatches + sizeof(c_reference));
}
}
@ -1141,10 +1141,10 @@ void BOOST_RE_CALL match_results_base<iterator, Allocator>::set_size(size_type n
{
if(ref->cmatches != n)
{
reference* newref = (reference*)ref->allocate(sizeof(sub_match<iterator>) * n + sizeof(reference));
c_reference* newref = (c_reference*)ref->allocate(sizeof(sub_match<iterator>) * n + sizeof(c_reference));
try
{
new (newref) reference(*ref);
new (newref) c_reference(*ref);
newref->count = 1;
newref->cmatches = n;
sub_match<iterator>* p1, *p2;
@ -1174,7 +1174,7 @@ void BOOST_RE_CALL match_results_base<iterator, Allocator>::set_size(size_type n
}
catch(...)
{
ref->deallocate((char*)(void*)newref, sizeof(sub_match<iterator>) * n + sizeof(reference));
ref->deallocate((char*)(void*)newref, sizeof(sub_match<iterator>) * n + sizeof(c_reference));
throw;
}
}
@ -1185,9 +1185,9 @@ void BOOST_RE_CALL match_results_base<iterator, Allocator>::set_size(size_type n
{
if(ref->cmatches != n)
{
reference* newref = (reference*)ref->allocate(sizeof(sub_match<iterator>) * n + sizeof(reference));;
c_reference* newref = (c_reference*)ref->allocate(sizeof(sub_match<iterator>) * n + sizeof(c_reference));;
try{
new (newref) reference(*ref);
new (newref) c_reference(*ref);
newref->count = 1;
newref->cmatches = n;
sub_match<iterator>* p1 = (sub_match<iterator>*)(newref+1);
@ -1216,7 +1216,7 @@ void BOOST_RE_CALL match_results_base<iterator, Allocator>::set_size(size_type n
}
catch(...)
{
ref->deallocate((char*)(void*)newref, sizeof(sub_match<iterator>) * n + sizeof(reference));
ref->deallocate((char*)(void*)newref, sizeof(sub_match<iterator>) * n + sizeof(c_reference));
throw;
}
}
@ -1291,9 +1291,9 @@ void BOOST_RE_CALL match_results_base<iterator, Allocator>::cow()
{
if(ref->count > 1)
{
reference* newref = (reference*)ref->allocate(sizeof(sub_match<iterator>) * ref->cmatches + sizeof(reference));
c_reference* newref = (c_reference*)ref->allocate(sizeof(sub_match<iterator>) * ref->cmatches + sizeof(c_reference));
try{
new (newref) reference(*ref);
new (newref) c_reference(*ref);
newref->count = 1;
sub_match<iterator>* p1 = (sub_match<iterator>*)(newref+1);
sub_match<iterator>* p2 = p1 + newref->cmatches;
@ -1322,7 +1322,7 @@ void BOOST_RE_CALL match_results_base<iterator, Allocator>::cow()
}
catch(...)
{
ref->deallocate((char*)(void*)newref, sizeof(sub_match<iterator>) * ref->cmatches + sizeof(reference));
ref->deallocate((char*)(void*)newref, sizeof(sub_match<iterator>) * ref->cmatches + sizeof(c_reference));
throw;
}
}
@ -1369,11 +1369,11 @@ match_results<iterator, Allocator>::match_results(const match_results<iterator,
: re_detail::match_results_base<iterator, Allocator>(false)
{
this->ref =
reinterpret_cast<typename re_detail::match_results_base<iterator, Allocator>::reference *>
reinterpret_cast<typename re_detail::match_results_base<iterator, Allocator>::c_reference *>
(m.ref->allocate(sizeof(sub_match<iterator>) * m.ref->cmatches +
sizeof(typename re_detail::match_results_base<iterator, Allocator>::reference)));
sizeof(typename re_detail::match_results_base<iterator, Allocator>::c_reference)));
try{
new (this->ref) typename re_detail::match_results_base<iterator, Allocator>::reference(*m.ref);
new (this->ref) typename re_detail::match_results_base<iterator, Allocator>::c_reference(*m.ref);
this->ref->count = 1;
sub_match<iterator>* p1 = (sub_match<iterator>*)(this->ref+1);
sub_match<iterator>* p2 = p1 + this->ref->cmatches;
@ -1400,7 +1400,7 @@ match_results<iterator, Allocator>::match_results(const match_results<iterator,
}
catch(...)
{
m.ref->deallocate((char*)(void*)this->ref, sizeof(sub_match<iterator>) * m.ref->cmatches + sizeof(typename re_detail::match_results_base<iterator, Allocator>::reference));
m.ref->deallocate((char*)(void*)this->ref, sizeof(sub_match<iterator>) * m.ref->cmatches + sizeof(typename re_detail::match_results_base<iterator, Allocator>::c_reference));
throw;
}
}

View File

@ -179,6 +179,7 @@ public:
template<>
class BOOST_RE_IX_DECL c_regex_traits<char> : public re_detail::c_traits_base
{
typedef re_detail::c_traits_base base_type;
public:
typedef char char_type;
typedef unsigned char uchar_type;
@ -263,6 +264,7 @@ private:
template<>
class BOOST_RE_IX_DECL c_regex_traits<wchar_t> : public re_detail::c_traits_base
{
typedef re_detail::c_traits_base base_type;
public:
typedef wchar_t char_type;
typedef unsigned short uchar_type;
@ -384,6 +386,7 @@ class w32_regex_traits;
template<>
class BOOST_RE_IX_DECL w32_regex_traits<char> : public re_detail::w32_traits_base
{
typedef re_detail::w32_traits_base base_type;
public:
typedef char char_type;
typedef unsigned char uchar_type;
@ -458,6 +461,7 @@ private:
template<>
class BOOST_RE_IX_DECL w32_regex_traits<wchar_t> : public re_detail::w32_traits_base
{
typedef re_detail::w32_traits_base base_type;
public:
typedef wchar_t char_type;
typedef unsigned short uchar_type;
@ -583,6 +587,7 @@ class cpp_regex_traits;
template<>
class BOOST_RE_IX_DECL cpp_regex_traits<char> : public re_detail::cpp_regex_traits_base
{
typedef re_detail::cpp_regex_traits_base base_type;
private:
re_detail::message_data<char>* pmd;
const unsigned char* psyntax;
@ -667,6 +672,7 @@ public:
template<>
class BOOST_RE_IX_DECL cpp_regex_traits<wchar_t> : public re_detail::cpp_regex_traits_base
{
typedef re_detail::cpp_regex_traits_base base_type;
public:
typedef wchar_t char_type;
typedef unsigned short uchar_type;