use std::ops::Range;
use objc::Encoding;
use crate::objective_c_runtime;
use super::{NSString, UInt};
#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
#[repr(C)]
pub struct NSRange {
pub location: UInt,
pub length: UInt,
}
unsafe impl objective_c_runtime::Encode for NSRange {
fn encode() -> objc::Encoding {
unsafe { Encoding::from_str("{location=I, length=I}") }
}
}
extern "C" {
pub fn NSMakeRange(loc: UInt, len: UInt) -> NSRange;
pub fn NSMaxRange(range: NSRange) -> UInt;
pub fn NSIntersectionRange(range1: NSRange, range2: NSRange) -> NSRange;
pub fn NSUnionRange(range1: NSRange, range2: NSRange) -> NSRange;
pub fn NSLocationInRange(loc: UInt, range: NSRange) -> bool;
pub fn NSEqualRanges(range1: NSRange, range2: NSRange) -> bool;
pub fn NSRangeFromString(aString: NSString) -> NSRange;
pub fn NSStringFromRange(range: NSRange) -> NSString;
}
impl From<Range<usize>> for NSRange {
fn from(range: Range<usize>) -> Self {
NSRange {
location: range.start as UInt,
length: (range.end - range.start) as UInt,
}
}
}
impl From<NSRange> for Range<usize> {
fn from(range: NSRange) -> Self {
range.location as usize..(range.location + range.length) as usize
}
}