mirror of
https://github.com/boostorg/algorithm.git
synced 2025-07-06 09:16:33 +02:00
removed static constant FIXED_STORAGE_SIZE from is_any_of to
make the code compile on borland compilers [SVN r48218]
This commit is contained in:
@ -69,9 +69,7 @@ namespace boost {
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
// set cannot operate on const value-type
|
// set cannot operate on const value-type
|
||||||
typedef typename remove_const<CharT>::type set_value_type;
|
typedef typename ::boost::remove_const<CharT>::type set_value_type;
|
||||||
// Size of the static storage (size of pointer*2)
|
|
||||||
static const ::std::size_t FIXED_STORAGE_SIZE = sizeof(set_value_type*)*2;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Boost.Lambda support
|
// Boost.Lambda support
|
||||||
@ -88,7 +86,7 @@ namespace boost {
|
|||||||
m_Size=Size;
|
m_Size=Size;
|
||||||
set_value_type* Storage=0;
|
set_value_type* Storage=0;
|
||||||
|
|
||||||
if(m_Size<=FIXED_STORAGE_SIZE)
|
if(use_fixed_storage(m_Size))
|
||||||
{
|
{
|
||||||
// Use fixed storage
|
// Use fixed storage
|
||||||
Storage=&m_Storage.m_fixSet[0];
|
Storage=&m_Storage.m_fixSet[0];
|
||||||
@ -113,7 +111,7 @@ namespace boost {
|
|||||||
const set_value_type* SrcStorage=0;
|
const set_value_type* SrcStorage=0;
|
||||||
set_value_type* DestStorage=0;
|
set_value_type* DestStorage=0;
|
||||||
|
|
||||||
if(m_Size<=FIXED_STORAGE_SIZE)
|
if(use_fixed_storage(m_Size))
|
||||||
{
|
{
|
||||||
// Use fixed storage
|
// Use fixed storage
|
||||||
DestStorage=&m_Storage.m_fixSet[0];
|
DestStorage=&m_Storage.m_fixSet[0];
|
||||||
@ -134,7 +132,7 @@ namespace boost {
|
|||||||
// Destructor
|
// Destructor
|
||||||
~is_any_ofF()
|
~is_any_ofF()
|
||||||
{
|
{
|
||||||
if(m_Size>FIXED_STORAGE_SIZE && m_Storage.m_dynSet!=0)
|
if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0)
|
||||||
{
|
{
|
||||||
delete [] m_Storage.m_dynSet;
|
delete [] m_Storage.m_dynSet;
|
||||||
}
|
}
|
||||||
@ -147,14 +145,14 @@ namespace boost {
|
|||||||
const set_value_type* SrcStorage=0;
|
const set_value_type* SrcStorage=0;
|
||||||
set_value_type* DestStorage=0;
|
set_value_type* DestStorage=0;
|
||||||
|
|
||||||
if(Other.m_Size<=FIXED_STORAGE_SIZE)
|
if(use_fixed_storage(Other.m_Size))
|
||||||
{
|
{
|
||||||
// Use fixed storage
|
// Use fixed storage
|
||||||
DestStorage=&m_Storage.m_fixSet[0];
|
DestStorage=&m_Storage.m_fixSet[0];
|
||||||
SrcStorage=&Other.m_Storage.m_fixSet[0];
|
SrcStorage=&Other.m_Storage.m_fixSet[0];
|
||||||
|
|
||||||
// Delete old storage if was present
|
// Delete old storage if was present
|
||||||
if(m_Size>FIXED_STORAGE_SIZE && m_Storage.m_dynSet!=0)
|
if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0)
|
||||||
{
|
{
|
||||||
delete [] m_Storage.m_dynSet;
|
delete [] m_Storage.m_dynSet;
|
||||||
}
|
}
|
||||||
@ -172,7 +170,7 @@ namespace boost {
|
|||||||
SrcStorage=Other.m_Storage.m_dynSet;
|
SrcStorage=Other.m_Storage.m_dynSet;
|
||||||
|
|
||||||
// Delete old storage if necessary
|
// Delete old storage if necessary
|
||||||
if(m_Size>FIXED_STORAGE_SIZE && m_Storage.m_dynSet!=0)
|
if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0)
|
||||||
{
|
{
|
||||||
delete [] m_Storage.m_dynSet;
|
delete [] m_Storage.m_dynSet;
|
||||||
}
|
}
|
||||||
@ -183,7 +181,7 @@ namespace boost {
|
|||||||
m_Size=Other.m_Size;
|
m_Size=Other.m_Size;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use fixed storage
|
// Copy the data
|
||||||
::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);
|
::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
@ -194,12 +192,19 @@ namespace boost {
|
|||||||
bool operator()( Char2T Ch ) const
|
bool operator()( Char2T Ch ) const
|
||||||
{
|
{
|
||||||
const set_value_type* Storage=
|
const set_value_type* Storage=
|
||||||
(m_Size<=FIXED_STORAGE_SIZE)
|
(use_fixed_storage(m_Size))
|
||||||
? &m_Storage.m_fixSet[0]
|
? &m_Storage.m_fixSet[0]
|
||||||
: m_Storage.m_dynSet;
|
: m_Storage.m_dynSet;
|
||||||
|
|
||||||
return ::std::binary_search(Storage, Storage+m_Size, Ch);
|
return ::std::binary_search(Storage, Storage+m_Size, Ch);
|
||||||
}
|
}
|
||||||
|
private:
|
||||||
|
// check if the size is eligible for fixed storage
|
||||||
|
static bool use_fixed_storage(std::size_t size)
|
||||||
|
{
|
||||||
|
return size<=sizeof(set_value_type*)*2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// storage
|
// storage
|
||||||
@ -207,7 +212,7 @@ namespace boost {
|
|||||||
union
|
union
|
||||||
{
|
{
|
||||||
set_value_type* m_dynSet;
|
set_value_type* m_dynSet;
|
||||||
set_value_type m_fixSet[FIXED_STORAGE_SIZE];
|
set_value_type m_fixSet[sizeof(set_value_type*)*2];
|
||||||
}
|
}
|
||||||
m_Storage;
|
m_Storage;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user