1// Copyright 2012 The Chromium Authors 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "partition_alloc/partition_alloc_base/apple/foundation_util.h" 6 7#include "partition_alloc/partition_alloc_base/check.h" 8 9namespace partition_alloc::internal::base::apple { 10 11#define PA_CF_CAST_DEFN(TypeCF) \ 12 template <> \ 13 TypeCF##Ref CFCast<TypeCF##Ref>(const CFTypeRef& cf_val) { \ 14 if (cf_val == NULL) { \ 15 return NULL; \ 16 } \ 17 if (CFGetTypeID(cf_val) == TypeCF##GetTypeID()) { \ 18 return (TypeCF##Ref)(cf_val); \ 19 } \ 20 return NULL; \ 21 } \ 22 \ 23 template <> \ 24 TypeCF##Ref CFCastStrict<TypeCF##Ref>(const CFTypeRef& cf_val) { \ 25 TypeCF##Ref rv = CFCast<TypeCF##Ref>(cf_val); \ 26 PA_BASE_DCHECK(cf_val == NULL || rv); \ 27 return rv; \ 28 } 29 30PA_CF_CAST_DEFN(CFArray) 31PA_CF_CAST_DEFN(CFBag) 32PA_CF_CAST_DEFN(CFBoolean) 33PA_CF_CAST_DEFN(CFData) 34PA_CF_CAST_DEFN(CFDate) 35PA_CF_CAST_DEFN(CFDictionary) 36PA_CF_CAST_DEFN(CFNull) 37PA_CF_CAST_DEFN(CFNumber) 38PA_CF_CAST_DEFN(CFSet) 39PA_CF_CAST_DEFN(CFString) 40PA_CF_CAST_DEFN(CFURL) 41PA_CF_CAST_DEFN(CFUUID) 42 43#undef PA_CF_CAST_DEFN 44 45} // namespace partition_alloc::internal::base::apple 46