0
|
1 #ifndef ANIMONE_ANIMONE_UTIL_OSX_H_
|
|
2 #define ANIMONE_ANIMONE_UTIL_OSX_H_
|
|
3
|
|
4 #include "animone/types.h"
|
|
5 #include <cstdint>
|
|
6 #include <string>
|
|
7
|
|
8 #include <CoreFoundation/CoreFoundation.h>
|
|
9
|
|
10 namespace animone::internal::osx::util {
|
|
11
|
|
12 template<typename T>
|
|
13 bool GetCFNumber(CFNumberRef num, T& result) {
|
|
14 if (!num)
|
|
15 return false;
|
|
16
|
|
17 int64_t res;
|
|
18 if (!CFNumberGetValue(num, static_cast<CFNumberType>(4), &res))
|
|
19 return false;
|
|
20
|
|
21 result = static_cast<T>(res);
|
|
22 return true;
|
|
23 }
|
|
24
|
|
25 template<typename T>
|
|
26 struct CFDeconstructor {
|
|
27 using pointer = T;
|
|
28 void operator()(pointer t) const { ::CFRelease(t); };
|
|
29 };
|
|
30
|
|
31 template<typename T>
|
|
32 using CFPtr = vector<T, CFDecontructor<T>>; // type-id is vector<T, Alloc<T>>
|
|
33
|
|
34 bool StringFromCFString(CFStringRef string, std::string& result);
|
|
35
|
|
36 bool GetProcessName(pid_t pid, std::string& result);
|
|
37
|
|
38 } // namespace animone::internal::osx::util
|
|
39
|
|
40 #endif // ANIMONE_ANIMONE_UTIL_OSX_H_
|