#ifndef NSVALUE_BOXED_EXPRESSIONS_SUPPORT_H
#define NSVALUE_BOXED_EXPRESSIONS_SUPPORT_H

#define BOXABLE __attribute__((objc_boxable))

typedef unsigned long NSUInteger;
typedef double CGFloat;

typedef struct BOXABLE _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

typedef struct BOXABLE _NSPoint {
    CGFloat x;
    CGFloat y;
} NSPoint;

typedef struct BOXABLE _NSSize {
    CGFloat width;
    CGFloat height;
} NSSize;

typedef struct BOXABLE _NSRect {
    NSPoint origin;
    NSSize size;
} NSRect;

struct CGPoint {
  CGFloat x;
  CGFloat y;
};
typedef struct BOXABLE CGPoint CGPoint;

struct CGSize {
  CGFloat width;
  CGFloat height;
};
typedef struct BOXABLE CGSize CGSize;

struct CGRect {
  CGPoint origin;
  CGSize size;
};
typedef struct BOXABLE CGRect CGRect;

struct NSEdgeInsets {
  CGFloat top;
  CGFloat left;
  CGFloat bottom;
  CGFloat right;
};
typedef struct BOXABLE NSEdgeInsets NSEdgeInsets;

@interface NSValue

+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;

@end

NSRange getRange();

#endif // NSVALUE_BOXED_EXPRESSIONS_SUPPORT_H