<aside>
👉 HashMap::DeprecatedAtOrEmptyValue()
함수가 사용된 부분을 적절한 방식(at()
, Contains()
, find()
)으로 바꿔서 재작성
</aside>
Chromium code에서 사용하는 HashMap::at()
은 특정 key값이 포함되지 않은 경우에 대한 처리 방식이 std::map::at()
와 달랐다.
이런 차이를 줄이기 위해 Design Doc의 계획에 따라 기존의 HashMap::at()
함수를HashMap::DeprecatedAtOrEmptyValue()
로 이름을 바꿔놓고, HashMap::at()
은 CHECK
매크로를 이용해 key에 해당하는 값이 없으면 충돌나도록 수정되었다.
HashMap<T, U, V, W, X, Y>::at(KeyPeekInType key) const {
const ValueType* entry = impl_.Lookup(key);
CHECK(entry) << "HashMap::at found no value for the given key. See "
"<https://crbug.com/1058527.">;
return MappedTraits::Peek(entry->value);
}
// 기존의 at() 함수 코드에서 함수 이름만 변경(commit ID 934a474195968와 비교)
HashMap<T, U, V, W, X, Y>::DeprecatedAtOrEmptyValue(KeyPeekInType key) const {
const ValueType* entry = impl_.Lookup(key);
if (!entry)
return MappedTraits::Peek(MappedTraits::EmptyValue());
return MappedTraits::Peek(entry->value);
}
이제는 이전 함수였던 HashMap::DeprecatedAtOrEmptyValue()
을 삭제하기 위해 해당 함수가 쓰인 코드를 바뀐 at()
함수를 사용하거나 Contains()
, find()
함수를 이용해 재작성해야한다.
CHECK
: true가 아니면 바로 crash
DECHEK
: DCHECK_IS_ON = true일 때만 CHECK
가 컴파일 됨
"이 조건은 보통 true지만 예외적인 경우에는 아닐 수 있다"