added some move-sensitive functions to Array
This commit is contained in:
parent
8d1704c0a4
commit
1e839dba3d
@ -122,6 +122,26 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
|
||||||
|
Array (SelfType&& array):
|
||||||
|
Mmged(array.getMmgr()),
|
||||||
|
count(0), capacity(0), buffer(QSE_NULL)
|
||||||
|
{
|
||||||
|
if (array.buffer)
|
||||||
|
{
|
||||||
|
this->buffer = array.buffer;
|
||||||
|
this->count = array.count;
|
||||||
|
this->capacity = array.capacity;
|
||||||
|
|
||||||
|
array.buffer = QSE_NULL;
|
||||||
|
array.count = 0;
|
||||||
|
array.capacity = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
~Array ()
|
~Array ()
|
||||||
{
|
{
|
||||||
this->clear (true);
|
this->clear (true);
|
||||||
@ -142,6 +162,33 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
SelfType& operator= (SelfType&& array)
|
||||||
|
{
|
||||||
|
if (this != &array)
|
||||||
|
{
|
||||||
|
this->clear (true);
|
||||||
|
|
||||||
|
if (array.buffer)
|
||||||
|
{
|
||||||
|
// TODO: show i block move if mmgrs are differnt
|
||||||
|
// between *this and array?
|
||||||
|
|
||||||
|
this->setMmgr (array.getMmgr()); // copy over mmgr.
|
||||||
|
|
||||||
|
this->buffer = array.buffer;
|
||||||
|
this->count = array.count;
|
||||||
|
this->capacity = array.capacity;
|
||||||
|
|
||||||
|
array.buffer = QSE_NULL;
|
||||||
|
array.count = 0;
|
||||||
|
array.capacity = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
T* clone_buffer (const T* srcbuf, qse_size_t capa, qse_size_t cnt)
|
T* clone_buffer (const T* srcbuf, qse_size_t capa, qse_size_t cnt)
|
||||||
{
|
{
|
||||||
@ -157,7 +204,7 @@ protected:
|
|||||||
{
|
{
|
||||||
for (index = 0; index < cnt; index++)
|
for (index = 0; index < cnt; index++)
|
||||||
{
|
{
|
||||||
// copy-construct each element.
|
// copy-construct each element.
|
||||||
new((QSE::Mmgr*)QSE_NULL, &tmp[index]) T(srcbuf[index]);
|
new((QSE::Mmgr*)QSE_NULL, &tmp[index]) T(srcbuf[index]);
|
||||||
this->_positioner (tmp[index], index);
|
this->_positioner (tmp[index], index);
|
||||||
}
|
}
|
||||||
@ -173,12 +220,61 @@ protected:
|
|||||||
tmp[index].~T ();
|
tmp[index].~T ();
|
||||||
}
|
}
|
||||||
::operator delete (tmp, this->getMmgr());
|
::operator delete (tmp, this->getMmgr());
|
||||||
|
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
T* clone_buffer_by_moving (T* srcbuf, qse_size_t capa, qse_size_t cnt)
|
||||||
|
{
|
||||||
|
QSE_ASSERT (capa > 0);
|
||||||
|
QSE_ASSERT (cnt <= capa);
|
||||||
|
|
||||||
|
qse_size_t index;
|
||||||
|
|
||||||
|
//T* tmp = new T[capa];
|
||||||
|
T* tmp = (T*)::operator new (capa * QSE_SIZEOF(*tmp), this->getMmgr());
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (index = 0; index < cnt; index++)
|
||||||
|
{
|
||||||
|
// move-construct(or copy-construct) each element.
|
||||||
|
new((QSE::Mmgr*)QSE_NULL, &tmp[index]) T((T&&)srcbuf[index]);
|
||||||
|
this->_positioner (tmp[index], index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
// in case move-constructor(or copy-constructor) raises an exception.
|
||||||
|
QSE_ASSERT (tmp != QSE_NULL);
|
||||||
|
while (index > 0)
|
||||||
|
{
|
||||||
|
--index;
|
||||||
|
|
||||||
|
// if move-contruction ended up with an exception,
|
||||||
|
// the original array can get into an unknown state eventually.
|
||||||
|
// i don't attempt to restore the moved object as an exception
|
||||||
|
// may be raised during restoration.
|
||||||
|
// an exception
|
||||||
|
//try { new((QSE::Mmgr*)QSE_NULL, &srcbuf[index]) T((T&&)tmp[index]); }
|
||||||
|
//catch (...) {}
|
||||||
|
|
||||||
|
this->_positioner (tmp[index], INVALID_INDEX);
|
||||||
|
tmp[index].~T ();
|
||||||
|
}
|
||||||
|
::operator delete (tmp, this->getMmgr());
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void put_item (qse_size_t index, const T& value)
|
void put_item (qse_size_t index, const T& value)
|
||||||
{
|
{
|
||||||
if (index >= this->count)
|
if (index >= this->count)
|
||||||
@ -190,12 +286,31 @@ protected:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// there is an old value in the position.
|
// there is an old value in the position. do classic-assignment
|
||||||
this->buffer[index] = value;
|
this->buffer[index] = value;
|
||||||
this->_positioner (this->buffer[index], index);
|
this->_positioner (this->buffer[index], index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
void put_item_by_moving (qse_size_t index, T&& value)
|
||||||
|
{
|
||||||
|
if (index >= this->count)
|
||||||
|
{
|
||||||
|
// no value exists in the given position.
|
||||||
|
// i can move-construct the value.
|
||||||
|
new((QSE::Mmgr*)QSE_NULL, &this->buffer[index]) T((T&&)value);
|
||||||
|
this->_positioner (this->buffer[index], index);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// there is an old value in the position. do move-assignment.
|
||||||
|
this->buffer[index] = (T&&)value;
|
||||||
|
this->_positioner (this->buffer[index], index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void clear_all_items ()
|
void clear_all_items ()
|
||||||
{
|
{
|
||||||
QSE_ASSERT (this->count <= 0 || (this->count >= 1 && this->buffer));
|
QSE_ASSERT (this->count <= 0 || (this->count >= 1 && this->buffer));
|
||||||
@ -303,14 +418,9 @@ public:
|
|||||||
this->update (index, value);
|
this->update (index, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
qse_size_t insert (qse_size_t index, const T& value)
|
protected:
|
||||||
|
void secure_slot (qse_size_t index)
|
||||||
{
|
{
|
||||||
// Unlike insert() in RedBlackTree and HashList,
|
|
||||||
// it inserts an item when index exists in the existing array.
|
|
||||||
// It is because array allows duplicate items.
|
|
||||||
// RedBlckTree::insert() and HashList::insert() return failure
|
|
||||||
// if existing item exists.
|
|
||||||
|
|
||||||
if (index >= this->capacity)
|
if (index >= this->capacity)
|
||||||
{
|
{
|
||||||
// the position to add the element is beyond the
|
// the position to add the element is beyond the
|
||||||
@ -335,8 +445,11 @@ public:
|
|||||||
// shift the existing elements to the back by one slot.
|
// shift the existing elements to the back by one slot.
|
||||||
for (qse_size_t i = this->count; i > index; i--)
|
for (qse_size_t i = this->count; i > index; i--)
|
||||||
{
|
{
|
||||||
//this->buffer[i] = this->buffer[i - 1];
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
this->put_item (i, this->buffer[i - 1]);
|
this->put_item_by_moving (i, (T&&)this->buffer[i - 1]);
|
||||||
|
#else
|
||||||
|
this->put_item (i, this->buffer[i - 1]);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (index > this->count)
|
else if (index > this->count)
|
||||||
@ -349,6 +462,17 @@ public:
|
|||||||
this->_positioner (this->buffer[i], i);
|
this->_positioner (this->buffer[i], i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
qse_size_t insert (qse_size_t index, const T& value)
|
||||||
|
{
|
||||||
|
// Unlike insert() in RedBlackTree and HashList,
|
||||||
|
// it inserts an item when index exists in the existing array.
|
||||||
|
// It is because array allows duplicate items.
|
||||||
|
// RedBlckTree::insert() and HashList::insert() return failure
|
||||||
|
// if existing item exists.
|
||||||
|
this->secure_slot (index);
|
||||||
|
|
||||||
//this->buffer[index] = value;
|
//this->buffer[index] = value;
|
||||||
this->put_item (index, value);
|
this->put_item (index, value);
|
||||||
@ -358,6 +482,25 @@ public:
|
|||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
qse_size_t insert (qse_size_t index, T&& value)
|
||||||
|
{
|
||||||
|
// Unlike insert() in RedBlackTree and HashList,
|
||||||
|
// it inserts an item when index exists in the existing array.
|
||||||
|
// It is because array allows duplicate items.
|
||||||
|
// RedBlckTree::insert() and HashList::insert() return failure
|
||||||
|
// if existing item exists.
|
||||||
|
this->secure_slot (index);
|
||||||
|
|
||||||
|
//this->buffer[index] = value;
|
||||||
|
this->put_item_by_moving (index, (T&&)value);
|
||||||
|
if (index > this->count) this->count = index + 1;
|
||||||
|
else this->count++;
|
||||||
|
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
qse_size_t update (qse_size_t index, const T& value)
|
qse_size_t update (qse_size_t index, const T& value)
|
||||||
{
|
{
|
||||||
QSE_ASSERT (index < this->count);
|
QSE_ASSERT (index < this->count);
|
||||||
@ -366,6 +509,16 @@ public:
|
|||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
qse_size_t update (qse_size_t index, T&& value)
|
||||||
|
{
|
||||||
|
QSE_ASSERT (index < this->count);
|
||||||
|
this->buffer[index] = (T&&)value;
|
||||||
|
this->_positioner (this->buffer[index], index);
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
qse_size_t upsert (qse_size_t index, const T& value)
|
qse_size_t upsert (qse_size_t index, const T& value)
|
||||||
{
|
{
|
||||||
if (index < this->count)
|
if (index < this->count)
|
||||||
@ -374,6 +527,16 @@ public:
|
|||||||
return this->insert (index, value);
|
return this->insert (index, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
qse_size_t upsert (qse_size_t index, T&& value)
|
||||||
|
{
|
||||||
|
if (index < this->count)
|
||||||
|
return this->update (index, (T&&)value);
|
||||||
|
else
|
||||||
|
return this->insert (index, (T&&)value);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
qse_size_t ensert (qse_size_t index, const T& value)
|
qse_size_t ensert (qse_size_t index, const T& value)
|
||||||
{
|
{
|
||||||
if (index < this->count)
|
if (index < this->count)
|
||||||
@ -382,15 +545,27 @@ public:
|
|||||||
return this->insert (index, value);
|
return this->insert (index, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
qse_size_t ensert (qse_size_t index, T&& value)
|
||||||
|
{
|
||||||
|
if (index < this->count)
|
||||||
|
return index; // no update
|
||||||
|
else
|
||||||
|
return this->insert (index, (T&&)value);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void remove (qse_size_t index)
|
void remove (qse_size_t index)
|
||||||
{
|
{
|
||||||
this->remove (index, index);
|
this->remove (index, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void remove (qse_size_t from_index, qse_size_t to_index)
|
void remove (qse_size_t from_index, qse_size_t size)
|
||||||
{
|
{
|
||||||
QSE_ASSERT (from_index < this->count);
|
if (size <= 0 || this->count <= 0 || from_index >= this->count) return;
|
||||||
QSE_ASSERT (to_index < this->count);
|
|
||||||
|
qse_size_t to_index = from_index + size - 1;
|
||||||
|
if (to_index >= this->count) to_index = this->count - 1;
|
||||||
|
|
||||||
qse_size_t j = from_index;
|
qse_size_t j = from_index;
|
||||||
qse_size_t i = to_index + 1;
|
qse_size_t i = to_index + 1;
|
||||||
@ -409,7 +584,11 @@ public:
|
|||||||
//this->_positioner (this->buffer[j], j);
|
//this->_positioner (this->buffer[j], j);
|
||||||
|
|
||||||
// 2. operator assignment
|
// 2. operator assignment
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
this->buffer[j] = (T&&)this->buffer[i];
|
||||||
|
#else
|
||||||
this->buffer[j] = this->buffer[i];
|
this->buffer[j] = this->buffer[i];
|
||||||
|
#endif
|
||||||
this->_positioner (this->buffer[j], j);
|
this->_positioner (this->buffer[j], j);
|
||||||
|
|
||||||
j++; i++;
|
j++; i++;
|
||||||
@ -505,7 +684,11 @@ public:
|
|||||||
qse_size_t cnt = this->count;
|
qse_size_t cnt = this->count;
|
||||||
if (cnt > capa) cnt = capa;
|
if (cnt > capa) cnt = capa;
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
T* tmp = this->clone_buffer_by_moving (this->buffer, capa, cnt);
|
||||||
|
#else
|
||||||
T* tmp = this->clone_buffer (this->buffer, capa, cnt);
|
T* tmp = this->clone_buffer (this->buffer, capa, cnt);
|
||||||
|
#endif
|
||||||
this->clear (true);
|
this->clear (true);
|
||||||
this->buffer = tmp;
|
this->buffer = tmp;
|
||||||
this->capacity = capa;
|
this->capacity = capa;
|
||||||
@ -565,7 +748,6 @@ public:
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
void rotate (int dir, qse_size_t n)
|
void rotate (int dir, qse_size_t n)
|
||||||
{
|
{
|
||||||
qse_size_t first, last, cnt, index, nk;
|
qse_size_t first, last, cnt, index, nk;
|
||||||
|
@ -135,6 +135,12 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
BinaryHeap (SelfType& heap): ParentType (heap)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
~BinaryHeap ()
|
~BinaryHeap ()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -148,6 +154,17 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
SelfType& operator= (SelfType&& heap)
|
||||||
|
{
|
||||||
|
if (this != &heap)
|
||||||
|
{
|
||||||
|
ParentType::operator= (heap);
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/// The isEmpty() function returns true if the binary heap contains no
|
/// The isEmpty() function returns true if the binary heap contains no
|
||||||
/// item and false otherwise.
|
/// item and false otherwise.
|
||||||
bool isEmpty() const { return ParentType::isEmpty(); }
|
bool isEmpty() const { return ParentType::isEmpty(); }
|
||||||
@ -195,6 +212,19 @@ public:
|
|||||||
return this->sift_up(index);
|
return this->sift_up(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
qse_size_t insert (T&& value)
|
||||||
|
{
|
||||||
|
qse_size_t index = this->count;
|
||||||
|
|
||||||
|
// add the item at the back of the array
|
||||||
|
ParentType::insert (index, (T&&)value);
|
||||||
|
|
||||||
|
// move the item up to the top if it's greater than the up item
|
||||||
|
return this->sift_up(index);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/// The update() function changes the item at the specified \a index
|
/// The update() function changes the item at the specified \a index
|
||||||
/// to a new item \a value.
|
/// to a new item \a value.
|
||||||
qse_size_t update (qse_size_t index, const T& value)
|
qse_size_t update (qse_size_t index, const T& value)
|
||||||
@ -206,15 +236,29 @@ public:
|
|||||||
return (this->greater_than(value, old))? this->sift_up(index): this->sift_down(index);
|
return (this->greater_than(value, old))? this->sift_up(index): this->sift_down(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
qse_size_t update (qse_size_t index, T&& value)
|
||||||
|
{
|
||||||
|
T old = this->buffer[index];
|
||||||
|
|
||||||
|
ParentType::update (index, (T&&)value);
|
||||||
|
|
||||||
|
return (this->greater_than(value, old))? this->sift_up(index): this->sift_down(index);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/// The remove() function removes an item at the specified \a index.
|
/// The remove() function removes an item at the specified \a index.
|
||||||
void remove (qse_size_t index)
|
void remove (qse_size_t index)
|
||||||
{
|
{
|
||||||
QSE_ASSERT (index < this->count);
|
QSE_ASSERT (index < this->count);
|
||||||
|
|
||||||
|
// TODO: move semantics herr
|
||||||
|
//BEGIN
|
||||||
// copy the last item to the position to remove
|
// copy the last item to the position to remove
|
||||||
T old = this->buffer[index];
|
T old = this->buffer[index];
|
||||||
|
|
||||||
ParentType::update (index, this->buffer[this->count - 1]);
|
ParentType::update (index, this->buffer[this->count - 1]);
|
||||||
|
// END..
|
||||||
|
|
||||||
// delete the last item
|
// delete the last item
|
||||||
ParentType::remove (this->count - 1);
|
ParentType::remove (this->count - 1);
|
||||||
|
@ -123,7 +123,7 @@ public:
|
|||||||
|
|
||||||
// must copy the memory manager pointer as the item
|
// must copy the memory manager pointer as the item
|
||||||
// to be copied is allocated using the memory manager of sp.
|
// to be copied is allocated using the memory manager of sp.
|
||||||
this->setMmgr (sp.getMmgr());
|
this->setMmgr (sp.getMmgr()); // copy over mmgr
|
||||||
|
|
||||||
this->_item = sp._item;
|
this->_item = sp._item;
|
||||||
this->_item->ref ();
|
this->_item->ref ();
|
||||||
|
@ -98,11 +98,14 @@ if ENABLE_CXX
|
|||||||
#rex02_CXXFLAGS = -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread
|
#rex02_CXXFLAGS = -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread
|
||||||
#rex02_LDFLAGS = -pthread -Wl,-Bsymbolic-functions -lwx_gtk2ud_richtext-2.8 -lwx_gtk2ud_aui-2.8 -lwx_gtk2ud_xrc-2.8 -lwx_gtk2ud_qa-2.8 -lwx_gtk2ud_html-2.8 -lwx_gtk2ud_adv-2.8 -lwx_gtk2ud_core-2.8 -lwx_baseud_xml-2.8 -lwx_baseud_net-2.8 -lwx_baseud-2.8
|
#rex02_LDFLAGS = -pthread -Wl,-Bsymbolic-functions -lwx_gtk2ud_richtext-2.8 -lwx_gtk2ud_aui-2.8 -lwx_gtk2ud_xrc-2.8 -lwx_gtk2ud_qa-2.8 -lwx_gtk2ud_html-2.8 -lwx_gtk2ud_adv-2.8 -lwx_gtk2ud_core-2.8 -lwx_baseud_xml-2.8 -lwx_baseud_net-2.8 -lwx_baseud-2.8
|
||||||
|
|
||||||
bin_PROGRAMS += arr01 bh01 hl01 htb02 rbt02 rbt03 sp01 sp02 str02
|
bin_PROGRAMS += arr01 arr02 bh01 hl01 htb02 rbt02 rbt03 sp01 sp02 str02
|
||||||
|
|
||||||
arr01_SOURCES = arr01.cpp
|
arr01_SOURCES = arr01.cpp
|
||||||
arr01_LDADD = $(LDADD) -lqsecmnxx
|
arr01_LDADD = $(LDADD) -lqsecmnxx
|
||||||
|
|
||||||
|
arr02_SOURCES = arr02.cpp
|
||||||
|
arr02_LDADD = $(LDADD) -lqsecmnxx
|
||||||
|
|
||||||
bh01_SOURCES = bh01.cpp
|
bh01_SOURCES = bh01.cpp
|
||||||
bh01_LDADD = $(LDADD) -lqsecmnxx
|
bh01_LDADD = $(LDADD) -lqsecmnxx
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ bin_PROGRAMS = chr01$(EXEEXT) dir01$(EXEEXT) dll$(EXEEXT) \
|
|||||||
#rex02_SOURCES = rex02.cpp
|
#rex02_SOURCES = rex02.cpp
|
||||||
#rex02_CXXFLAGS = -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread
|
#rex02_CXXFLAGS = -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread
|
||||||
#rex02_LDFLAGS = -pthread -Wl,-Bsymbolic-functions -lwx_gtk2ud_richtext-2.8 -lwx_gtk2ud_aui-2.8 -lwx_gtk2ud_xrc-2.8 -lwx_gtk2ud_qa-2.8 -lwx_gtk2ud_html-2.8 -lwx_gtk2ud_adv-2.8 -lwx_gtk2ud_core-2.8 -lwx_baseud_xml-2.8 -lwx_baseud_net-2.8 -lwx_baseud-2.8
|
#rex02_LDFLAGS = -pthread -Wl,-Bsymbolic-functions -lwx_gtk2ud_richtext-2.8 -lwx_gtk2ud_aui-2.8 -lwx_gtk2ud_xrc-2.8 -lwx_gtk2ud_qa-2.8 -lwx_gtk2ud_html-2.8 -lwx_gtk2ud_adv-2.8 -lwx_gtk2ud_core-2.8 -lwx_baseud_xml-2.8 -lwx_baseud_net-2.8 -lwx_baseud-2.8
|
||||||
@ENABLE_CXX_TRUE@am__append_2 = arr01 bh01 hl01 htb02 rbt02 rbt03 sp01 sp02 str02
|
@ENABLE_CXX_TRUE@am__append_2 = arr01 arr02 bh01 hl01 htb02 rbt02 rbt03 sp01 sp02 str02
|
||||||
subdir = samples/cmn
|
subdir = samples/cmn
|
||||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
@ -86,10 +86,10 @@ mkinstalldirs = $(install_sh) -d
|
|||||||
CONFIG_HEADER = $(top_builddir)/include/qse/config.h
|
CONFIG_HEADER = $(top_builddir)/include/qse/config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
CONFIG_CLEAN_VPATH_FILES =
|
CONFIG_CLEAN_VPATH_FILES =
|
||||||
@ENABLE_CXX_TRUE@am__EXEEXT_1 = arr01$(EXEEXT) bh01$(EXEEXT) \
|
@ENABLE_CXX_TRUE@am__EXEEXT_1 = arr01$(EXEEXT) arr02$(EXEEXT) \
|
||||||
@ENABLE_CXX_TRUE@ hl01$(EXEEXT) htb02$(EXEEXT) rbt02$(EXEEXT) \
|
@ENABLE_CXX_TRUE@ bh01$(EXEEXT) hl01$(EXEEXT) htb02$(EXEEXT) \
|
||||||
@ENABLE_CXX_TRUE@ rbt03$(EXEEXT) sp01$(EXEEXT) sp02$(EXEEXT) \
|
@ENABLE_CXX_TRUE@ rbt02$(EXEEXT) rbt03$(EXEEXT) sp01$(EXEEXT) \
|
||||||
@ENABLE_CXX_TRUE@ str02$(EXEEXT)
|
@ENABLE_CXX_TRUE@ sp02$(EXEEXT) str02$(EXEEXT)
|
||||||
am__installdirs = "$(DESTDIR)$(bindir)"
|
am__installdirs = "$(DESTDIR)$(bindir)"
|
||||||
PROGRAMS = $(bin_PROGRAMS)
|
PROGRAMS = $(bin_PROGRAMS)
|
||||||
am__arr01_SOURCES_DIST = arr01.cpp
|
am__arr01_SOURCES_DIST = arr01.cpp
|
||||||
@ -102,6 +102,10 @@ am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2)
|
|||||||
AM_V_lt = $(am__v_lt_@AM_V@)
|
AM_V_lt = $(am__v_lt_@AM_V@)
|
||||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||||
am__v_lt_0 = --silent
|
am__v_lt_0 = --silent
|
||||||
|
am__arr02_SOURCES_DIST = arr02.cpp
|
||||||
|
@ENABLE_CXX_TRUE@am_arr02_OBJECTS = arr02.$(OBJEXT)
|
||||||
|
arr02_OBJECTS = $(am_arr02_OBJECTS)
|
||||||
|
@ENABLE_CXX_TRUE@arr02_DEPENDENCIES = $(am__DEPENDENCIES_3)
|
||||||
am__bh01_SOURCES_DIST = bh01.cpp
|
am__bh01_SOURCES_DIST = bh01.cpp
|
||||||
@ENABLE_CXX_TRUE@am_bh01_OBJECTS = bh01.$(OBJEXT)
|
@ENABLE_CXX_TRUE@am_bh01_OBJECTS = bh01.$(OBJEXT)
|
||||||
bh01_OBJECTS = $(am_bh01_OBJECTS)
|
bh01_OBJECTS = $(am_bh01_OBJECTS)
|
||||||
@ -336,11 +340,11 @@ am__v_CXXLD_0 = @echo " CXXLD " $@;
|
|||||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||||
am__v_GEN_0 = @echo " GEN " $@;
|
am__v_GEN_0 = @echo " GEN " $@;
|
||||||
SOURCES = $(arr01_SOURCES) $(bh01_SOURCES) $(chr01_SOURCES) dir01.c \
|
SOURCES = $(arr01_SOURCES) $(arr02_SOURCES) $(bh01_SOURCES) \
|
||||||
$(dll_SOURCES) $(env01_SOURCES) $(fio01_SOURCES) \
|
$(chr01_SOURCES) dir01.c $(dll_SOURCES) $(env01_SOURCES) \
|
||||||
$(fio02_SOURCES) $(fma_SOURCES) $(fmt01_SOURCES) \
|
$(fio01_SOURCES) $(fio02_SOURCES) $(fma_SOURCES) \
|
||||||
$(fmt02_SOURCES) $(fs01_SOURCES) fs02.c fs03.c \
|
$(fmt01_SOURCES) $(fmt02_SOURCES) $(fs01_SOURCES) fs02.c \
|
||||||
$(glob01_SOURCES) $(hl01_SOURCES) $(htb01_SOURCES) \
|
fs03.c $(glob01_SOURCES) $(hl01_SOURCES) $(htb01_SOURCES) \
|
||||||
$(htb02_SOURCES) $(ipad01_SOURCES) $(lda_SOURCES) \
|
$(htb02_SOURCES) $(ipad01_SOURCES) $(lda_SOURCES) \
|
||||||
$(main01_SOURCES) $(main02_SOURCES) $(mbwc01_SOURCES) \
|
$(main01_SOURCES) $(main02_SOURCES) $(mbwc01_SOURCES) \
|
||||||
$(mbwc02_SOURCES) $(nwad01_SOURCES) nwif01.c nwif02.c \
|
$(mbwc02_SOURCES) $(nwad01_SOURCES) nwif01.c nwif02.c \
|
||||||
@ -351,16 +355,17 @@ SOURCES = $(arr01_SOURCES) $(bh01_SOURCES) $(chr01_SOURCES) dir01.c \
|
|||||||
$(sp01_SOURCES) $(sp02_SOURCES) $(str01_SOURCES) \
|
$(sp01_SOURCES) $(sp02_SOURCES) $(str01_SOURCES) \
|
||||||
$(str02_SOURCES) task01.c $(time_SOURCES) $(tre01_SOURCES) \
|
$(str02_SOURCES) task01.c $(time_SOURCES) $(tre01_SOURCES) \
|
||||||
uri01.c $(xma_SOURCES)
|
uri01.c $(xma_SOURCES)
|
||||||
DIST_SOURCES = $(am__arr01_SOURCES_DIST) $(am__bh01_SOURCES_DIST) \
|
DIST_SOURCES = $(am__arr01_SOURCES_DIST) $(am__arr02_SOURCES_DIST) \
|
||||||
$(chr01_SOURCES) dir01.c $(dll_SOURCES) $(env01_SOURCES) \
|
$(am__bh01_SOURCES_DIST) $(chr01_SOURCES) dir01.c \
|
||||||
$(fio01_SOURCES) $(fio02_SOURCES) $(fma_SOURCES) \
|
$(dll_SOURCES) $(env01_SOURCES) $(fio01_SOURCES) \
|
||||||
$(fmt01_SOURCES) $(fmt02_SOURCES) $(fs01_SOURCES) fs02.c \
|
$(fio02_SOURCES) $(fma_SOURCES) $(fmt01_SOURCES) \
|
||||||
fs03.c $(glob01_SOURCES) $(am__hl01_SOURCES_DIST) \
|
$(fmt02_SOURCES) $(fs01_SOURCES) fs02.c fs03.c \
|
||||||
$(htb01_SOURCES) $(am__htb02_SOURCES_DIST) $(ipad01_SOURCES) \
|
$(glob01_SOURCES) $(am__hl01_SOURCES_DIST) $(htb01_SOURCES) \
|
||||||
$(lda_SOURCES) $(main01_SOURCES) $(main02_SOURCES) \
|
$(am__htb02_SOURCES_DIST) $(ipad01_SOURCES) $(lda_SOURCES) \
|
||||||
$(mbwc01_SOURCES) $(mbwc02_SOURCES) $(nwad01_SOURCES) nwif01.c \
|
$(main01_SOURCES) $(main02_SOURCES) $(mbwc01_SOURCES) \
|
||||||
nwif02.c $(oht_SOURCES) $(path01_SOURCES) $(pio_SOURCES) \
|
$(mbwc02_SOURCES) $(nwad01_SOURCES) nwif01.c nwif02.c \
|
||||||
$(pma_SOURCES) $(rbt01_SOURCES) $(am__rbt02_SOURCES_DIST) \
|
$(oht_SOURCES) $(path01_SOURCES) $(pio_SOURCES) $(pma_SOURCES) \
|
||||||
|
$(rbt01_SOURCES) $(am__rbt02_SOURCES_DIST) \
|
||||||
$(am__rbt03_SOURCES_DIST) $(rex01_SOURCES) $(sio01_SOURCES) \
|
$(am__rbt03_SOURCES_DIST) $(rex01_SOURCES) $(sio01_SOURCES) \
|
||||||
$(sio02_SOURCES) $(sio03_SOURCES) $(sll_SOURCES) \
|
$(sio02_SOURCES) $(sio03_SOURCES) $(sll_SOURCES) \
|
||||||
$(slmb01_SOURCES) $(am__sp01_SOURCES_DIST) \
|
$(slmb01_SOURCES) $(am__sp01_SOURCES_DIST) \
|
||||||
@ -592,6 +597,8 @@ tre01_SOURCES = tre01.c
|
|||||||
xma_SOURCES = xma.c
|
xma_SOURCES = xma.c
|
||||||
@ENABLE_CXX_TRUE@arr01_SOURCES = arr01.cpp
|
@ENABLE_CXX_TRUE@arr01_SOURCES = arr01.cpp
|
||||||
@ENABLE_CXX_TRUE@arr01_LDADD = $(LDADD) -lqsecmnxx
|
@ENABLE_CXX_TRUE@arr01_LDADD = $(LDADD) -lqsecmnxx
|
||||||
|
@ENABLE_CXX_TRUE@arr02_SOURCES = arr02.cpp
|
||||||
|
@ENABLE_CXX_TRUE@arr02_LDADD = $(LDADD) -lqsecmnxx
|
||||||
@ENABLE_CXX_TRUE@bh01_SOURCES = bh01.cpp
|
@ENABLE_CXX_TRUE@bh01_SOURCES = bh01.cpp
|
||||||
@ENABLE_CXX_TRUE@bh01_LDADD = $(LDADD) -lqsecmnxx
|
@ENABLE_CXX_TRUE@bh01_LDADD = $(LDADD) -lqsecmnxx
|
||||||
@ENABLE_CXX_TRUE@hl01_SOURCES = hl01.cpp
|
@ENABLE_CXX_TRUE@hl01_SOURCES = hl01.cpp
|
||||||
@ -691,6 +698,9 @@ clean-binPROGRAMS:
|
|||||||
arr01$(EXEEXT): $(arr01_OBJECTS) $(arr01_DEPENDENCIES) $(EXTRA_arr01_DEPENDENCIES)
|
arr01$(EXEEXT): $(arr01_OBJECTS) $(arr01_DEPENDENCIES) $(EXTRA_arr01_DEPENDENCIES)
|
||||||
@rm -f arr01$(EXEEXT)
|
@rm -f arr01$(EXEEXT)
|
||||||
$(AM_V_CXXLD)$(CXXLINK) $(arr01_OBJECTS) $(arr01_LDADD) $(LIBS)
|
$(AM_V_CXXLD)$(CXXLINK) $(arr01_OBJECTS) $(arr01_LDADD) $(LIBS)
|
||||||
|
arr02$(EXEEXT): $(arr02_OBJECTS) $(arr02_DEPENDENCIES) $(EXTRA_arr02_DEPENDENCIES)
|
||||||
|
@rm -f arr02$(EXEEXT)
|
||||||
|
$(AM_V_CXXLD)$(CXXLINK) $(arr02_OBJECTS) $(arr02_LDADD) $(LIBS)
|
||||||
bh01$(EXEEXT): $(bh01_OBJECTS) $(bh01_DEPENDENCIES) $(EXTRA_bh01_DEPENDENCIES)
|
bh01$(EXEEXT): $(bh01_OBJECTS) $(bh01_DEPENDENCIES) $(EXTRA_bh01_DEPENDENCIES)
|
||||||
@rm -f bh01$(EXEEXT)
|
@rm -f bh01$(EXEEXT)
|
||||||
$(AM_V_CXXLD)$(CXXLINK) $(bh01_OBJECTS) $(bh01_LDADD) $(LIBS)
|
$(AM_V_CXXLD)$(CXXLINK) $(bh01_OBJECTS) $(bh01_LDADD) $(LIBS)
|
||||||
@ -843,6 +853,7 @@ distclean-compile:
|
|||||||
-rm -f *.tab.c
|
-rm -f *.tab.c
|
||||||
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arr01.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arr01.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arr02.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bh01.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bh01.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chr01.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chr01.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir01.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir01.Po@am__quote@
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <qse/cmn/Array.hpp>
|
#include <qse/cmn/Array.hpp>
|
||||||
|
#include <qse/cmn/String.hpp>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
typedef QSE::Array<int,int> IntArray;
|
typedef QSE::Array<int,int> IntArray;
|
||||||
@ -24,12 +25,12 @@ struct IntClassComparator
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
class PosStr: public std::string
|
class PosStr: public QSE::MbString
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PosStr (const char* str = ""): std::string(str), pos((qse_size_t)-1) {};
|
PosStr (const char* str = ""): QSE::MbString(str), pos((qse_size_t)-1) {};
|
||||||
|
|
||||||
PosStr (const PosStr& ps): std::string (ps), pos(ps.pos)
|
PosStr (const PosStr& ps): QSE::MbString (ps), pos(ps.pos)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +51,7 @@ public:
|
|||||||
strcpy (buf, str);
|
strcpy (buf, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* c_str() const { return this->buf; }
|
const char* getBuffer() const { return this->buf; }
|
||||||
const char* data() const { return this->buf; }
|
const char* data() const { return this->buf; }
|
||||||
|
|
||||||
char buf[512];
|
char buf[512];
|
||||||
@ -60,9 +61,9 @@ public:
|
|||||||
|
|
||||||
struct cstr_comparator
|
struct cstr_comparator
|
||||||
{
|
{
|
||||||
int operator() (const char* v1, const std::string& v2) const
|
int operator() (const char* v1, const QSE::MbString& v2) const
|
||||||
{
|
{
|
||||||
return strcmp (v1, v2.c_str());
|
return strcmp (v1, v2.getBuffer());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -84,16 +85,16 @@ int main ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
printf ("%s\n", h.get(3).c_str());
|
printf ("%s\n", h.get(3).getBuffer());
|
||||||
h.remove (3, 5);
|
h.remove (3, 5);
|
||||||
printf ("%s\n", h.get(3).c_str());
|
printf ("%s\n", h.get(3).getBuffer());
|
||||||
h.remove (3, 5);
|
h.remove (3, 5);
|
||||||
printf ("%s\n", h.get(3).c_str());
|
printf ("%s\n", h.get(3).getBuffer());
|
||||||
#endif
|
#endif
|
||||||
printf ("--------------------\n");
|
printf ("--------------------\n");
|
||||||
for (qse_size_t i = 0; i < h.getSize(); i++)
|
for (qse_size_t i = 0; i < h.getSize(); i++)
|
||||||
{
|
{
|
||||||
printf ("[%s] at [%lu]\n", h[i].c_str(), (unsigned long int)h.getIndex(h[i]));
|
printf ("[%s] at [%lu]\n", h[i].getBuffer(), (unsigned long int)h.getIndex(h[i]));
|
||||||
}
|
}
|
||||||
printf ("--------------------\n");
|
printf ("--------------------\n");
|
||||||
|
|
||||||
@ -107,7 +108,7 @@ int main ()
|
|||||||
printf ("--------------------\n");
|
printf ("--------------------\n");
|
||||||
for (qse_size_t i = 0; i < h2.getSize(); i++)
|
for (qse_size_t i = 0; i < h2.getSize(); i++)
|
||||||
{
|
{
|
||||||
printf ("[%s] at [%lu]\n", h2[i].c_str(), (unsigned long int)h2.getIndex(h2[i]));
|
printf ("[%s] at [%lu]\n", h2[i].getBuffer(), (unsigned long int)h2.getIndex(h2[i]));
|
||||||
}
|
}
|
||||||
printf ("--------------------\n");
|
printf ("--------------------\n");
|
||||||
|
|
||||||
@ -117,21 +118,21 @@ int main ()
|
|||||||
h3.insert (21, "mystery!");
|
h3.insert (21, "mystery!");
|
||||||
for (qse_size_t i = 0; i < h3.getSize(); i++)
|
for (qse_size_t i = 0; i < h3.getSize(); i++)
|
||||||
{
|
{
|
||||||
printf ("[%s] at [%lu]\n", h3[i].c_str(), (unsigned long int)h3.getIndex(h3[i]));
|
printf ("[%s] at [%lu]\n", h3[i].getBuffer(), (unsigned long int)h3.getIndex(h3[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
printf ("--------------------\n");
|
printf ("--------------------\n");
|
||||||
h3.setCapacity (6);
|
h3.setCapacity (6);
|
||||||
h3.insert (6, "good?");
|
h3.insert (6, "good?");
|
||||||
h3.rotate (1, h3.getSize() / 2);
|
h3.rotate (1, h3.getSize() / 2);
|
||||||
printf ("[%s] [%s]\n", h3.getValueAt(5).c_str(), h3.getValueAt(6).c_str());
|
printf ("[%s] [%s]\n", h3.getValueAt(5).getBuffer(), h3.getValueAt(6).getBuffer());
|
||||||
printf ("%d\n", (int)h3.getSize());
|
printf ("%d\n", (int)h3.getSize());
|
||||||
|
|
||||||
printf ("--------------------\n");
|
printf ("--------------------\n");
|
||||||
h3.insert (1, "bad?");
|
h3.insert (1, "bad?");
|
||||||
for (qse_size_t i = 0; i < h3.getSize(); i++)
|
for (qse_size_t i = 0; i < h3.getSize(); i++)
|
||||||
{
|
{
|
||||||
printf ("[%s] at [%lu]\n", h3[i].c_str(), (unsigned long int)h3.getIndex(h3[i]));
|
printf ("[%s] at [%lu]\n", h3[i].getBuffer(), (unsigned long int)h3.getIndex(h3[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
printf ("--------------------\n");
|
printf ("--------------------\n");
|
||||||
|
93
qse/samples/cmn/arr02.cpp
Normal file
93
qse/samples/cmn/arr02.cpp
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <qse/cmn/Array.hpp>
|
||||||
|
#include <qse/cmn/String.hpp>
|
||||||
|
|
||||||
|
class Julia
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Julia (int q = 0): x(QSE_NULL)
|
||||||
|
{
|
||||||
|
this->x = new int (q);
|
||||||
|
printf ("constructor %d\n", q);
|
||||||
|
}
|
||||||
|
|
||||||
|
Julia (const Julia& q): x(QSE_NULL)
|
||||||
|
{
|
||||||
|
this->x = new int (*q.x);
|
||||||
|
printf ("copy constructor %d\n", *q.x);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
Julia (Julia&& q)
|
||||||
|
{
|
||||||
|
printf ("move constructor %d\n", *q.x);
|
||||||
|
this->x = q.x;
|
||||||
|
q.x = QSE_NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
~Julia()
|
||||||
|
{
|
||||||
|
if (this->x)
|
||||||
|
{
|
||||||
|
printf ("deleting %p %d\n", this, *x);
|
||||||
|
delete this->x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Julia& operator= (const Julia& q)
|
||||||
|
{
|
||||||
|
if (this != &q)
|
||||||
|
{
|
||||||
|
if (this->x) { delete this->x; this->x = QSE_NULL; }
|
||||||
|
this->x = new int (*q.x);
|
||||||
|
printf ("operator= %d\n", *q.x);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
Julia& operator= (Julia&& q)
|
||||||
|
{
|
||||||
|
if (this != &q)
|
||||||
|
{
|
||||||
|
if (this->x) { delete this->x; this->x = QSE_NULL; }
|
||||||
|
printf ("move operator= %d\n", *q.x);
|
||||||
|
this->x = q.x;
|
||||||
|
q.x = QSE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int* x;
|
||||||
|
};
|
||||||
|
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
QSE::Array<Julia> a0;
|
||||||
|
|
||||||
|
for (int i = 0; i < 256; i++)
|
||||||
|
{
|
||||||
|
a0.insert (0, Julia(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
a0.setCapacity (1024);
|
||||||
|
a0.insert (512, Julia (512));
|
||||||
|
|
||||||
|
a0.remove (2, 5);
|
||||||
|
|
||||||
|
a0.update (5, Julia(9999));
|
||||||
|
#if (__cplusplus >= 201103L) // C++11
|
||||||
|
QSE::Array<Julia> a1 ((QSE::Array<Julia>&&)a0);
|
||||||
|
#else
|
||||||
|
QSE::Array<Julia> a1 (a0);
|
||||||
|
#endif
|
||||||
|
printf ("OK: %d %d\n", (int)a0.getSize(), (int)a1.getSize());
|
||||||
|
return 0;
|
||||||
|
}
|
@ -23,10 +23,10 @@ static int test1 ()
|
|||||||
ptr[1] = qse_xma_alloc (xma, 1000);
|
ptr[1] = qse_xma_alloc (xma, 1000);
|
||||||
ptr[2] = qse_xma_alloc (xma, 3000);
|
ptr[2] = qse_xma_alloc (xma, 3000);
|
||||||
ptr[3] = qse_xma_alloc (xma, 1000);
|
ptr[3] = qse_xma_alloc (xma, 1000);
|
||||||
//qse_xma_dump (xma, qse_printf);
|
/*qse_xma_dump (xma, qse_printf);
|
||||||
//qse_xma_free (xma, ptr[0]);
|
qse_xma_free (xma, ptr[0]);
|
||||||
//qse_xma_free (xma, ptr[2]);
|
qse_xma_free (xma, ptr[2]);
|
||||||
//qse_xma_free (xma, ptr[3]);
|
qse_xma_free (xma, ptr[3]); */
|
||||||
|
|
||||||
qse_xma_dump (xma, (qse_xma_dumper_t)qse_fprintf, QSE_STDOUT);
|
qse_xma_dump (xma, (qse_xma_dumper_t)qse_fprintf, QSE_STDOUT);
|
||||||
qse_xma_realloc (xma, ptr[0], 500);
|
qse_xma_realloc (xma, ptr[0], 500);
|
||||||
|
Loading…
Reference in New Issue
Block a user