34 return { (
int) range.location, (
int) (range.location + range.length) };
39 return NSMakeRange ((NSUInteger) range.
getStart(), (NSUInteger) range.
getLength());
49 return [NSString stringWithUTF8String:
s.toUTF8()];
54 return [NSString stringWithUTF8String:
s];
59 return [NSString string];
74 auto array = [[NSMutableArray alloc]
init];
76 for (
auto string: strings)
79 return [array autorelease];
82inline NSArray* varArrayToNSArray (
const var& varToParse);
86 auto dictionary = [NSMutableDictionary dictionary];
94 for (
int i = 0;
i < properties.size(); ++
i)
98 const var& valueVar = properties.getValueAt (
i);
104 [dictionary setObject: valueDictionary forKey: keyString];
110 [dictionary setObject: valueArray forKey: keyString];
116 [dictionary setObject: valueString forKey: keyString];
131 const auto* varArray = varToParse.
getArray();
133 auto array = [NSMutableArray arrayWithCapacity: (NSUInteger) varArray->size()];
135 for (
const auto& aVar : *varArray)
141 [array addObject: valueDictionary];
143 else if (aVar.isArray())
147 [array addObject: valueArray];
153 [array addObject: valueString];
160var nsObjectToVar (NSObject* array);
166 for (NSString*
key in dictionary)
169 return var (dynamicObject.
get());
179 return var (resultArray);
184 if ([obj isKindOfClass: [NSString
class]])
return nsStringToJuce ((NSString*) obj);
185 else if ([obj isKindOfClass: [NSNumber
class]])
return nsStringToJuce ([(NSNumber*) obj stringValue]);
186 else if ([obj isKindOfClass: [NSDictionary
class]])
return nsDictionaryToVar ((NSDictionary*) obj);
187 else if ([obj isKindOfClass: [NSArray
class]])
return nsArrayToVar ((NSArray*) obj);
198template <
typename RectangleType>
199NSRect makeNSRect (
const RectangleType&
r)
noexcept
201 return NSMakeRect (
static_cast<CGFloat
> (
r.getX()),
202 static_cast<CGFloat
> (
r.getY()),
203 static_cast<CGFloat
> (
r.getWidth()),
204 static_cast<CGFloat
> (
r.getHeight()));
209 template <
typename T>
213 static constexpr auto value =
sizeof (T) > 8;
215 static constexpr auto value =
sizeof (T) > 16;
220 struct NeedsStret<
void> {
static constexpr auto value =
false; };
222 template <typename T, bool b = NeedsStret<T>::value>
223 struct MetaSuperFn {
static constexpr auto value = objc_msgSendSuper_stret; };
225 template <
typename T>
226 struct MetaSuperFn<T,
false> {
static constexpr auto value = objc_msgSendSuper; };
232template <
typename SuperType,
typename ReturnType,
typename... Params>
235 using SuperFn = ReturnType (*) (
struct objc_super*, SEL, Params...);
238 objc_super
s = { self, [SuperType
class] };
239 return fn (&
s, sel, params...);
245 void operator() (NSObject*
object)
const noexcept
247 if (
object !=
nullptr)
252template <
typename NSType>
309 bool operator== (std::nullptr_t)
const {
return item ==
nullptr; }
310 bool operator!= (std::nullptr_t)
const {
return ! (*
this ==
nullptr); }
323 return std::array<char, 1> { {
'\0' } };
326 template <
typename A,
size_t... As,
typename B,
size_t... Bs>
328 B&&
b, std::index_sequence<Bs...>)
330 return std::array<char,
sizeof... (As) +
sizeof... (Bs) + 1> { {
a[As]...,
b[Bs]...,
'\0' } };
333 template <
size_t A,
size_t B>
337 b, std::make_index_sequence<B - 1>());
340 template <
size_t A,
typename... Others>
348template <
typename Type>
352 object_getInstanceVariable (self,
name, &
v);
353 return static_cast<Type
> (
v);
356template <
typename Super
classType>
360 :
cls (objc_allocateClassPair ([SuperclassType class],
getRandomisedName (nameRoot).toUTF8(), 0))
366 auto kvoSubclassName =
String (
"NSKVONotifying_") + class_getName (
cls);
368 if (objc_getClass (kvoSubclassName.toUTF8()) ==
nullptr)
369 objc_disposeClassPair (
cls);
374 objc_registerClassPair (
cls);
379 return class_createInstance (
cls, 0);
382 template <
typename Type>
385 BOOL b = class_addIvar (
cls,
name,
sizeof (Type), (
uint8_t) rint (log2 (
sizeof (Type))), @encode (Type));
389 template <
typename Result,
typename... Args>
393 const auto b = class_addMethod (
cls, selector, (IMP) callbackFn,
s.data());
399 BOOL b = class_addProtocol (
cls, protocol);
403 template <
typename ReturnType,
typename... Params>
406 return ObjCMsgSendSuper<SuperclassType, ReturnType, Params...> (self, sel, params...);
422template <
class JuceClass>
426 :
ObjCClass<NSObject> (
"ObjCLifetimeManagedClass_")
442 object_setInstanceVariable (self,
"cppObject", obj);
452 object_setInstanceVariable (_self,
"cppObject",
nullptr);
461template <
typename Class>
467template <
typename Class>
477template <
typename Class>
483template <
typename ReturnT,
class Class,
typename... Params>
486 __block Class* _this =
object;
487 __block ReturnT (Class::*_fn)(Params...) =
fn;
489 return [[^ReturnT (Params... params) {
return (_this->*_fn) (params...); }
copy] autorelease];
492template <
typename BlockType>
497 template <
typename R,
class C,
typename...
P>
501 bool operator== (
const void*
ptr)
const {
return ((
const void*)
block ==
ptr); }
502 bool operator!= (
const void*
ptr)
const {
return ((
const void*)
block !=
ptr); }
505 operator BlockType()
const {
return block; }
#define copy(x)
Definition ADnoteParameters.cpp:1011
#define noexcept
Definition DistrhoDefines.h:72
uint8_t a
Definition Spc_Cpu.h:141
static String toHexString(int number)
Definition String.cpp:1830
Definition juce_Array.h:56
void add(const ElementType &newElement)
Definition juce_Array.h:418
Definition juce_CharPointer_UTF8.h:35
Definition juce_DynamicObject.h:40
NamedValueSet & getProperties() noexcept
Definition juce_DynamicObject.h:99
ReferenceCountedObjectPtr< DynamicObject > Ptr
Definition juce_DynamicObject.h:47
virtual void setProperty(const Identifier &propertyName, const var &newValue)
Definition juce_DynamicObject.cpp:50
Definition juce_File.h:45
ObjCBlock(C *_this, R(C::*fn)(P...))
Definition juce_mac_ObjCHelpers.h:498
~ObjCBlock()
Definition juce_mac_ObjCHelpers.h:503
ObjCBlock()
Definition juce_mac_ObjCHelpers.h:496
ObjCBlock(BlockType b)
Definition juce_mac_ObjCHelpers.h:499
BlockType block
Definition juce_mac_ObjCHelpers.h:508
T get() const
Definition juce_mac_ObjCHelpers.h:296
ObjCObjectHandle()=default
ObjCObjectHandle(const ObjCObjectHandle &other)
Definition juce_mac_ObjCHelpers.h:270
T item
Definition juce_mac_ObjCHelpers.h:315
ObjCObjectHandle(ObjCObjectHandle &&other) noexcept
Definition juce_mac_ObjCHelpers.h:284
void swap(ObjCObjectHandle &other) noexcept
Definition juce_mac_ObjCHelpers.h:313
void reset(T ptr)
Definition juce_mac_ObjCHelpers.h:294
ObjCObjectHandle(T ptr)
Definition juce_mac_ObjCHelpers.h:266
~ObjCObjectHandle() noexcept
Definition juce_mac_ObjCHelpers.h:268
void reset()
Definition juce_mac_ObjCHelpers.h:298
Definition juce_Range.h:40
constexpr ValueType getStart() const noexcept
Definition juce_Range.h:80
constexpr ValueType getLength() const noexcept
Definition juce_Range.h:83
ReferencedType * get() const noexcept
Definition juce_ReferenceCountedObject.h:381
Definition juce_Result.h:57
Definition juce_StringArray.h:35
Definition juce_String.h:53
Definition juce_Variant.h:42
DynamicObject * getDynamicObject() const noexcept
Definition juce_Variant.cpp:575
Array< var > * getArray() const noexcept
Definition juce_Variant.cpp:573
bool isObject() const noexcept
Definition juce_Variant.cpp:560
String toString() const
Definition juce_Variant.cpp:570
bool isArray() const noexcept
Definition juce_Variant.cpp:561
unsigned v[N_MAX]
Definition inflate.c:1584
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
unsigned f
Definition inflate.c:1572
static PuglViewHint int value
Definition pugl.h:1708
static const char * name
Definition pugl.h:1582
void * object
Definition jmemsys.h:50
#define JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE(...)
Definition juce_CompilerWarnings.h:181
#define JUCE_END_IGNORE_WARNINGS_GCC_LIKE
Definition juce_CompilerWarnings.h:182
#define A(x)
Definition lice_arc.cpp:13
float in
Definition lilv_test.c:1460
unsigned char uint8_t
Definition mid.cpp:98
constexpr auto joinCompileTimeStr(const char(&a)[A], std::array< char, B > b)
Definition juce_mac_ObjCHelpers.h:334
constexpr auto joinCompileTimeStrImpl(A &&a, std::index_sequence< As... >, B &&b, std::index_sequence< Bs... >)
Definition juce_mac_ObjCHelpers.h:327
constexpr auto makeCompileTimeStr()
Definition juce_mac_ObjCHelpers.h:321
Definition carla_juce.cpp:31
NSRange juceRangeToNS(Range< int > range)
Definition juce_mac_ObjCHelpers.h:37
Class * getJuceClassFromNSObject(NSObject *obj)
Definition juce_mac_ObjCHelpers.h:478
NSString * nsStringLiteral(const char *const s) noexcept
Definition juce_mac_ObjCHelpers.h:52
NSObject * createNSObjectFromJuceClass(Class *obj)
Definition juce_mac_ObjCHelpers.h:468
NSURL * createNSURLFromFile(const String &f)
Definition juce_mac_ObjCHelpers.h:62
Range< int > nsRangeToJuce(NSRange range)
Definition juce_mac_ObjCHelpers.h:32
var nsArrayToVar(NSArray *array)
Definition juce_mac_ObjCHelpers.h:172
String nsStringToJuce(NSString *s)
Definition juce_mac_ObjCHelpers.h:42
NSString * nsEmptyString() noexcept
Definition juce_mac_ObjCHelpers.h:57
NSArray * varArrayToNSArray(const var &varToParse)
Definition juce_mac_ObjCHelpers.h:124
Type getIvar(id self, const char *name)
Definition juce_mac_ObjCHelpers.h:349
NSArray * createNSArrayFromStringArray(const StringArray &strings)
Definition juce_mac_ObjCHelpers.h:72
jack_client_t client jack_client_t client jack_client_t client jack_client_t JackInfoShutdownCallback void arg jack_client_t jack_port_t port void func jack_client_t const char const char unsigned long flags const jack_port_t port jack_client_t jack_port_id_t port_id const jack_port_t const char port_name const jack_port_t port void * ptr
Definition juce_linux_JackAudio.cpp:79
void ignoreUnused(Types &&...) noexcept
Definition juce_MathsFunctions.h:333
ReturnType ObjCMsgSendSuper(id self, SEL sel, Params... params)
Definition juce_mac_ObjCHelpers.h:233
std::unique_ptr< NSType, NSObjectDeleter > NSUniquePtr
Definition juce_mac_ObjCHelpers.h:253
ReturnT(^)(Params...) CreateObjCBlock(Class *object, ReturnT(Class::*fn)(Params...))
Definition juce_mac_ObjCHelpers.h:484
NSString * juceStringToNS(const String &s)
Definition juce_mac_ObjCHelpers.h:47
NSDictionary * varObjectToNSDictionary(const var &varToParse)
Definition juce_mac_ObjCHelpers.h:84
var nsObjectToVar(NSObject *array)
Definition juce_mac_ObjCHelpers.h:182
var nsDictionaryToVar(NSDictionary *dictionary)
Definition juce_mac_ObjCHelpers.h:162
#define false
Definition ordinals.h:83
#define P(protos)
Definition proto.h:37
Definition juce_mac_ObjCHelpers.h:244
Definition juce_mac_ObjCHelpers.h:358
void addIvar(const char *name)
Definition juce_mac_ObjCHelpers.h:383
ObjCClass(const char *nameRoot)
Definition juce_mac_ObjCHelpers.h:359
~ObjCClass()
Definition juce_mac_ObjCHelpers.h:364
static String getRandomisedName(const char *root)
Definition juce_mac_ObjCHelpers.h:412
void addProtocol(Protocol *protocol)
Definition juce_mac_ObjCHelpers.h:397
void addMethod(SEL selector, Result(*callbackFn)(id, SEL, Args...))
Definition juce_mac_ObjCHelpers.h:390
SuperclassType * createInstance() const
Definition juce_mac_ObjCHelpers.h:377
static ReturnType sendSuperclassMessage(id self, SEL sel, Params... params)
Definition juce_mac_ObjCHelpers.h:404
Class cls
Definition juce_mac_ObjCHelpers.h:409
void registerClass()
Definition juce_mac_ObjCHelpers.h:372
Definition juce_mac_ObjCHelpers.h:424
ObjCLifetimeManagedClass()
Definition juce_mac_ObjCHelpers.h:425
static id initWithJuceObject(id _self, SEL, JuceClass *obj)
Definition juce_mac_ObjCHelpers.h:439
static void dealloc(id _self, SEL)
Definition juce_mac_ObjCHelpers.h:447
static ObjCLifetimeManagedClass objCLifetimeManagedClass
Definition juce_mac_ObjCHelpers.h:458
const char const char const char const char char * fn
Definition swell-functions.h:168
signed char BOOL
Definition swell-types.h:160
ZCONST char * key
Definition crypt.c:587
int r
Definition crypt.c:458
typedef int(UZ_EXP MsgFn)()
#define void
Definition unzip.h:396