Skip to content

Commit ee2d9d9

Browse files
committed
[[ Foundation ]] Add API to convert MCNumberRef to CFNumberRef.
This patch adds a new API MCNumberConvertToCFNumberRef which converts an MCNumberRef to the equivalent CFNumberRef.
1 parent c90daff commit ee2d9d9

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

libfoundation/include/foundation.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,7 @@ typedef wchar_t *BSTR;
681681
#endif
682682

683683
#if defined(__MAC__) || defined(__IOS__)
684+
typedef const struct __CFNumber *CFNumberRef;
684685
typedef const struct __CFString *CFStringRef;
685686
typedef const struct __CFData *CFDataRef;
686687
#endif
@@ -1821,7 +1822,12 @@ MC_DLLEXPORT bool MCNumberParseOffsetPartial(MCStringRef p_string, uindex_t offs
18211822
MC_DLLEXPORT bool MCNumberParseOffset(MCStringRef p_string, uindex_t offset, uindex_t char_count, MCNumberRef &r_number);
18221823
MC_DLLEXPORT bool MCNumberParse(MCStringRef string, MCNumberRef& r_number);
18231824
MC_DLLEXPORT bool MCNumberParseUnicodeChars(const unichar_t *chars, uindex_t char_count, MCNumberRef& r_number);
1824-
1825+
1826+
#if defined(__MAC__) || defined (__IOS__)
1827+
// Convert the given array to a CFArrayRef if it is a sequence.
1828+
MC_DLLEXPORT bool MCNumberConvertToCFNumberRef(MCArrayRef self, CFNumberRef& r_array);
1829+
#endif
1830+
18251831
MC_DLLEXPORT extern MCNumberRef kMCZero;
18261832
MC_DLLEXPORT extern MCNumberRef kMCOne;
18271833
MC_DLLEXPORT extern MCNumberRef kMCMinusOne;
@@ -2671,7 +2677,7 @@ MC_DLLEXPORT bool MCArrayIterate(MCArrayRef array, uintptr_t& iterator, MCNameRe
26712677

26722678
// Returns true if the given array is the empty array.
26732679
MC_DLLEXPORT bool MCArrayIsEmpty(MCArrayRef self);
2674-
2680+
26752681
////////////////////////////////////////////////////////////////////////////////
26762682
//
26772683
// LIST DEFINITIONS

libfoundation/src/foundation-number.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,29 @@ bool MCNumberParseOffsetPartial(MCStringRef p_string, uindex_t offset, uindex_t
284284
return t_success;
285285
}
286286

287+
#if defined(__MAC__) || defined (__IOS__)
288+
#include <CoreFoundation/CoreFoundation.h>
289+
MC_DLLEXPORT_DEF
290+
bool MCNumberConvertToCFNumberRef(MCNumberRef self, CFNumberRef& r_number)
291+
{
292+
CFNumberRef t_number;
293+
if (MCNumberIsInteger(self))
294+
t_number = CFNumberCreate(NULL,
295+
kCFNumberIntType,
296+
&self -> integer);
297+
else
298+
t_number = CFNumberCreate(NULL,
299+
kCFNumberFloat64Type,
300+
&self -> real);
301+
302+
if (t_number == NULL)
303+
return false;
304+
305+
r_number = t_number;
306+
return true;
307+
}
308+
#endif
309+
287310
////////////////////////////////////////////////////////////////////////////////
288311

289312
bool __MCNumberCopyDescription(__MCNumber *self, MCStringRef& r_string)

0 commit comments

Comments
 (0)