Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE > 클래스 템플릿 참조

클래스

class  const_iterator
 
class  iterator
 

Public 멤버 함수

 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)
 
CFastArrayoperator= (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)
 
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)
 

Protected 멤버 함수

void InitVars ()
 
virtual INDEXTYPE GetRecommendedCapacity (INDEXTYPE actualCount)
 
void BoundCheck (INDEXTYPE index) const
 

Protected 속성

T * m_Data
 
INDEXTYPE m_Length
 
INDEXTYPE m_Capacity
 
INDEXTYPE m_minCapacity
 
bool m_suspendShrink
 
GrowPolicy m_growPolicy
 

Friends

class iterator
 
class const_iterator
 

상세한 설명

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_REFtrue이면, 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를 권합니다.

생성자 & 소멸자 문서화

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::CFastArray ( )
inline

기본 생성자

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::CFastArray ( const T *  data,
INDEXTYPE  count 
)
inline

외부 데이터를 복사해오는 생성자

매개변수
data데이터 배열의 포인터 입니다.
count배열의 Data수 입니다.
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::CFastArray ( const CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE > &  src)
inline

외부 데이터를 복사해오는 생성자

매개변수
src복사할 CFastArray

멤버 함수 문서화

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::Add ( T_IN  value)
inline

맨뒤에 추가

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::AddRange ( const T *  data,
INDEXTYPE  count 
)
inline

배열 뒤에 새로운 배열 추가

매개변수
data새로 추가할 배열의 포인터
count추가할 배열의 크기
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
iterator Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::begin ( )
inline

STL의 동명 메서드와 같은 역할을 한다.

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
const_iterator Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::begin ( ) const
inline

STL의 동명 메서드와 같은 역할을 한다.

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::Clear ( )
inline

배열 청소. ClearAndKeepCapacity와 같음

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::ClearAndKeepCapacity ( )
inline

배열 청소. Clear와 같음

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
bool Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::Contains ( T_IN  value)
inline

Returns true if value exists in the array.

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::CopyRangeTo ( CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE > &  dest,
INDEXTYPE  srcOffset,
INDEXTYPE  count 
) const
inline

dest의 크기를 count로 조정 후 src의 일부나 전체를 dest로 복사한다.

매개변수
dest배열을 dest로 복사합니다.
srcOffset배열 내 srcOffset 이후 Data부터 dest로 복사 한다.
countcount갯수 만큼의 배열을 복사 한다.
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::CopyTo ( CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE > &  dest) const
inline
매개변수
dest배열을 dest로 복사한다.
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
T_IN Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::ElementAt ( INDEXTYPE  index) const
inline

index가 가리키는 배열 항목

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
T& Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::ElementAt ( INDEXTYPE  index)
inline

index가 가리키는 배열 항목

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
iterator Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::end ( )
inline

STL의 동명 메서드와 같은 역할을 한다.

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
const_iterator Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::end ( ) const
inline

STL의 동명 메서드와 같은 역할을 한다.

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
bool Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::Equals ( const CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE > &  rhs) const
inline
  • 주의: 단순 메모리 비교다. 이 점을 주의할 것.
    매개변수
    rhsrhs와 내용이 동일한지 체크한다.
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
iterator Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::erase ( iterator  iter)
inline

STL의 동명 메서드와 같은 역할을 한다.

매개변수
iteriter가 가르키는 데이터를 제거한다.
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
INDEXTYPE Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::FindByValue ( T_IN  value)
inline
매개변수
valuevalue와 같은 값을 가지는 배열 항목이 있는지 확인한다.
반환값
value와 같은 값을 가지는 배열 항목이 있으면 그 인덱스를 리턴한다. 찾지 못하면 -1을 리턴한다.
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
INDEXTYPE Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::GetCapacity ( ) const
inline

capacity의 크기를 얻는다

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
INDEXTYPE Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::GetCount ( ) const
inline

배열 크기

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
T* Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::GetData ( )
inline

배열 버퍼 포인터를 얻는다.

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
const T* Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::GetData ( ) const
inline

배열 버퍼 포인터를 얻는다.

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
GrowPolicy Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::GetGrowPolicy ( )
inline

기존 grow policy(이 객체의 배열 크기가 증가할 때 가중치 타입) 얻기

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::Insert ( INDEXTYPE  indexAt,
T_IN  value 
)
inline

indexAt이 가리키는 항목을 모두 한칸씩 뒤로 밀고 value 를 indexAt 이 가리키는 곳에 추가한다.

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::InsertRange ( INDEXTYPE  indexAt,
const T *  data,
INDEXTYPE  count 
)
inline

배열 중간에 배열 추가. indexAt이 가리키는 부분을 뒤로 밀어놓고 틈새에 추가한다.

매개변수
indexAt이 index 번호의 다음부터 추가 됩니다.
datadata 삽입할 배열의 포인터 입니다.
count삽입할 배열의 크기
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
CFastArray& Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::operator= ( const CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE > &  src)
inline

복사 대입 연산자

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
T_IN Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::operator[] ( INDEXTYPE  index) const
inline

index가 가리키는 배열 항목

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
T& Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::operator[] ( INDEXTYPE  index)
inline

index가 가리키는 배열 항목

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
T Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::PopBack ( )
inline

배열의 마지막 정보를 배열내에서 제거하고 리턴해준다.

template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::RemoveAndPullLast ( intptr_t  index)
inline

맨 마지막 항목을 index가 가리키는 곳으로 옮긴 후 맨 마지막 항목을 제거한다. 순서가 상관없는 콜렉션에서 허리 항목을 제거할 때 Remove 대신 쓰면 효과적이다.

매개변수
index제거할 index
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::RemoveAt ( INDEXTYPE  index)
inline
매개변수
indexindex에 해당하는 data를 제거한다.
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
bool Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::RemoveOneByValue ( T_IN  value)
inline
매개변수
valuevalue와 같은 값을 가지는 배열 앞에서부터 찾아서 찾으면 제거한다.
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::RemoveRange ( INDEXTYPE  index,
INDEXTYPE  count 
)
inline

index번째 항목부터 count만큼 제거한다.

매개변수
index제거할 배열의 index
countindex로부터 count수 만큼 제거한다.
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::SetCapacity ( INDEXTYPE  newCapacity)
inline

배열이 갖고 있는 버퍼(캐퍼서티)를 조절한다.

  • 캐퍼서티는 증가만 할 뿐, 줄어들지는 않는다.
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::SetCount ( INDEXTYPE  newVal)
inline

배열 크기를 조절한다

  • 배열 크기 조절시 capacity가 충분히 증가한다.
    매개변수
    newVal새로운 배열의 크기
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::SetGrowPolicy ( GrowPolicy  val)
inline

이 객체의 배열 크기가 증가할 때 가중치 타입을 설정. 자세한 내용은 GrowPolicy을 참조

매개변수
val배열의 증가 가중치에 대한 type
template<typename T, bool T_IN_REF = true, bool RAWTYPE = false, typename INDEXTYPE = intptr_t>
void Proud::CFastArray< T, T_IN_REF, RAWTYPE, INDEXTYPE >::SetMinCapacity ( INDEXTYPE  newCapacity)
inline

최소 버퍼 크기를 설정한다. 버퍼(capacity)크기가 증가할 때 최소한 이 사이즈보다 크게 설정한다.

매개변수
newCapacity최소 Capacity size