Skip to content
Open
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
type = "1"
version = "2.0">
</Bucket>
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0630"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "85A33C54198548BC00AD4CF4"
BuildableName = "WeakArray.framework"
BlueprintName = "WeakArray"
ReferencedContainer = "container:WeakArray.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "85A33C5F198548BC00AD4CF4"
BuildableName = "WeakArrayTests.xctest"
BlueprintName = "WeakArrayTests"
ReferencedContainer = "container:WeakArray.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "85A33C5F198548BC00AD4CF4"
BuildableName = "WeakArrayTests.xctest"
BlueprintName = "WeakArrayTests"
ReferencedContainer = "container:WeakArray.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "85A33C54198548BC00AD4CF4"
BuildableName = "WeakArray.framework"
BlueprintName = "WeakArray"
ReferencedContainer = "container:WeakArray.xcodeproj">
</BuildableReference>
</MacroExpansion>
</TestAction>
<LaunchAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Debug"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "85A33C54198548BC00AD4CF4"
BuildableName = "WeakArray.framework"
BlueprintName = "WeakArray"
ReferencedContainer = "container:WeakArray.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "85A33C54198548BC00AD4CF4"
BuildableName = "WeakArray.framework"
BlueprintName = "WeakArray"
ReferencedContainer = "container:WeakArray.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>WeakArray.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>85A33C54198548BC00AD4CF4</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>85A33C5F198548BC00AD4CF4</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>
26 changes: 14 additions & 12 deletions WeakArray/WeakArray.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
// Copyright (c) 2014 David Mauro. All rights reserved.
//

import Foundation

// MARK: Operator Overloads

public func ==<T: Equatable>(lhs: WeakArray<T>, rhs: WeakArray<T>) -> Bool {
Expand All @@ -26,7 +28,7 @@ public func !=<T: Equatable>(lhs: WeakArray<T>, rhs: WeakArray<T>) -> Bool {
return !(lhs == rhs)
}

public func ==<T: Equatable>(lhs: Slice<T?>, rhs: Slice<T?>) -> Bool {
public func ==<T: Equatable>(lhs: ArraySlice<T?>, rhs: ArraySlice<T?>) -> Bool {
var areEqual = false
if lhs.count == rhs.count {
areEqual = true
Expand All @@ -40,7 +42,7 @@ public func ==<T: Equatable>(lhs: Slice<T?>, rhs: Slice<T?>) -> Bool {
return areEqual
}

public func !=<T: Equatable>(lhs: Slice<T?>, rhs: Slice<T?>) -> Bool {
public func !=<T: Equatable>(lhs: ArraySlice<T?>, rhs: ArraySlice<T?>) -> Bool {
return !(lhs == rhs)
}

Expand All @@ -59,7 +61,7 @@ public func +=<T> (inout lhs: WeakArray<T>, rhs: Array<T>) -> WeakArray<T> {
private class Weak<T: AnyObject> {
weak var value : T?
var description: String {
if let val = value? {
if let val = value {
return "\(val)"
} else {
return "nil"
Expand Down Expand Up @@ -110,8 +112,8 @@ public struct WeakArray<T: AnyObject>: SequenceType, Printable, DebugPrintable,
}

public func generate() -> GeneratorType {
let weakSlice: Slice<WeakObject> = items[0..<items.count]
let slice: Slice<T?> = weakSlice.map { $0.value }
let weakSlice: ArraySlice<WeakObject> = items[0..<items.count]
let slice: ArraySlice<T?> = weakSlice.map { $0.value }
return GeneratorType(items: slice)
}

Expand All @@ -128,10 +130,10 @@ public struct WeakArray<T: AnyObject>: SequenceType, Printable, DebugPrintable,
}
}

public subscript(range: Range<Int>) -> Slice<T?> {
public subscript(range: Range<Int>) -> ArraySlice<T?> {
get {
let weakSlice: Slice<WeakObject> = items[range]
let slice: Slice<T?> = weakSlice.map { $0.value }
let weakSlice: ArraySlice<WeakObject> = items[range]
let slice : ArraySlice<T?> = weakSlice.map { $0.value }
return slice
}
set(value) {
Expand Down Expand Up @@ -170,17 +172,17 @@ public struct WeakArray<T: AnyObject>: SequenceType, Printable, DebugPrintable,
items.removeRange(subRange)
}

mutating public func replaceRange(subRange: Range<Int>, with newElements: Slice<T?>) {
mutating public func replaceRange(subRange: Range<Int>, with newElements: ArraySlice<T?>) {
let weakElements = newElements.map { Weak(value: $0) }
items.replaceRange(subRange, with: weakElements)
}

mutating public func splice(newElements: Slice<T?>, atIndex i: Int) {
mutating public func splice(newElements: ArraySlice<T?>, atIndex i: Int) {
let weakElements = newElements.map { Weak(value: $0) }
items.splice(weakElements, atIndex: i)
}

mutating public func extend(newElements: Slice<T?>) {
mutating public func extend(newElements: ArraySlice<T?>) {
let weakElements = newElements.map { Weak(value: $0) }
items.extend(weakElements)
}
Expand Down Expand Up @@ -209,7 +211,7 @@ public struct WeakArray<T: AnyObject>: SequenceType, Printable, DebugPrintable,

public struct WeakGenerator<T>: GeneratorType {
typealias Element = T
private var items: Slice<T?>
private var items: ArraySlice<T?>

mutating public func next() -> T? {
while !items.isEmpty {
Expand Down