summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/core/opimrecordlist.h
Side-by-side diff
Diffstat (limited to 'libopie2/opiepim/core/opimrecordlist.h') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/core/opimrecordlist.h17
1 files changed, 12 insertions, 5 deletions
diff --git a/libopie2/opiepim/core/opimrecordlist.h b/libopie2/opiepim/core/opimrecordlist.h
index 1d5027f..0459f41 100644
--- a/libopie2/opiepim/core/opimrecordlist.h
+++ b/libopie2/opiepim/core/opimrecordlist.h
@@ -20,48 +20,49 @@
++= -. .` .: details.
: = ...= . :.=-
-. .:....=;==+<; You should have received a copy of the GNU
-_. . . )=. = Library General Public License along with
-- :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#ifndef ORECORDLIST_H
#define ORECORDLIST_H
/* OPIE */
#include <opie2/opimtemplatebase.h>
#include <opie2/opimrecord.h>
//#include <opie2/odebug.h>
/* QT */
#include <qarray.h>
namespace Opie
{
+template<class T> class OPimAccessTemplate;
class OPimRecordListIteratorPrivate;
/**
* Our List Iterator
* it behaves like STL or Qt
*
* for(it = list.begin(); it != list.end(); ++it )
* doSomeCoolStuff( (*it) );
*/
template <class T> class OPimRecordList;
template <class T = OPimRecord>
class OPimRecordListIterator
{
friend class OPimRecordList<T>;
public:
typedef OTemplateBase<T> Base;
/**
* The c'tor used internally from
* OPimRecordList
*/
OPimRecordListIterator( const QArray<int>, const Base* );
/**
@@ -99,145 +100,146 @@ class OPimRecordListIterator
*/
void setCurrent( uint cur );
private:
QArray<int> m_uids;
uint m_current;
const Base* m_temp;
bool m_end : 1;
T m_record;
bool m_direction : 1;
/* d pointer for future versions */
OPimRecordListIteratorPrivate *d;
};
class OPimRecordListPrivate;
/**
* The recordlist used as a return type
* from OPimAccessTemplate
*/
template <class T = OPimRecord >
class OPimRecordList
{
+ template<class> friend class OPimAccessTemplate;
public:
typedef OTemplateBase<T> Base;
typedef OPimRecordListIterator<T> Iterator;
/**
* c'tor
*/
- OPimRecordList ()
- {}
+ OPimRecordList (){}
OPimRecordList( const QArray<int>& ids,
- const Base* );
+ const Base* );
~OPimRecordList();
/**
* the first iterator
*/
Iterator begin();
/**
* the end
*/
Iterator end();
/**
* the number of items in the list
*/
uint count() const;
T operator[] ( uint i );
int uidAt( uint i );
/**
* Remove the contact with given uid
*/
bool remove( int uid );
/*
ConstIterator begin()const;
ConstIterator end()const;
*/
+ protected:
+ UIDArray uids()const;
+
private:
QArray<int> m_ids;
const Base* m_acc;
OPimRecordListPrivate *d;
};
/* ok now implement it */
template <class T>
OPimRecordListIterator<T>::OPimRecordListIterator()
{
m_current = 0;
m_temp = 0l;
m_end = true;
m_record = T();
/* forward */
m_direction = TRUE;
}
template <class T>
OPimRecordListIterator<T>::~OPimRecordListIterator()
{
/* nothing to delete */
}
template <class T>
OPimRecordListIterator<T>::OPimRecordListIterator( const OPimRecordListIterator<T>& it )
{
- //owarn << "OPimRecordListIterator copy c'tor" << oendl;
m_uids = it.m_uids;
m_current = it.m_current;
m_temp = it.m_temp;
m_end = it.m_end;
m_record = it.m_record;
m_direction = it.m_direction;
}
template <class T>
OPimRecordListIterator<T> &OPimRecordListIterator<T>::operator=( const OPimRecordListIterator<T>& it )
{
m_uids = it.m_uids;
m_current = it.m_current;
m_temp = it.m_temp;
m_end = it.m_end;
m_record = it.m_record;
return *this;
}
template <class T>
T OPimRecordListIterator<T>::operator*()
{
- //owarn << "operator* " << m_current << " " << m_uids[m_current] << oendl;
if ( !m_end )
m_record = m_temp->find( m_uids[ m_current ], m_uids, m_current,
m_direction ? Base::Forward :
Base::Reverse );
else
m_record = T();
return m_record;
}
template <class T>
OPimRecordListIterator<T> &OPimRecordListIterator<T>::operator++()
{
m_direction = true;
if ( m_current < m_uids.count() )
{
m_end = false;
++m_current;
}
else
m_end = true;
return *this;
@@ -378,26 +380,31 @@ template <class T>
bool OPimRecordList<T>::remove( int uid )
{
QArray<int> copy( m_ids.count() );
int counter = 0;
bool ret_val = false;
for ( uint i = 0; i < m_ids.count(); i++ )
{
if ( m_ids[ i ] != uid )
{
copy[ counter++ ] = m_ids[ i ];
}
else
ret_val = true;
}
copy.resize( counter );
m_ids = copy;
return ret_val;
}
+template<class T>
+UIDArray OPimRecordList<T>::uids()const {
+ return m_ids;
+}
+
}
#endif