pdcomm::Gem300CapabilityCatalog
클래스
한도와 리비전이 있는 GEM300 기능(capability) 선언 카탈로그입니다.
class Gem300CapabilityCatalog카탈로그는 이름 있는 각 프로필이 어떤 GEM300 영역(공정 작업, 캐리어, 기판, 제어 작업)을 어떤 상태 레이블로 선언하는지 기록합니다. 선언 모델이며 메시지를 보내지 않습니다.
모든 replace()는 먼저 전체 입력을 검증한 뒤 원자적으로 설치하므로, 실패한 호출은 카탈로그를 바꾸지 않습니다. 일관된 사본을 읽으려면 snapshot()을 사용합니다.
pdcomm::Gem300CapabilityCatalog catalog(pdcomm::gem300CapabilityOptions(
3, 4, 8, 16, 16, 96));
std::vector<pdcomm::Gem300CapabilityProfile> profiles = {
{"PRIMARY",
{{"PJ", pdcomm::Gem300CapabilityAxis::ProcessJob,
pdcomm::Gem300CapabilityStatus::Experimental},
{"CARRIER", pdcomm::Gem300CapabilityAxis::Carrier,
pdcomm::Gem300CapabilityStatus::ModelOnly}}},
};
const auto first = catalog.replace(profiles); // first.revision == 1, first.changed
auto snapshot = catalog.snapshot();참고
- 이동 전용(move-only) RAII 래퍼입니다. 카탈로그에는 내부 잠금이 없으므로 replace()와 clear()는 같은 카탈로그에 대한 다른 모든 호출과 직렬화해야 합니다. info()와 snapshot()은 서로 동시에 실행할 수 있습니다.
멤버
Gem300CapabilityCatalog
생성자
other가 소유한 네이티브 핸들의 소유권을 가져옵니다.
Gem300CapabilityCatalog(Gem300CapabilityCatalog &&other) noexcept매개변수
| 이름 | 설명 |
|---|---|
other | 원본 래퍼이며 비어 있게 됩니다. |
Gem300CapabilityCatalog
생성자
복사할 수 없습니다. 래퍼가 네이티브 핸들을 단독으로 소유합니다.
Gem300CapabilityCatalog(const Gem300CapabilityCatalog &) = deleteGem300CapabilityCatalog
생성자
주어진 한도로 빈 카탈로그를 만듭니다.
explicit Gem300CapabilityCatalog(const PdcommGem300CapabilityOptions &options)옵션은 복사됩니다. 새 카탈로그는 리비전이 0이고 프로필이 없습니다.
매개변수
| 이름 | 설명 |
|---|---|
options | gem300CapabilityOptions()로 만든 한도입니다. |
참고
- 예외
pdcomm::Error:struct_size나version이 잘못되면PDCOMM_INVALID_ARGUMENT, 한도가 0이거나max_capabilities_per_profile이 4보다 크면PDCOMM_LIMIT_EXCEEDED입니다.
clear
메서드
모든 프로필을 제거합니다.
Gem300CapabilityMutation clear()반환값
새 리비전과 무엇이든 제거되었는지 여부입니다. 빈 카탈로그를 비우면 changed == false를 보고합니다.
참고
- 예외
pdcomm::Error: 리비전 카운터가 소진되면PDCOMM_LIMIT_EXCEEDED이며, 그 밖의 네이티브 상태 코드일 수도 있습니다.
info
메서드
현재 리비전과 합계를 반환합니다.
Gem300CapabilityCatalogInfo info() const반환값
카탈로그 요약입니다.
참고
- 예외
pdcomm::Error: 이동된(moved-from) 카탈로그이면PDCOMM_INVALID_ARGUMENT입니다.
nativeHandle
메서드
C API를 직접 호출할 때 쓸, 소유 중인 네이티브 핸들을 반환합니다.
PdcommGem300CapabilityCatalog *nativeHandle() noexcept반환값
핸들입니다. 이동된(moved-from) 카탈로그이면 nullptr입니다. 소유권은 이 래퍼에 남습니다.
nativeHandle
메서드
읽기 전용 C API 호출에 쓸, 소유 중인 네이티브 핸들을 반환합니다.
const PdcommGem300CapabilityCatalog *nativeHandle() const noexcept반환값
핸들입니다. 이동된(moved-from) 카탈로그이면 nullptr입니다. 소유권은 이 래퍼에 남습니다.
operator=
메서드
현재 핸들을 해제한 뒤 other가 소유한 핸들의 소유권을 가져옵니다.
Gem300CapabilityCatalog &operator=(Gem300CapabilityCatalog &&other) noexcept매개변수
| 이름 | 설명 |
|---|---|
other | 원본 래퍼이며 비어 있게 됩니다. |
반환값
이 래퍼입니다.
operator=
메서드
복사 대입할 수 없습니다. 래퍼가 네이티브 핸들을 단독으로 소유합니다.
Gem300CapabilityCatalog &operator=(const Gem300CapabilityCatalog &) = deletereplace
메서드
카탈로그 전체를 profiles로 교체합니다.
Gem300CapabilityMutation replace(const std::vector<Gem300CapabilityProfile> &profiles)호출이 반환되기 전에 입력을 검증하고 복사합니다. 입력이 현재 내용과 같으면 아무것도 바뀌지 않고 리비전도 그대로입니다. 빈 vector를 넘기면 카탈로그를 비웁니다. 모든 기능은 정의된 검증 레이블로 저장됩니다.
매개변수
| 이름 | 설명 |
|---|---|
profiles | 순서대로 나열한 프로필입니다. 각 프로필에는 고유한 식별자와, 식별자가 고유하고 축이 서로 다른 기능 1~4개가 있어야 합니다. |
반환값
새 리비전과 내용이 바뀌었는지 여부입니다.
참고
- 예외
pdcomm::Error: 빈 프로필, 비어 있거나 출력할 수 없는 문자가 든 식별자, 중복 식별자, 중복 축이면PDCOMM_INVALID_ARGUMENT, 카탈로그 한도를 넘거나 리비전 카운터가 소진되면PDCOMM_LIMIT_EXCEEDED, 메모리가 부족하면PDCOMM_ALLOCATION_FAILED입니다. 어떤 실패에서도 카탈로그는 바뀌지 않습니다.
snapshot
메서드
현재 내용을 독립된 스냅숏으로 복사합니다.
Gem300CapabilitySnapshot snapshot() const반환값
이후 카탈로그가 바뀌거나 소멸되어도 유효한 스냅숏입니다.
참고
- 예외
pdcomm::Error: 메모리가 부족하면PDCOMM_ALLOCATION_FAILED, 이동된(moved-from) 카탈로그이면PDCOMM_INVALID_ARGUMENT입니다.
~Gem300CapabilityCatalog
메서드
pdcomm_gem300_capability_catalog_destroy()로 네이티브 핸들을 해제합니다.
~Gem300CapabilityCatalog()앞서 만든 스냅숏은 계속 유효합니다. 이동된(moved-from) 카탈로그는 아무것도 해제하지 않습니다.