User-defined data structures can be used as actual implementation parameters provided they fulfill certain requirements.
Any class dic_impl that provides the following operations can be used as actual implementation parameter for the _dictionary< K,I,dic_impl> and the _d_array< I,E,dic_impl> data types (cf. sections Dictionaries and Dictionary Arrays).
class dic_impl {
virtual int cmp(GenPtr, GenPtr) const = 0;
virtual int int_type() const = 0;
virtual void clear_key(GenPtr&) const = 0;
virtual void clear_inf(GenPtr&) const = 0;
virtual void copy_key(GenPtr&) const = 0;
virtual void copy_inf(GenPtr&) const = 0;
public:
typedef ... item;
dic_impl();
dic_impl(const dic_impl&);
virtual ~dic_impl();
dic_impl& operator=(const dic_impl&);
GenPtr key(dic_impl_item) const;
GenPtr inf(dic_impl_item) const;
dic_impl_item insert(GenPtr,GenPtr);
dic_impl_item lookup(GenPtr) const;
dic_impl_item first_item() const;
dic_impl_item next_item(dic_impl_item) const;
dic_impl_item item(void* p) const
{ return dic_impl_item(p); }
void change_inf(dic_impl_item,GenPtr);
void del_item(dic_impl_item);
void del(GenPtr);
void clear();
int size() const;
};
Any class prio_impl that provides the following operations can be used as actual implementation parameter for the _priority_queue< K,I,prio_impl> data type (cf. section Priority Queues).
class prio_impl $\{$
virtual int cmp(GenPtr, GenPtr) const = 0;
virtual int int_type() const = 0;
virtual void clear_key(GenPtr&) const = 0;
virtual void clear_inf(GenPtr&) const = 0;
virtual void copy_key(GenPtr&) const = 0;
virtual void copy_inf(GenPtr&) const = 0;
public:
typedef ... item;
prio_impl();
prio_impl(int);
prio_impl(int,int);
prio_impl(const prio_impl&);
virtual ~prio_impl();
prio_impl& operator=(const prio_impl&);
prio_impl_item insert(GenPtr,GenPtr);
prio_impl_item find_min() \ const;
prio_impl_item first_item() const;
prio_impl_item next_item(prio_impl_item) const;
prio_impl_item item(void* p) const
{ return prio_impl_item(p); }
GenPtr key(prio_impl_item) const;
GenPtr inf(prio_impl_item) const;
void del_min();
void del_item(prio_impl_item);
void decrease_key(prio_impl_item,GenPtr);
void change_inf(prio_impl_item,GenPtr);
void clear();
int size() const;
};
Any class seq_impl that provides the following operations can be used as actual implementation parameter for the _sortseq< K,I,seq_impl> data type (cf. section Sorted Sequences).
class seq_impl {
virtual int cmp(GenPtr, GenPtr) const = 0;
virtual int int_type() const = 0;
virtual void clear_key(GenPtr&) const = 0;
virtual void clear_inf(GenPtr&) const = 0;
virtual void copy_key(GenPtr&) const = 0;
virtual void copy_inf(GenPtr&) const = 0;
public:
typedef ... item;
seq_impl();
seq_impl(const seq_impl&);
virtual ~seq_impl();
seq_impl& operator=(const seq_impl&);
seq_impl& conc(seq_impl&);
seq_impl_item insert(GenPtr,GenPtr);
seq_impl_item insert_at_item(seq_impl_item,GenPtr,GenPtr);
seq_impl_item lookup(GenPtr) const;
seq_impl_item locate(GenPtr) const;
seq_impl_item locate_pred(GenPtr) const;
seq_impl_item succ(seq_impl_item) const;
seq_impl_item pred(seq_impl_item) const;
seq_impl_item item(void* p) const
{ return seq_impl_item(p); }
GenPtr key(seq_impl_item) const;
GenPtr inf(seq_impl_item) const;
void del(GenPtr);
void del_item(seq_impl_item);
void change_inf(seq_impl_item,GenPtr);
void split_at_item(seq_impl_item,seq_impl&,seq_impl&);
void reverse_items(seq_impl_item,seq_impl_item);
void clear();
int size() const;
};