|
| CFastArray () |
|
| CFastArray (const T *data, INDEXTYPE count) |
|
| CFastArray (const CFastArray &src) |
|
void | SetGrowPolicy (GrowPolicy val) |
|
GrowPolicy | GetGrowPolicy () |
|
void | SetMinCapacity (INDEXTYPE newCapacity) |
|
void | SetCapacity (INDEXTYPE newCapacity) |
|
void | SuspendShrink () |
|
void | OnRecycle () |
|
void | OnDrop () |
|
void | SetCount (INDEXTYPE newVal) |
|
void | AddCount (INDEXTYPE addLength) |
|
void | resize (INDEXTYPE sz) |
| for STL compatibility
|
|
INDEXTYPE | GetCapacity () const |
|
INDEXTYPE | GetCount () const |
|
INDEXTYPE | size () const |
| for STL compatibility
|
|
bool | IsEmpty () const |
|
void | Clear () |
|
void | ClearAndKeepCapacity () |
|
T_IN | ElementAt (INDEXTYPE index) const |
|
T & | ElementAt (INDEXTYPE index) |
|
T_IN | operator[] (INDEXTYPE index) const |
|
T & | operator[] (INDEXTYPE index) |
|
T * | GetData () |
|
const T * | GetData () const |
|
void | Add (T_IN value) |
|
void | Insert (INDEXTYPE indexAt, T_IN value) |
|
void | AddRange (const T *data, INDEXTYPE count) |
|
void | InsertRange (INDEXTYPE indexAt, const T *data, INDEXTYPE count) |
|
void | CopyRangeTo (CFastArray &dest, INDEXTYPE srcOffset, INDEXTYPE count) const |
|
void | CopyTo (CFastArray &dest) const |
|
void | CopyFrom (const CFastArray &src) |
|
void | CopyFrom (const T *from, INDEXTYPE fromCount) |
|
void | RemoveRange (INDEXTYPE index, INDEXTYPE count) |
|
void | RemoveAt (INDEXTYPE index) |
|
bool | RemoveOneByValue (T_IN value) |
|
CFastArray & | operator= (const CFastArray &src) |
|
INDEXTYPE | FindByValue (T_IN value) |
|
bool | Contains (T_IN value) |
|
bool | Equals (const CFastArray &rhs) const |
|
void | clear () |
| for STL compatibility
|
|
iterator | begin () |
|
iterator | end () |
|
const_iterator | begin () const |
|
const_iterator | end () const |
|
iterator | erase (iterator iter) |
|
T | PopBack () |
|
void | RemoveAndPullLast (intptr_t index) |
|
virtual void | DataBlock_Free (void *data) |
|
virtual void * | DataBlock_Alloc (size_t length) |
|
virtual void * | DataBlock_Realloc (void *oldPtr, size_t newLength) |
|
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
class Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >
배열 클래스
Pritimitive type을 위한 성능 향상 기능
- RAWTYPE=true로 세팅하면, 배열 요소는 int 등의 primitive 타입으로 간주되어 배열 다루는 성능이 향상됩니다. (성능 극대화를 위해 내부적으로 memcpy 등이 사용됩니다.)
- 단, int, bool, byte 등 primitive type만 사용 가능합니다. 생성자, 파괴자, 복사 대입 연산자를 따로 가지고 있는 타입이 배열 항목으로 쓰이는 경우 위험합니다.
주요 특징
- heap 접근을 최소화하기 위해 auto memory shrink를 하지 않습니다. 즉 capacity는 절대 줄지 않습니다. 따라서 메모리 과다 사용의 문제점을 고려해야 한다면 이 객체의 사용을 피하는 것이 좋습니다.
- 내부적으로 Fast heap 을 써서 heap 접근으로 인한 부하를 절약할 수 있습니다. 기본적으로 이 기능은 꺼져있습니다. 그러나, UseFastHeap으로 변경 가능합니다.
- .Net framework의 List<>, STL.vector, CAtlArray의 메서드 이름을 모두 쓸 수 있습니다. 그리고 STL.vector.iterator와 같은 역할의 iterator class도 제공하고 있습니다.
- 매개변수
-
T | 배열의 항목 타입입니다. |
T_IN_REF | true이면, by reference로 입력값이 전달됩니다. false이면 by value로 전달됩니다. int 처럼 크기가 8 byte 이하인 것은 false를 쓰는 것이 권장됩니다. |
RAWTYPE | 배열 항목이 raw memory copy를 해도 안전한 타입인지에 대한 여부입니다. int는 안전하지만 std.string은 안전하지 않습니다. 배열의 항목 타입이 생성자, 파괴자, 복사 대입 연산자가 사용되지 않아도 되는 타입인 경우 true로 지정할 수 있습니다. 이를 true로 지정하면 배열에 삽입, 삭제, 크기 변경 등을 할 때 내부적으로 발생하는 배열 항목의 생성, 파괴, 복사 과정을 위해 생성자, 파괴자, 복사 대입 연산자를 호출하지 않습니다. 따라서 처리 속도가 향상됩니다. 기본값은 false 입니다. |
INDEXTYPE | 배열 최대 크기 및 index의 type. int32,int64,intPtr 중 하나를 쓰는 것을 권장합니다. 32-64bit int간 casting 부하도 무시 못하므로 적절한 것을 쓸 것을 권합니다. 예를 들어 패킷 크기의 경우 웬만하면 2GB를 넘는 것을 안 다루므로 int32를 권장합니다. 로컬 프로세스에서만 다루는 것이면 intPtr을 권합니다. 네트워크 통계 등 32bit로는 불충분한 값을 다루면 int64를 권합니다. |