+
+2001-02-12 André Pönitz <poenitz@htwm.de>
+ * array.[hC]: replace private variable maxsize_ with call
+ to bf_.size()
+
2001-02-09 Lars Gullik Bjønnes <larsbj@lyx.org>
* array.h: made all variables private, removed friend, added new
int MathedArray::maxsize() const
{
- return maxsize_;
+ return static_cast<int>(bf_.size());
+}
+
+
+void MathedArray::need_size(int needed)
+{
+ if (needed >= maxsize())
+ resize(needed);
}
newsize += ARRAY_STEP - (newsize % ARRAY_STEP);
bf_.resize(newsize);
if (last_ >= newsize) last_ = newsize - 1;
- maxsize_ = newsize;
bf_[last_] = 0;
}
MathedArray::MathedArray(int size)
{
- maxsize_ = (size < ARRAY_MIN_SIZE) ? ARRAY_MIN_SIZE : size;
- bf_.resize(maxsize_);
+ int newsize = (size < ARRAY_MIN_SIZE) ? ARRAY_MIN_SIZE : size;
+ bf_.resize(newsize);
last_ = 0;
}
void MathedArray::move(int p, int shift)
{
if (p <= last_) {
- if (last_ + shift >= maxsize_) {
- resize(last_ + shift);
- }
+ need_size(last_ + shift);
memmove(&bf_[p + shift], &bf_[p], last_ - p);
last_ += shift;
bf_[last_] = 0;
void MathedArray::insert(int pos, byte c)
{
if (pos < 0) pos = last_;
- if (pos >= maxsize_)
- resize(maxsize_ + ARRAY_STEP);
+
+ // I think this should be replaced by need_size(pos). Note that the
+ // current code looks troublesome if pos > maxsize() + ARRAY_STEP.
+ if (pos >= maxsize())
+ resize(maxsize() + ARRAY_STEP);
bf_[pos] = c;
if (pos >= last_)
last_ = pos + 1;
void resize(int newsize);
///
int maxsize() const;
+ /// Make sure we can access at least \a needed elements
+ void need_size(int needed);
private:
/// Buffer
buffer_type bf_;
/// Last position inserted.
int last_;
- /// Max size of the array.
- int maxsize_;
};
#endif
if (pos < array->last())
array->move(pos, shift);
else {
- if (array->last() + shift >= array->maxsize()) {
- array->resize(array->last() + shift);
- }
+ array->need_size(array->last() + shift);
array->last(array->last() + shift);
(*array)[array->last()] = '\0';
}
array->move(pos, shift);
if (fg) (*array)[pos + shift - 1] = fcode;
} else {
- if (array->last() + shift >= array->maxsize()) {
- array->resize(array->last() + shift);
- }
+ array->need_size(array->last() + shift);
array->last(array->last() + shift);
}
(*array)[array->last()] = '\0';