Fix various issues related to stability when using highly compliant compilers such as Comeau 4.3.0.1, VC7.1 and GCC 3.2
git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@108 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
parent
80e63b12a3
commit
b53b3265e4
56 changed files with 441 additions and 203 deletions
|
@ -18,7 +18,7 @@
|
|||
#ifndef FACTORY_INC_
|
||||
#define FACTORY_INC_
|
||||
|
||||
#include "Loki_TypeInfo.h"
|
||||
#include "LokiTypeInfo.h"
|
||||
#include "AssocVector.h"
|
||||
#include <exception>
|
||||
|
||||
|
|
|
@ -1,26 +1,4 @@
|
|||
head 1.1;
|
||||
access;
|
||||
symbols;
|
||||
locks; strict;
|
||||
comment @ * @;
|
||||
|
||||
|
||||
1.1
|
||||
date 2002.07.16.22.42.05; author tslettebo; state Exp;
|
||||
branches;
|
||||
next ;
|
||||
|
||||
|
||||
desc
|
||||
@@
|
||||
|
||||
|
||||
1.1
|
||||
log
|
||||
@Initial commit
|
||||
@
|
||||
text
|
||||
@////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// The Loki Library
|
||||
// Copyright (c) 2001 by Andrei Alexandrescu
|
||||
// This code accompanies the book:
|
||||
|
@ -35,10 +13,10 @@ text
|
|||
// without express or implied warranty.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Last update: June 20, 2001
|
||||
// Last update: August 9, 2002
|
||||
|
||||
#ifndef TYPEINFO_INC_
|
||||
#define TYPEINFO_INC_
|
||||
#ifndef LOKITYPEINFO_INC_
|
||||
#define LOKITYPEINFO_INC_
|
||||
|
||||
#include <typeinfo>
|
||||
#include <cassert>
|
||||
|
@ -54,6 +32,7 @@ namespace Loki
|
|||
class TypeInfo
|
||||
{
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
TypeInfo(); // needed for containers
|
||||
TypeInfo(const std::type_info&); // non-explicit
|
||||
|
@ -123,8 +102,7 @@ namespace Loki
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Change log:
|
||||
// June 20, 2001: ported by Nick Thurn to gcc 2.95.3. Kudos, Nick!!!
|
||||
// July 16, 2002: Ported by Terje Slettebø to BCC 5.6
|
||||
// July 16, 2002: Ported by Terje Slettebø and Pavel Vozenilek to BCC 5.6
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // TYPEINFO_INC_
|
||||
@
|
||||
#endif // LOKITYPEINFO_INC_
|
|
@ -19,7 +19,7 @@
|
|||
#define MULTIMETHODS_INC_
|
||||
|
||||
#include "Typelist.h"
|
||||
#include "Loki_TypeInfo.h" //### BCB
|
||||
#include "LokiTypeInfo.h" //### BCB
|
||||
#include "Functor.h"
|
||||
#include "AssocVector.h"
|
||||
#include <iostream> // ***
|
||||
|
|
|
@ -280,6 +280,9 @@ FixedAllocator::Chunk* FixedAllocator::VicinityFind(void* p)
|
|||
Chunk* loBound = &chunks_.front();
|
||||
Chunk* hiBound = &chunks_.back() + 1;
|
||||
|
||||
// Special case: deallocChunk_ is the last in the array
|
||||
if (hi == hiBound) hi = 0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (lo)
|
||||
|
|
|
@ -67,6 +67,27 @@ namespace Loki
|
|||
typedef U Result;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// class template IsSameType
|
||||
// Return true iff two given types are the same
|
||||
// Invocation: SameType<T, U>::value
|
||||
// where:
|
||||
// T and U are types
|
||||
// Result evaluates to true iff U == T (types equal)
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template <typename T, typename U>
|
||||
struct IsSameType
|
||||
{
|
||||
enum { value = false };
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct IsSameType<T,T>
|
||||
{
|
||||
enum { value = true };
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Helper types Small and Big - guarantee that sizeof(Small) < sizeof(Big)
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -368,6 +368,47 @@ namespace Loki
|
|||
namespace TL
|
||||
{
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// class template MakeTypelist
|
||||
// Takes a number of arguments equal to its numeric suffix
|
||||
// The arguments are type names.
|
||||
// MakeTypelist<T1, T2, ...>::Result
|
||||
// returns a typelist that is of T1, T2, ...
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template
|
||||
<
|
||||
typename T1 = NullType, typename T2 = NullType, typename T3 = NullType,
|
||||
typename T4 = NullType, typename T5 = NullType, typename T6 = NullType,
|
||||
typename T7 = NullType, typename T8 = NullType, typename T9 = NullType,
|
||||
typename T10 = NullType, typename T11 = NullType, typename T12 = NullType,
|
||||
typename T13 = NullType, typename T14 = NullType, typename T15 = NullType,
|
||||
typename T16 = NullType, typename T17 = NullType, typename T18 = NullType
|
||||
>
|
||||
struct MakeTypelist
|
||||
{
|
||||
private:
|
||||
typedef typename MakeTypelist
|
||||
<
|
||||
T2 , T3 , T4 ,
|
||||
T5 , T6 , T7 ,
|
||||
T8 , T9 , T10,
|
||||
T11, T12, T13,
|
||||
T14, T15, T16,
|
||||
T17, T18
|
||||
>
|
||||
::Result TailResult;
|
||||
|
||||
public:
|
||||
typedef Typelist<T1, TailResult> Result;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct MakeTypelist<>
|
||||
{
|
||||
typedef NullType Result;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// class template Length
|
||||
// Computes the length of a typelist
|
||||
// Invocation (TList is a typelist):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue