Skip to content

Commit

Permalink
Rename NetSocket.CircularBuffer to CircularByteBuffer.
Browse files Browse the repository at this point in the history
  • Loading branch information
shogo4405 committed Dec 27, 2022
1 parent 2e3771a commit efc893b
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 114 deletions.
16 changes: 8 additions & 8 deletions HaishinKit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -314,9 +314,9 @@
2EC97B7227880FF400D8BE32 /* OnTapGestureView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EC97B6E27880FF400D8BE32 /* OnTapGestureView.swift */; };
2EC97B7327880FF400D8BE32 /* Views.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EC97B6F27880FF400D8BE32 /* Views.swift */; };
2EC97B7427880FF400D8BE32 /* MTHKSwiftUiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EC97B7027880FF400D8BE32 /* MTHKSwiftUiView.swift */; };
BC0D236D26331BAB001DDA0C /* NetSocket.CircularBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC0D236C26331BAB001DDA0C /* NetSocket.CircularBuffer.swift */; };
BC0D236E26331BAB001DDA0C /* NetSocket.CircularBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC0D236C26331BAB001DDA0C /* NetSocket.CircularBuffer.swift */; };
BC0D236F26331BAB001DDA0C /* NetSocket.CircularBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC0D236C26331BAB001DDA0C /* NetSocket.CircularBuffer.swift */; };
BC0D236D26331BAB001DDA0C /* CircularByteBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC0D236C26331BAB001DDA0C /* CircularByteBuffer.swift */; };
BC0D236E26331BAB001DDA0C /* CircularByteBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC0D236C26331BAB001DDA0C /* CircularByteBuffer.swift */; };
BC0D236F26331BAB001DDA0C /* CircularByteBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC0D236C26331BAB001DDA0C /* CircularByteBuffer.swift */; };
BC11023E2917C35B00D48035 /* CVPixelBufferPool+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC11023D2917C35B00D48035 /* CVPixelBufferPool+Extension.swift */; };
BC11023F2917C35B00D48035 /* CVPixelBufferPool+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC11023D2917C35B00D48035 /* CVPixelBufferPool+Extension.swift */; };
BC1102402917C35B00D48035 /* CVPixelBufferPool+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC11023D2917C35B00D48035 /* CVPixelBufferPool+Extension.swift */; };
Expand Down Expand Up @@ -846,7 +846,7 @@
2EC97B6E27880FF400D8BE32 /* OnTapGestureView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnTapGestureView.swift; sourceTree = "<group>"; };
2EC97B6F27880FF400D8BE32 /* Views.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Views.swift; sourceTree = "<group>"; };
2EC97B7027880FF400D8BE32 /* MTHKSwiftUiView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MTHKSwiftUiView.swift; sourceTree = "<group>"; };
BC0D236C26331BAB001DDA0C /* NetSocket.CircularBuffer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetSocket.CircularBuffer.swift; sourceTree = "<group>"; };
BC0D236C26331BAB001DDA0C /* CircularByteBuffer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CircularByteBuffer.swift; sourceTree = "<group>"; };
BC11023D2917C35B00D48035 /* CVPixelBufferPool+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CVPixelBufferPool+Extension.swift"; sourceTree = "<group>"; };
BC1102492925147300D48035 /* IOCaptureUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOCaptureUnit.swift; sourceTree = "<group>"; };
BC110252292DD6E900D48035 /* vImage_Buffer+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "vImage_Buffer+Extension.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1051,6 +1051,7 @@
29DC17B221D0CC0600E26CED /* Atomic.swift */,
29B876B81CD70B3900FC07DA /* ByteArray.swift */,
294B2D3123785E3800CE7BDC /* CircularBuffer.swift */,
BC0D236C26331BAB001DDA0C /* CircularByteBuffer.swift */,
29B876631CD70AB300FC07DA /* Constants.swift */,
29B876B91CD70B3900FC07DA /* CRC32.swift */,
BCA97BF3263C390E0027213C /* CustomXmlStringConvertible.swift */,
Expand Down Expand Up @@ -1326,7 +1327,6 @@
29B876971CD70B1100FC07DA /* MIME.swift */,
29B876981CD70B1100FC07DA /* NetClient.swift */,
29B876991CD70B1100FC07DA /* NetService.swift */,
BC0D236C26331BAB001DDA0C /* NetSocket.CircularBuffer.swift */,
29B8769A1CD70B1100FC07DA /* NetSocket.swift */,
29AF3FCE1D7C744C00E41212 /* NetStream.swift */,
BC9CFA9223BDE8B700917EEF /* NetStreamDrawable.swift */,
Expand Down Expand Up @@ -2123,7 +2123,7 @@
BC110257292E661E00D48035 /* MultiCamCaptureSetting.swift in Sources */,
29B876B21CD70B2800FC07DA /* RTMPMuxer.swift in Sources */,
2958912E1EEB8F4100CE51E1 /* FLVSoundType.swift in Sources */,
BC0D236D26331BAB001DDA0C /* NetSocket.CircularBuffer.swift in Sources */,
BC0D236D26331BAB001DDA0C /* CircularByteBuffer.swift in Sources */,
BCC1A6BF2643F41600661156 /* MP4TrackFragmentBox.Builder.swift in Sources */,
29D3D4D61ED04EAE00DD4AA6 /* DeviceUtil+Extenstion.swift in Sources */,
BCC1A6F72645BFBC00661156 /* MP4AVCConfigurationBox.swift in Sources */,
Expand Down Expand Up @@ -2322,7 +2322,7 @@
BC94E4FF263FE6B80094C169 /* MP4MovieFragmentHeaderBox.swift in Sources */,
29B877031CD70D5A00FC07DA /* IOAudioUnit.swift in Sources */,
BCC1A6C02643F41600661156 /* MP4TrackFragmentBox.Builder.swift in Sources */,
BC0D236E26331BAB001DDA0C /* NetSocket.CircularBuffer.swift in Sources */,
BC0D236E26331BAB001DDA0C /* CircularByteBuffer.swift in Sources */,
BCC1A6F82645BFBC00661156 /* MP4AVCConfigurationBox.swift in Sources */,
BCC1A6E826447CCA00661156 /* MP4MovieHeaderBox.swift in Sources */,
29B877051CD70D5A00FC07DA /* IOMixer.swift in Sources */,
Expand Down Expand Up @@ -2555,7 +2555,7 @@
29EB3DF11ED0576C001CAE8B /* Constants.swift in Sources */,
29EB3E011ED05856001CAE8B /* HTTPStream.swift in Sources */,
29EB3E171ED05893001CAE8B /* NetClient.swift in Sources */,
BC0D236F26331BAB001DDA0C /* NetSocket.CircularBuffer.swift in Sources */,
BC0D236F26331BAB001DDA0C /* CircularByteBuffer.swift in Sources */,
BCC1A6F92645BFBC00661156 /* MP4AVCConfigurationBox.swift in Sources */,
BCB976D326107B1200C9A649 /* TSAdaptationExtensionField.swift in Sources */,
BCA97C1D263DAD080027213C /* MP4ElementaryStreamDescriptorBox.swift in Sources */,
Expand Down
105 changes: 0 additions & 105 deletions Sources/Net/NetSocket.CircularBuffer.swift

