/// /// 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; } }