// Copyright 2008 The Chromium Authors. All rights reserved.
|
// Use of this source code is governed by a BSD-style license that can be
|
// found in the LICENSE file.
|
|
#include "base/mac/foundation_util.h"
|
|
#if !defined(OS_IOS)
|
extern "C" {
|
CFTypeID SecACLGetTypeID();
|
CFTypeID SecTrustedApplicationGetTypeID();
|
} // extern "C"
|
#endif
|
|
namespace base {
|
namespace mac {
|
|
// Definitions for the corresponding CF_TO_NS_CAST_DECL macros in
|
// foundation_util.h.
|
#define CF_TO_NS_CAST_DEFN(TypeCF, TypeNS) \
|
\
|
TypeNS* CFToNSCast(TypeCF##Ref cf_val) { \
|
DCHECK(!cf_val || TypeCF##GetTypeID() == CFGetTypeID(cf_val)); \
|
TypeNS* ns_val = \
|
const_cast<TypeNS*>(reinterpret_cast<const TypeNS*>(cf_val)); \
|
return ns_val; \
|
} \
|
\
|
TypeCF##Ref NSToCFCast(TypeNS* ns_val) { \
|
TypeCF##Ref cf_val = reinterpret_cast<TypeCF##Ref>(ns_val); \
|
DCHECK(!cf_val || TypeCF##GetTypeID() == CFGetTypeID(cf_val)); \
|
return cf_val; \
|
}
|
|
#define CF_TO_NS_MUTABLE_CAST_DEFN(name) \
|
CF_TO_NS_CAST_DEFN(CF##name, NS##name) \
|
\
|
NSMutable##name* CFToNSCast(CFMutable##name##Ref cf_val) { \
|
DCHECK(!cf_val || CF##name##GetTypeID() == CFGetTypeID(cf_val)); \
|
NSMutable##name* ns_val = reinterpret_cast<NSMutable##name*>(cf_val); \
|
return ns_val; \
|
} \
|
\
|
CFMutable##name##Ref NSToCFCast(NSMutable##name* ns_val) { \
|
CFMutable##name##Ref cf_val = \
|
reinterpret_cast<CFMutable##name##Ref>(ns_val); \
|
DCHECK(!cf_val || CF##name##GetTypeID() == CFGetTypeID(cf_val)); \
|
return cf_val; \
|
}
|
|
CF_TO_NS_MUTABLE_CAST_DEFN(Array)
|
CF_TO_NS_MUTABLE_CAST_DEFN(AttributedString)
|
CF_TO_NS_CAST_DEFN(CFCalendar, NSCalendar)
|
CF_TO_NS_MUTABLE_CAST_DEFN(CharacterSet)
|
CF_TO_NS_MUTABLE_CAST_DEFN(Data)
|
CF_TO_NS_CAST_DEFN(CFDate, NSDate)
|
CF_TO_NS_MUTABLE_CAST_DEFN(Dictionary)
|
CF_TO_NS_CAST_DEFN(CFError, NSError)
|
CF_TO_NS_CAST_DEFN(CFLocale, NSLocale)
|
CF_TO_NS_CAST_DEFN(CFNumber, NSNumber)
|
CF_TO_NS_CAST_DEFN(CFRunLoopTimer, NSTimer)
|
CF_TO_NS_CAST_DEFN(CFTimeZone, NSTimeZone)
|
CF_TO_NS_MUTABLE_CAST_DEFN(Set)
|
CF_TO_NS_CAST_DEFN(CFReadStream, NSInputStream)
|
CF_TO_NS_CAST_DEFN(CFWriteStream, NSOutputStream)
|
CF_TO_NS_MUTABLE_CAST_DEFN(String)
|
CF_TO_NS_CAST_DEFN(CFURL, NSURL)
|
|
#undef CF_TO_NS_CAST_DEFN
|
#undef CF_TO_NS_MUTABLE_CAST_DEFN
|
|
#define CF_CAST_DEFN(TypeCF) \
|
template<> TypeCF##Ref \
|
CFCast<TypeCF##Ref>(const CFTypeRef& cf_val) { \
|
if (cf_val == NULL) { \
|
return NULL; \
|
} \
|
if (CFGetTypeID(cf_val) == TypeCF##GetTypeID()) { \
|
return (TypeCF##Ref)(cf_val); \
|
} \
|
return NULL; \
|
} \
|
\
|
template<> TypeCF##Ref \
|
CFCastStrict<TypeCF##Ref>(const CFTypeRef& cf_val) { \
|
TypeCF##Ref rv = CFCast<TypeCF##Ref>(cf_val); \
|
DCHECK(cf_val == NULL || rv); \
|
return rv; \
|
}
|
|
CF_CAST_DEFN(CFArray)
|
CF_CAST_DEFN(CFBag)
|
CF_CAST_DEFN(CFBoolean)
|
CF_CAST_DEFN(CFData)
|
CF_CAST_DEFN(CFDate)
|
CF_CAST_DEFN(CFDictionary)
|
CF_CAST_DEFN(CFNull)
|
CF_CAST_DEFN(CFNumber)
|
CF_CAST_DEFN(CFSet)
|
CF_CAST_DEFN(CFString)
|
CF_CAST_DEFN(CFURL)
|
CF_CAST_DEFN(CFUUID)
|
|
CF_CAST_DEFN(CGColor)
|
|
CF_CAST_DEFN(CTFont)
|
CF_CAST_DEFN(CTRun)
|
|
#if !defined(OS_IOS)
|
CF_CAST_DEFN(SecACL)
|
CF_CAST_DEFN(SecTrustedApplication)
|
#endif
|
|
#undef CF_CAST_DEFN
|
|
} // namespace mac
|
} // namespace base
|