22 #ifndef ULTIMA8_USECODE_UCLIST_H 23 #define ULTIMA8_USECODE_UCLIST_H 25 #include "common/array.h" 47 unsigned int _elementSize;
51 UCList(
unsigned int elementSize,
unsigned int capacity = 0) :
52 _elementSize(elementSize), _size(0) {
54 _elements.
reserve(_elementSize * capacity);
64 const uint8 *operator[](uint32 index)
const {
66 return &(_elements[index * _elementSize]);
69 uint16 getuint16(uint32 index)
const {
70 assert(_elementSize == 2);
71 uint16 t = _elements[index * _elementSize];
72 t += _elements[index * _elementSize + 1] << 8;
76 void append(
const uint8 *e) {
77 _elements.
resize((_size + 1) * _elementSize);
78 for (
unsigned int i = 0; i < _elementSize; i++)
79 _elements[_size * _elementSize + i] = e[i];
83 void appenduint16(uint16 val) {
84 assert(_elementSize == 2);
86 buf[0] =
static_cast<uint8
>(val);
87 buf[1] =
static_cast<uint8
>(val >> 8);
91 void remove(
const uint8 *e) {
94 for (
unsigned int i = 0; i < _size; i++) {
96 for (
unsigned int j = 0; j < _elementSize && equal; j++)
97 equal = equal && (_elements[i * _elementSize + j] == e[j]);
99 _elements.
erase(_elements.
begin() + i * _elementSize,
100 _elements.
begin() + (i + 1)*_elementSize);
107 bool inList(
const uint8 *e)
const {
108 for (
unsigned int i = 0; i < _size; i++) {
110 for (
unsigned int j = 0; j < _elementSize && equal; j++)
111 equal = (_elements[i * _elementSize + j] == e[j]);
118 void appendList(
const UCList &l) {
120 assert(_elementSize == l.getElementSize());
121 _elements.
reserve(_elementSize * (_size + l._size));
122 for (
unsigned int i = 0; i < l._size; i++)
125 void unionList(
const UCList &l) {
127 assert(_elementSize == l.getElementSize());
128 _elements.
reserve(_elementSize * (_size + l._size));
129 for (
unsigned int i = 0; i < l._size; i++)
133 void subtractList(
const UCList &l) {
135 assert(_elementSize == l.getElementSize());
136 for (
unsigned int i = 0; i < l._size; i++)
144 uint32 getSize()
const {
147 unsigned int getElementSize()
const {
151 void assign(uint32 index,
const uint8 *e) {
153 for (
unsigned int i = 0; i < _elementSize; i++)
154 _elements[index * _elementSize + i] = e[i];
157 void copyList(
const UCList &l) {
163 void copyStringList(
const UCList &l) ;
164 void unionStringList(
UCList &l);
165 void subtractStringList(
const UCList &l);
166 bool stringInList(uint16 str)
const;
167 void assignString(uint32 index, uint16 str);
168 void removeString(uint16 str,
bool nodel =
false);
170 uint16 getStringIndex(uint32 index)
const;
void clear()
Definition: array.h:321
iterator begin()
Definition: array.h:375
Definition: detection.h:27
void reserve(size_type newCapacity)
Definition: array.h:397
Definition: algorithm.h:29
void resize(size_type newSize)
Definition: array.h:412
iterator erase(iterator pos)
Definition: array.h:329