00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
#ifndef DSRTLIST_H
00036
#define DSRTLIST_H
00037
00038
#include "osconfig.h"
00039
00040
#include "oflist.h"
00041
00042
#include "dcerror.h"
00043
00044
00045
00046
00047
00048
00053 template<
class T>
class DSRListOfItems
00054 {
00055
00056
public:
00057
00060 DSRListOfItems()
00061 : ItemList()
00062 {
00063 }
00064
00068 DSRListOfItems(
const DSRListOfItems<T> &lst)
00069 : ItemList(lst.ItemList)
00070 {
00071 }
00072
00075 virtual ~DSRListOfItems()
00076 {
00077 }
00078
00083 inline DSRListOfItems<T> &
operator=(
const DSRListOfItems<T> &lst)
00084 {
00085
00086 ItemList.clear();
00087
const OFLIST_TYPENAME OFListConstIterator(T) endPos = lst.
ItemList.end();
00088 OFLIST_TYPENAME OFListConstIterator(T) iterator = lst.
ItemList.begin();
00089
while (iterator != endPos)
00090 {
00091 ItemList.push_back(*iterator);
00092 iterator++;
00093 }
00094
return *
this;
00095 }
00096
00099 inline void clear()
00100 {
00101 ItemList.clear();
00102 }
00103
00107 inline OFBool
isEmpty()
const
00108
{
00109
return ItemList.empty();
00110 }
00111
00115 inline size_t
getNumberOfItems()
const
00116
{
00117
return ItemList.size();
00118 }
00119
00124 OFBool
isElement(
const T &item)
const
00125
{
00126 OFLIST_TYPENAME OFListConstIterator(T) iterator = ItemList.begin();
00127
return gotoItem(item, iterator);
00128 }
00129
00134 const T &
getItem(
const size_t idx)
const
00135
{
00136 OFLIST_TYPENAME OFListConstIterator(T) iterator = ItemList.begin();
00137
if (
gotoItemPos(idx, iterator))
00138
return *iterator;
00139
else
00140
return EmptyItem;
00141 }
00142
00149 OFCondition getItem(
const size_t idx,
00150 T &item)
const
00151
{
00152
OFCondition result = EC_IllegalParameter;
00153 OFLIST_TYPENAME OFListConstIterator(T) iterator = ItemList.begin();
00154
if (
gotoItemPos(idx, iterator))
00155 {
00156 item = *iterator;
00157 result = EC_Normal;
00158 }
00159
return result;
00160 }
00161
00165 inline void addItem(
const T &item)
00166 {
00167 ItemList.push_back(item);
00168 }
00169
00173 inline void addOnlyNewItem(
const T &item)
00174 {
00175
if (!
isElement(item))
00176 ItemList.push_back(item);
00177 }
00178
00184 OFCondition insertItem(
const size_t idx,
00185
const T &item)
00186 {
00187
OFCondition result = EC_IllegalParameter;
00188
if (idx == ItemList.size() + 1)
00189 {
00190
00191 ItemList.push_back(item);
00192 result = EC_Normal;
00193 }
else {
00194 OFLIST_TYPENAME OFListIterator(T) iterator = ItemList.begin();
00195
if (
gotoItemPos(idx, iterator))
00196 {
00197 ItemList.insert(iterator, 1, item);
00198 result = EC_Normal;
00199 }
00200 }
00201
return result;
00202 }
00203
00208 OFCondition removeItem(
const size_t idx)
00209 {
00210
OFCondition result = EC_IllegalParameter;
00211 OFLIST_TYPENAME OFListIterator(T) iterator = ItemList.begin();
00212
if (
gotoItemPos(idx, iterator))
00213 {
00214 ItemList.erase(iterator);
00215 result = EC_Normal;
00216 }
00217
return result;
00218 }
00219
00223 static const T EmptyItem;
00224
00225
00226
protected:
00227
00233 OFBool
gotoItemPos(size_t idx,
00234 OFLIST_TYPENAME OFListConstIterator(T) &iterator)
const
00235
{
00236 OFBool result = OFFalse;
00237
if (idx > 0)
00238 {
00239
const OFLIST_TYPENAME OFListConstIterator(T) endPos = ItemList.end();
00240
while ((--idx > 0) && (iterator != endPos))
00241 iterator++;
00242
00243 result = (idx == 0);
00244 }
00245
return result;
00246 }
00247
00253 OFBool
gotoItem(
const T &item,
00254 OFLIST_TYPENAME OFListConstIterator(T) &iterator)
const
00255
{
00256
const OFLIST_TYPENAME OFListConstIterator(T) endPos = ItemList.end();
00257
00258
while ((iterator != endPos) && (!(*iterator == item)))
00259 iterator++;
00260
return (iterator != endPos);
00261 }
00262
00263
protected:
00264
00266 OFList<T> ItemList;
00267 };
00268
00269
00270
#endif
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315