48 lines
965 B
Swift
Executable File
48 lines
965 B
Swift
Executable File
import Foundation
|
|
|
|
/**
|
|
The pool is build to hold fake ips.
|
|
|
|
- note: It is NOT thread-safe.
|
|
*/
|
|
public final class IPPool {
|
|
let family: IPAddress.Family
|
|
let range: IPRange
|
|
var currentEnd: IPAddress
|
|
var pool: [IPAddress] = []
|
|
|
|
public init(range: IPRange) {
|
|
family = range.family
|
|
self.range = range
|
|
|
|
currentEnd = range.startIP
|
|
}
|
|
|
|
func fetchIP() -> IPAddress? {
|
|
if pool.count == 0 {
|
|
if range.contains(ip: currentEnd) {
|
|
defer {
|
|
currentEnd = currentEnd.advanced(by: 1)!
|
|
}
|
|
return currentEnd
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
return pool.removeLast()
|
|
}
|
|
|
|
func release(ip: IPAddress) {
|
|
guard ip.family == family else {
|
|
return
|
|
}
|
|
|
|
pool.append(ip)
|
|
}
|
|
|
|
func contains(ip: IPAddress) -> Bool {
|
|
return range.contains(ip: ip)
|
|
}
|
|
}
|