1.4 게임 프로그래밍에서의STL 활용
Genericity of components
“The use of templates allow you to reduce the number m to 1
( m is possible data types ).
STL algorithms, however, do not work directly with containers but with
Interface object, that is, iterators which access containers.”
4.
1.4 게임 프로그래밍에서의STL 활용
Abstract and implicit data types
Implicit data types are not important in the sense of an object-oriented
analysis which puts the emphasis on the interfaces (methods) if an abstract
data types. They, however, are very important for design and
Implementation because they often determine the run time behavior.
5.
1.4 게임 프로그래밍에서의STL 활용
Containers
순차 컨테이너 ( sequence container )
vector, list, deque, …
연관 컨테이너 ( associative container )
map, set, …
Iterators
“Pointer-like objects”
Algorithms
“The Template algorithms work with iterators that access containers.”
6.
1.4 게임 프로그래밍에서의STL 활용
begin() , end() 알고리즘에서 last iterator는 마지막 원소를
가리키지 않는다.
rbegin() , rend()
“past-the-end”
Call by value
7.
1.4 게임 프로그래밍에서의STL 활용
Container
Sequence container
타입이 동일한 객체들을 선형으로 구성
vector< T > : 컨테이너 요소에 임의 접근( i번째 원소의 접근 시간은 상수 )이
가능하다.
deque< T > : vector 와 유사. 컨테이너의 앞 부분에도 연산이 가능하다.
list< T > : 요소의 접근 시간은 O(N). N은 크기. 삽입과 삭제는 상수 시간.
8.
1.4 게임 프로그래밍에서의STL 활용
Container
Associative container
주어진 키로 객체들을 신속하게 찾음
set< key > : 유일한 키 ( unique key )
multiset< key > : 중복키를 지원 ( duplicate key )
map< key, T > : key는 unique. T는 value. 주어진 key로 value를 찾을 수 있다.
multimap<key, T> : map과 유사. key는 중복을 허용
9.
1.4 게임 프로그래밍에서의STL 활용
Iterator
입력-iterator
출력-iterator
순방향-iterator
…
각각의 iterator들은 특정 연산자를 구현하고 있어야 한다.
Algorithms
nonmutating sequence algorithm : find , search
mutating sequence algorithm : unique
sorting-related algorithm
generalized numeric algorithm
1.7 자원과 메모리관리
게임은 많은 메모리 사용을 요구함. ( 그래픽, 사운드, 모델, 애니메이션 .. )
=> 목표는 게임의 흐름( 데이터 로딩 or 게임 액션 )이 끊겨서는 안된다.
=> 주어진 메모리 보다 많은 양을 사용할 수 있도록 준비
사용자 패턴에 기반하여 데이터를 자동적으로 불러오거나 폐기할 수 있는
자원 객체 정의
이러한 사용 가능한 자원들을 관리 , 분배 및 접근을 제어하는 관리자.
12.
1.7 자원과 메모리관리
class BaseResource
다른 자원 컨테이너 클래스들은 이 클래스를 기반으로 하여 파생
Create() - 자원 데이터의 로드. 반복적 생성 요청에 대한 처리 포함
Dispose() , Recrete() – 자원과 메모리의 교체. 자원의 의미 있는 부분들만
교체한다.
operator < () – 자원의 폐기를 위한 우선 순위 정렬
1.7 자원과 메모리관리
class ResManager
BaseResource를 통해 생성된
자원들을 관리하는 클래스
15.
1.7 자원과 메모리관리
class ResManager
자원의 핸들(UINT) 과 객체에 대한 포인터를 Map으로 관리
typedef std::map<RHANDLE, BaseResource*> ResMap;
typedef ResMap::iterator ResMapItor;
typedef ResMap::value_type ResMapPair;
16.
1.7 자원과 메모리관리
class ResManager
InsertResource() – 추가하는 자원의 크기가 현재 준비된 메모리보다 큰 경우
필요한 메모리를 확보할 때 까지 기존 자원을 해제. ( 우선순위에 따라 )
1.12 assert의 비법들
#4 : 커스텀 assert 만들기
커스텀 함수를 만들고 결과에 따라 코드를 breaking 한다.
21.
1.12 assert의 비법들
#5 : 이것도 중요
자주 실행되는 루틴에 있을 경우 flag를 주어서 상태 값에 따라
작동 여부를 결정하도록 한다
22.
1.12 assert의 비법들
#6 : 초고수만 볼 것
assert가 실행되는 이유는 사실 그 이전에 원인이 있다.
-> 프로그램의 스택 정보가 필요!
“BugSlayer”
http://blog.naver.com/harkon?Redirect=Log&logNo=120063141029
23.
1.12 assert의 비법들
#7 : 좀 더 쉽게 – 복사해서 붙여 넣기
스택 정보의 내용을 클립보드로. CustomAssertFunction에 추가