12#ifndef OPENVPN_APPLECRYPTO_CF_CFHELPER_H
13#define OPENVPN_APPLECRYPTO_CF_CFHELPER_H
39 return CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
44 return CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
49template <
typename KEY>
52 CFTypeRef (*create_method)())
56 String keystr =
string(key);
57 CFTypeRef
ret = CFDictionaryGetValue(base, keystr());
61 ret = (*create_method)();
62 CFDictionaryAddValue(base, keystr(),
ret);
71template <
typename KEY>
74 String keystr =
string(key);
79template <
typename KEY>
82 String keystr =
string(key);
87template <
typename DICT,
typename KEY>
94template <
typename DICT,
typename KEY>
101template <
typename DICT,
typename KEY>
102inline std::string
dict_get_str(
const DICT &
dict,
const KEY &key,
const std::string &default_value)
108 return default_value;
112template <
typename DICT,
typename KEY>
117 if (num.defined() && CFNumberGetValue(num(), kCFNumberIntType, &
ret))
120 return default_value;
124template <
typename DICT,
typename KEY>
130 if (b() == kCFBooleanTrue)
132 else if (b() == kCFBooleanFalse)
135 return default_value;
141 if (theDict && key && value)
142 CFDictionarySetValue(theDict, key, value);
148 if (theArray && value)
149 CFArrayAppendValue(theArray, value);
153template <
typename KEY>
156 String keystr =
string(key);
162template <
typename KEY,
typename VALUE>
165 String keystr =
string(key);
166 String valstr =
string(value);
172template <
typename KEY>
175 String keystr =
string(key);
180template <
typename KEY>
183 String keystr =
string(key);
188template <
typename KEY>
191 String keystr =
string(key);
196template <
typename KEY>
199 String keystr =
string(key);
206template <
typename KEY>
209 String keystr =
string(key);
210 CFBooleanRef boolref = value ? kCFBooleanTrue : kCFBooleanFalse;
216template <
typename VALUE>
219 String valstr =
string(value);
const T * c_data() const
Returns a const pointer to the start of the buffer.
size_t size() const
Returns the size of the buffer in T objects.
void dict_set_bool(MutableDict &dict, const KEY &key, bool value)
MutableDict dict_get_create_dict(MutableDict &base, const KEY &key)
void dictionarySetValue(CFMutableDictionaryRef theDict, const void *key, const void *value)
BufferAllocatedType< CFTypeRef > SrcList
void dict_set_int(MutableDict &dict, const KEY &key, int value)
int dict_get_int(const DICT &dict, const KEY &key, const int default_value)
CFTypeRef mutable_array_new()
Array array(const void **values, CFIndex numValues)
Number number_from_int(const int n)
void array_append_int32(MutableArray &array, SInt32 value)
void dict_set_str(MutableDict &dict, const KEY &key, const VALUE &value)
void dict_set_index(MutableDict &dict, const KEY &key, CFIndex value)
void array_append_long_long(MutableArray &array, long long value)
void array_append_int(MutableArray &array, int value)
Number number_from_long_long(const long long n)
String string(const char *str)
CFTypeRef dict_get_obj(const DICT &dict, const KEY &key)
void dict_set_int32(MutableDict &dict, const KEY &key, SInt32 value)
void dict_set_obj(MutableDict &dict, const KEY &key, CFTypeRef value)
CFTypeRef dict_get_create(CFMutableDictionaryRef base, const KEY &key, CFTypeRef(*create_method)())
void array_append_str(MutableArray &array, const VALUE &value)
void arrayAppendValue(CFMutableArrayRef theArray, const void *value)
std::string cppstring(CFStringRef str)
Number number_from_index(const CFIndex n)
MutableArray dict_get_create_array(MutableDict &base, const KEY &key)
void dict_set_long_long(MutableDict &dict, const KEY &key, long long value)
Number number_from_int32(const SInt32 n)
Dict dict(const void **keys, const void **values, CFIndex numValues)
bool dict_get_bool(const DICT &dict, const KEY &key, const bool default_value)
void array_append_index(MutableArray &array, CFIndex value)
std::string dict_get_str(const DICT &dict, const KEY &key)
CFTypeRef dict_index(const DICT &dict, const KEY &key)
CFTypeRef mutable_dict_new()
os<< "Session Name: "<< tbc-> session_name<< '\n';os<< "Layer: "<< tbc-> layer str()<< '\n'