SDS
1. Design Structure
gbase는 Grap 엔진에서 사용하는 최하위 Foundation 라이브러리이다.
엔진의 모든 상위 모듈은 gbase에 의존할 수 있지만, gbase는 어떤 상위 모듈에도 의존하지 않는다.
2. Module Structure
gbase는 다음 서브시스템으로 구성된다.
2.1 types
역할
- 기본 타입 정의
- 타입 유틸리티 제공
구성 요소
- integer type alias
- byte 타입
- span view
- enum flag helper
2.2 id_sys
역할
- 타입 안전 ID 시스템 제공
구성 요소
- StrongId
- IdTag
- ID 타입 정의
2.3 macro
역할
- 공통 매크로 및 컴파일러 attribute 제공
구성 요소
- assert macro
- compiler attributes
- preprocessor helper
- static assert wrapper
2.4 utility
역할
- 범용 RAII 및 helper 유틸리티 제공
구성 요소
- noncopyable
- nonmovable
- scope utilities
- overloaded visitor helper
- narrow_cast
- defer
3. Module Dependency
gbase 내부 모듈은 다음 의존 구조를 따른다.
types
▲
│
macro
▲
│
id_sys
▲
│
utility
설계 규칙
types는 최하위 레이어이다macro는types에 의존할 수 있다id_sys는types에 의존할 수 있다utility는types와macro에 의존할 수 있다- 순환 의존성은 허용되지 않는다
4. Namespace Design
모든 API는 다음 네임스페이스에 정의된다.
namespace gbase
5. Header Organization
gbase는 header-only 라이브러리로 구성된다.
모든 기능은 다음 경로를 통해 접근할 수 있다.
#include <gbase/...>
또한 다음 umbrella header를 제공한다.
#include <gbase/gbase.hpp>
6. Directory Layout
gbase의 기본 디렉토리 구조는 다음과 같다.
gbase/
├─ gbase.hpp
├─ id_sys/
├─ types/
├─ macro/
└─ utility/
각 디렉토리는 독립적인 서브시스템을 구성한다.
7. Design Constraints
gbase는 다음 설계 제약을 따른다.
- 플랫폼 또는 OS API에 의존하지 않는다
- 외부 라이브러리를 사용하지 않는다
- header-only 구조를 유지한다
- 런타임 오버헤드를 최소화한다
- 가능한 경우 constexpr 기반 구현을 사용한다