Skip to content

[stdlib] Some stubs and trivial refactorings; NFC #17835

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 10, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions stdlib/public/SwiftShims/UnicodeShims.h
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ typedef enum __swift_stdlib_UBreakIteratorType {
} __swift_stdlib_UBreakIteratorType;

typedef struct __swift_stdlib_UBreakIterator __swift_stdlib_UBreakIterator;
typedef struct __swift_stdlib_UText __swift_stdlib_UText;
typedef struct __swift_stdlib_UNormalizer2 __swift_stdlib_UNormalizer2;
typedef __swift_int8_t __swift_stdlib_UBool;
typedef __swift_int32_t __swift_stdlib_UChar32;
Expand All @@ -398,12 +399,28 @@ __swift_stdlib_ubrk_open(__swift_stdlib_UBreakIteratorType type,
__swift_int32_t textLength,
__swift_stdlib_UErrorCode *status);

SWIFT_RUNTIME_STDLIB_INTERFACE
void __swift_stdlib_ubrk_setUText(__swift_stdlib_UBreakIterator *bi,
__swift_stdlib_UText *text,
__swift_stdlib_UErrorCode *status);

SWIFT_RUNTIME_STDLIB_INTERFACE
void __swift_stdlib_ubrk_setText(__swift_stdlib_UBreakIterator *bi,
const __swift_stdlib_UChar *text,
__swift_int32_t textLength,
__swift_stdlib_UErrorCode *status);

SWIFT_RUNTIME_STDLIB_INTERFACE
__swift_stdlib_UText *
__swift_stdlib_utext_openUTF8(__swift_stdlib_UText * _Nullable, const char *,
__swift_int64_t, __swift_stdlib_UErrorCode*);

SWIFT_RUNTIME_STDLIB_INTERFACE
__swift_stdlib_UText *
__swift_stdlib_utext_openUChars(__swift_stdlib_UText * _Nullable,
const __swift_stdlib_UChar *,
__swift_int64_t, __swift_stdlib_UErrorCode*);

SWIFT_RUNTIME_STDLIB_INTERFACE
__swift_int32_t __swift_stdlib_ubrk_preceding(__swift_stdlib_UBreakIterator *bi,
__swift_int32_t offset);
Expand Down
17 changes: 17 additions & 0 deletions stdlib/public/core/BidirectionalCollection.swift
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,11 @@ extension BidirectionalCollection {

@inlinable // protocol-only
public func index(_ i: Index, offsetBy n: Int) -> Index {
return _index(i, offsetBy: n)
}

@inlinable // protocol-only
internal func _index(_ i: Index, offsetBy n: Int) -> Index {
if n >= 0 {
return _advanceForward(i, by: n)
}
Expand All @@ -152,6 +157,13 @@ extension BidirectionalCollection {
@inlinable // protocol-only
public func index(
_ i: Index, offsetBy n: Int, limitedBy limit: Index
) -> Index? {
return _index(i, offsetBy: n, limitedBy: limit)
}

@inlinable // protocol-only
internal func _index(
_ i: Index, offsetBy n: Int, limitedBy limit: Index
) -> Index? {
if n >= 0 {
return _advanceForward(i, by: n, limitedBy: limit)
Expand All @@ -168,6 +180,11 @@ extension BidirectionalCollection {

@inlinable // protocol-only
public func distance(from start: Index, to end: Index) -> Int {
return _distance(from: start, to: end)
}

@inlinable // protocol-only
internal func _distance(from start: Index, to end: Index) -> Int {
var start = start
var count = 0

Expand Down
31 changes: 31 additions & 0 deletions stdlib/public/stubs/UnicodeNormalization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ extern "C" {

// Types
typedef struct UBreakIterator UBreakIterator;
typedef struct UText UText;
typedef struct UBreakIterator UNormalizer2;
typedef enum UBreakIteratorType {} UBreakIteratorType;
typedef enum UErrorCode {} UErrorCode;
Expand All @@ -40,6 +41,10 @@ UBreakIterator *ubrk_open(UBreakIteratorType, const char *, const UChar *,
int32_t ubrk_preceding(UBreakIterator *, int32_t);
int32_t ubrk_following(UBreakIterator *, int32_t);
void ubrk_setText(UBreakIterator *, const UChar *, int32_t, UErrorCode *);
void ubrk_setUText(UBreakIterator *, UText *, UErrorCode *);

UText *utext_openUTF8(UText *, const char *, int64_t, UErrorCode *);
UText *utext_openUChars(UText *, const UChar *, int64_t, UErrorCode *);

// Comparison, normalization, and character property APIs
int32_t unorm2_spanQuickCheckYes(const UNormalizer2 *, const UChar *, int32_t,
Expand Down Expand Up @@ -164,6 +169,32 @@ void swift::__swift_stdlib_ubrk_setText(
textLength, ptr_cast<UErrorCode>(status));
}

void swift::__swift_stdlib_ubrk_setUText(
swift::__swift_stdlib_UBreakIterator *bi, __swift_stdlib_UText *text,
__swift_stdlib_UErrorCode *status) {
return ubrk_setUText(ptr_cast<UBreakIterator>(bi), ptr_cast<UText>(text),
ptr_cast<UErrorCode>(status));
}

SWIFT_RUNTIME_STDLIB_INTERFACE swift::__swift_stdlib_UText *
swift::__swift_stdlib_utext_openUTF8(__swift_stdlib_UText *ut,
const char *s, int64_t len,
__swift_stdlib_UErrorCode *status) {
return ptr_cast<__swift_stdlib_UText>(
utext_openUTF8(ptr_cast<UText>(ut), s, len,
ptr_cast<UErrorCode>(status)));
}

SWIFT_RUNTIME_STDLIB_INTERFACE swift::__swift_stdlib_UText *
swift::__swift_stdlib_utext_openUChars(__swift_stdlib_UText *ut,
const __swift_stdlib_UChar *s,
int64_t len,
__swift_stdlib_UErrorCode *status) {
return ptr_cast<__swift_stdlib_UText>(
utext_openUChars(ptr_cast<UText>(ut), ptr_cast<UChar>(s), len,
ptr_cast<UErrorCode>(status)));
}

swift::__swift_stdlib_UBool swift::__swift_stdlib_unorm2_hasBoundaryBefore(
const __swift_stdlib_UNormalizer2 *ptr, __swift_stdlib_UChar32 char32) {
return unorm2_hasBoundaryBefore(ptr_cast<UNormalizer2>(ptr), char32);
Expand Down