This file was deleted.

2 changes: 1 addition & 1 deletion Sources/Net/NetSocket.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ open class NetSocket: NSObject {
lazy var inputQueue = DispatchQueue(label: "com.haishinkit.HaishinKit.NetSocket.input", qos: qualityOfService)
private var timeoutHandler: DispatchWorkItem?
private lazy var buffer = [UInt8](repeating: 0, count: windowSizeC)
private lazy var outputBuffer: CircularBuffer = .init(capacity: windowSizeC)
private lazy var outputBuffer: CircularByteBuffer = .init(capacity: windowSizeC)
private lazy var outputQueue: DispatchQueue = .init(label: "com.haishinkit.HaishinKit.NetSocket.output", qos: qualityOfService)

deinit {
Expand Down
103 changes: 103 additions & 0 deletions Sources/Util/CircularByteBuffer.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
import Foundation

final class CircularByteBuffer: CustomDebugStringConvertible {
var bytes: UnsafePointer<UInt8>? {
data.withUnsafeBytes { (bytes: UnsafeRawBufferPointer) -> UnsafePointer<UInt8>? in
bytes.baseAddress?.assumingMemoryBound(to: UInt8.self).advanced(by: head)
}
}
var maxLength: Int {
min(count, capacity - head)
}
var debugDescription: String {
Mirror(reflecting: self).debugDescription
}
private var count: Int {
let value = tail - head
return value < 0 ? value + capacity : value
}
private var data: Data
private(set) var capacity: Int = 0 {
didSet {
logger.info("extends a buffer size from ", oldValue, " to ", capacity)
}
}
private var head: Int = 0
private var tail: Int = 0
private var locked: UnsafeMutablePointer<UInt32>?
private var lockedTail: Int = -1
private let baseCapacity: Int

init(capacity: Int) {
self.capacity = capacity
baseCapacity = capacity
data = .init(repeating: 0, count: capacity)
}

@discardableResult
func append(_ data: Data, locked: UnsafeMutablePointer<UInt32>? = nil) -> Bool {
guard data.count + count < capacity else {
return resize(data)
}
let count = data.count
if self.locked == nil {
self.locked = locked
}
let length = min(count, capacity - tail)
return self.data.withUnsafeMutableBytes { (bytes: UnsafeMutableRawBufferPointer) -> Bool in
guard let pointer = bytes.baseAddress?.assumingMemoryBound(to: UInt8.self) else {
return false
}
data.copyBytes(to: pointer.advanced(by: tail), count: length)
if length < count {
tail = count - length
data.advanced(by: length).copyBytes(to: pointer, count: tail)
} else {
tail += count
}
if capacity == tail {
tail = 0
}
if locked != nil {
lockedTail = tail
}
return true
}
}

func skip(_ count: Int) {
let length = min(count, capacity - head)
if length < count {
head = count - length
} else {
head += count
}
if capacity == head {
head = 0
}
if let locked = locked, -1 < lockedTail && lockedTail <= head {
OSAtomicAnd32Barrier(0, locked)
lockedTail = -1
}
}

func clear() {
head = 0
tail = 0
locked = nil
lockedTail = 0
}

private func resize(_ data: Data) -> Bool {
if 0 < head {
let subdata = self.data.subdata(in: 0..<tail)
self.data.replaceSubrange(0..<capacity - head, with: self.data.advanced(by: head))
self.data.replaceSubrange(capacity - head..<capacity - head + subdata.count, with: subdata)
tail = capacity - head + subdata.count
}
self.data.append(.init(count: baseCapacity))
head = 0
capacity = self.data.count
return append(data)
}
}

0 comments on commit efc893b

Please sign in to comment.