растет пока проект - много переписал, т.к. понял, что ужасно, в частности самый первый пример - массивы:
PHP код:
/**********************************************************************************************/
template< typename T >
class LTEXPORT Array
{
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Define functions types
typedef bool(*ArrayIfFunction)( const T& );
typedef bool(*ArraySortFunction)( const T&, const T& );
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Constructors
Array( ArrayKind kind = ARRAY_SIMPLE );
Array( ArraySortFunction func );
Array( size_t count );
Array( size_t count, T value, ... );
Array( size_t count, T* value );
Array( const std::vector<T>& value );
Array( const Array<T>& value );
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Add/Remove
void Add( const T& item, size_t count = 1 );
void Add( const Array<T>& value );
void Clear( void );
void Insert( size_t index, const T& item, size_t count = 1 );
void Insert( size_t index, const Array<T>& value );
void Prepend( const T& item, size_t count = 1 );
void Prepend( const Array<T>& value );
void Remove( const T& item );
void Remove( const Array<T>& value );
void RemoveAt( size_t index, size_t count = 1 );
void RemoveFirst( size_t count = 1 );
void RemoveIf( ArrayIfFunction func );
void RemoveLast( size_t count = 1 );
void RemoveRange( size_t start, size_t end = size_t( -1 ) );
void Resize( size_t size );
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Items Access
const Array<T>& Copy( size_t start, size_t end = size_t( -1 ) ) const;
const Array<T>& CopyIf( ArrayIfFunction func ) const;
size_t Count( void ) const;
size_t CountIf( ArrayIfFunction func ) const;
T& Item( size_t index );
T& First( void );
T& Last( void );
const T& Item( size_t index ) const;
const T& First( void ) const;
const T& Last( void ) const;
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Search
long Index( const T& item ) const;
const Array<size_t>& FindAll( const T& item );
long FindFirst( const T& item );
long FindLast( const T& item );
long Index( const Array<T>& values ) const;
const Array<size_t>& FindAll( const Array<T>& values );
long FindFirst( const Array<T>& values );
long FindLast( const Array<T>& values );
long FindNext( void );
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Sort
void MakeSorted( bool sorted = true, bool desc = false );
void MakeSorted( ArrayKind kind );
void MakeSorted( ArraySortFunction func );
void Sort( bool desc = false );
void Sort( size_t start, size_t end = size_t( -1 ), bool desc = false );
void Sort( ArraySortFunction func );
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Mutators
void Fill( const T& value, size_t start = 0, size_t end = size_t( -1 ) );
void FillIf( const T& value, ArrayIfFunction func );
void Replace( const T& from, const T& to );
void Replace( const Array<T>& from, const Array<T>& to );
void ReplaceIf( const T& from, const T& to, ArrayIfFunction func );
void Reverse( size_t start = 0, size_t end = size_t( -1 ) );
void Rotate( long count );
void Swap( size_t a, size_t b );
void Swap( size_t start1, size_t count, size_t start2 );
void Swap( Array<T>& value );
void Intersect( Array<T>& value );
void Unique( void );
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Other
bool Contain( const Array<T>& value ) const;
bool Equal( const Array<T>& value ) const;
bool Equal(
const Array<T>& value,
size_t start1,
size_t count,
size_t start2 = 0 ) const;
const T& Max( void ) const;
const T& Max( ArraySortFunction func ) const;
const T& Min( void );
const T& Min( ArraySortFunction func ) const;
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Export/Import
void FromArray( size_t count, T* value );
void FromFile( const String& path );
void FromString( const String& value );
void FromVector( const std::vector<T>& value );
void FromXML( const String& value );
T* ToArray( void ) const;
void ToFile( const String& path );
const String& ToString( void ) const;
const std::vector<T>& ToVector( void ) const;
const String& ToXML( void ) const;
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Operators
Array<T> operator+( const T& value );
Array<T> operator+( const Array<T>& value );
Array<T>& operator+=( const T& value );
Array<T>& operator+=( const Array<T>& value );
Array<T>& operator=( const Array<T>& value );
bool operator==( const Array<T>& value ) const;
bool operator!=( const Array<T>& value ) const;
T& operator[]( size_t index );
const T& operator[]( size_t index ) const;
};
пришлось частично обрезать - ограничение на длину сообщения, вообще учел все замечания zwitter'а и Marchelo, любой массив можно сделать отсортированным, новые элементы будут вставлятся так, что сохранить порядок, ес-но поиск и родственные операции( замена и т.п. ) работают с бинарным алгоритмом, вот архив:
ARRAY.ZIP
в остальном библиотека ощутимо выросла - больше 2Мб кода, не считая тестов, сейчас пишу плагин для поддержки wx, fktk уже на 80% готов, кстати отказался от идеи писать все абсолютно с нуля - за основу взят обрезанный вариант fltk, из которого выдраны все ненужные классы, благо ничего быстрее, удобнее и компактнее( статически слинкованный диалог на fltk весит около 100кб ) под все популярные ОС не найти, а мне немного надо - обработка основных событий и отрисовка примитивов + текста, ес-но плагин для использовния fltk "as is" также останется