///
/// Copyright © 2003-2008 JetBrains s.r.o.
/// You may distribute under the terms of the GNU General Public License, as published by the Free Software Foundation, version 2 (see License.txt in the repository root folder).
///
#pragma unmanaged
#include "TypeFactory.h"
namespace DBIndex
{
BTreeKeyBase* TypeFactory::NewKey( int type )
{
switch( type )
{
case int_Key: return new BTreeKey();
case int_int_Key: return new BTreeKey< CompoundKey >();
case int_datetime_Key: return new BTreeKey< CompoundKey >();
case int_int_int_Key: return new BTreeKey< CompoundKeyWithValue >();
case int_int_datetime_Key: return new BTreeKey< CompoundKeyWithValue >();
case int_datetime_int_Key: return new BTreeKey< CompoundKeyWithValue >();
case long_Key: return new BTreeKey();
case datetime_Key: return new BTreeKey();
case double_Key: return new BTreeKey();
}
return 0;
}
BTreePageBase* TypeFactory::NewPage( int type )
{
switch( type )
{
case int_Key: return new BTreePage( 0, 0 );
case int_int_Key: return new BTreePage< CompoundKey >( 0, 0 );
case int_datetime_Key: return new BTreePage< CompoundKey >( 0, 0 );
case int_int_int_Key: return new BTreePage< CompoundKeyWithValue >( 0, 0 );
case int_int_datetime_Key: return new BTreePage< CompoundKeyWithValue >( 0, 0 );
case int_datetime_int_Key: return new BTreePage< CompoundKeyWithValue >( 0, 0 );
case long_Key: return new BTreePage( 0, 0 );
case datetime_Key: return new BTreePage( 0, 0 );
case double_Key: return new BTreePage( 0, 0 );
}
return 0;
}
BTreeHeaderBase* TypeFactory::NewHeader( int type )
{
switch( type )
{
case int_Key: return new BTreeHeader();
case int_int_Key: return new BTreeHeader< CompoundKey >();
case int_datetime_Key: return new BTreeHeader< CompoundKey >();
case int_int_int_Key: return new BTreeHeader< CompoundKeyWithValue >();
case int_int_datetime_Key: return new BTreeHeader< CompoundKeyWithValue >();
case int_datetime_int_Key: return new BTreeHeader< CompoundKeyWithValue >();
case long_Key: return new BTreeHeader();
case datetime_Key: return new BTreeHeader();
case double_Key: return new BTreeHeader();
}
return 0;
}
BTreeHeaderIteratorBase* TypeFactory::NewHeaderIterator( int type )
{
switch( type )
{
case int_Key: return new BTreeHeaderIterator();
case int_int_Key: return new BTreeHeaderIterator< CompoundKey >();
case int_datetime_Key: return new BTreeHeaderIterator< CompoundKey >();
case int_int_int_Key: return new BTreeHeaderIterator< CompoundKeyWithValue >();
case int_int_datetime_Key: return new BTreeHeaderIterator< CompoundKeyWithValue >();
case int_datetime_int_Key: return new BTreeHeaderIterator< CompoundKeyWithValue >();
case long_Key: return new BTreeHeaderIterator();
case datetime_Key: return new BTreeHeaderIterator();
case double_Key: return new BTreeHeaderIterator();
}
return 0;
}
IKeyComparer* TypeFactory::NewKeyComparer( int type )
{
switch( type )
{
case int_Key: return BTreeKey::GetKeyComparer();
case int_int_Key: return BTreeKey< CompoundKey >::GetKeyComparer();
case int_datetime_Key: return BTreeKey< CompoundKey >::GetKeyComparer();
case int_int_int_Key: return BTreeKey< CompoundKeyWithValue >::GetKeyComparer();
case int_int_datetime_Key: return BTreeKey< CompoundKeyWithValue >::GetKeyComparer();
case int_datetime_int_Key: return BTreeKey< CompoundKeyWithValue >::GetKeyComparer();
case long_Key: return BTreeKey::GetKeyComparer();
case datetime_Key: return BTreeKey::GetKeyComparer();
case double_Key: return BTreeKey::GetKeyComparer();
}
return 0;
}
void TypeFactory::DeleteKey( BTreeKeyBase* key )
{
delete key;
}
void TypeFactory::DeletePage( BTreePageBase* page )
{
delete page;
}
void TypeFactory::DeleteHeader( BTreeHeaderBase* header )
{
delete header;
}
void TypeFactory::DeleteHeaderIterator( BTreeHeaderIteratorBase* iterator )
{
delete iterator;
}
void TypeFactory::DeleteKeyComparer( IKeyComparer* comparer )
{
delete comparer;
}
}