Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.


Swift 3.0 and Later


http://ieeexplore.ieee.org/servlet/opac?punumber=4610933








Swift 4.0 and Later
init?<T>(exactly source: T) where T : BinaryInteger
associatedtype Magnitude : Comparable, ExpressibleByIntegerLiteral
var magnitude: Magnitude { get }
“-5.magnitude”
prefix static func +(x: Self) -> Self {
return x
}
// 対象の型で、自身の型とその内部の絶対値表現の型とが同じだった場合
func abs<T>(_ x: T) -> T where T : SignedNumeric, T == T.Magnitude
// 対象の型が、比較可能な符号付き整...
// 任意の整数型からの全幅変換
init<T>(_ source: T) where T : BinaryInteger
// ビットパターンを使った内部表現そのままの変換
init<T>(extendingOrTruncating sour...
// 浮動小数点数型からの丸め変換(0 方向へ丸める)
init<T>(_ source: T) where T : FloatingPoint
// 浮動小数点数型からの Exact 変換(値を丸めない)
init?<T>(exactly s...
// 0 をインスタンス化するイニシャライザー
init() {
self = 0
}
associatedtype Words
var words: Words { get }
// WORD 表現したときの WORD 数を取得
var countRepresentedWords: Int { get }


static func &>> <Other>(lhs: Self, rhs: Other) -> Self

where Other : BinaryInteger
static func &>>= <Other>(lhs: inout Se...
var words: [UInt] {
var result = [UInt]()
result.reserveCapacity(countRepresentedWords)
for i in 0 ..< countRepresentedWor...
init(bigEndian value: Int)
init(littleEndian value: Int)
// 内部データを序列を加味して解釈する
var bigEndian: Int { get }
var littleEndian:...
// ビットパターンからの変換(nil の場合は 0 で初期化される様子)
init(bitPattern pointer: OpaquePointer?)
// デコーダーからの変換(使用方法は未確認)
init(from decoder: ...










func multipliedFullWidth(by other: Int)

-> (high: Int, low: Int.Magnitude)
func dividingFullWidth(_ dividend: (high: Int,...
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Upcoming SlideShare
Loading in …5
×

Protocol-Oriented Integers #cswift

1,215 views

Published on

Swift 4 から導入される Protocol Oriented Integers の概要を整理してみた資料です。ここで紹介したもの以外にも詳細な機能があったりするので、それは不足するものの、プロトコル指向整数で何ができるのかを感じ取ってもらえる資料になってるかなって思います。2017/06/03 のカジュアル Swift 勉強会で発表しました。

Published in: Software
  • Be the first to comment

Protocol-Oriented Integers #cswift

  1. 1. 

  2. 2. Swift 3.0 and Later
  3. 3. 
 http://ieeexplore.ieee.org/servlet/opac?punumber=4610933
  4. 4.
  5. 5.
  6. 6.
  7. 7.
  8. 8. Swift 4.0 and Later
  9. 9. init?<T>(exactly source: T) where T : BinaryInteger
  10. 10. associatedtype Magnitude : Comparable, ExpressibleByIntegerLiteral var magnitude: Magnitude { get } “-5.magnitude”
  11. 11. prefix static func +(x: Self) -> Self { return x }
  12. 12. // 対象の型で、自身の型とその内部の絶対値表現の型とが同じだった場合 func abs<T>(_ x: T) -> T where T : SignedNumeric, T == T.Magnitude // 対象の型が、比較可能な符号付き整数だった場合 func abs<T>(_ x: T) -> T where T : Comparable, T : SignedNumeric
  13. 13. // 任意の整数型からの全幅変換 init<T>(_ source: T) where T : BinaryInteger // ビットパターンを使った内部表現そのままの変換 init<T>(extendingOrTruncating source: T) where T : BinaryInteger // 強制的に範囲内に収める変換 init<T>(clamping source: T) where T : BinaryInteger
  14. 14. // 浮動小数点数型からの丸め変換(0 方向へ丸める) init<T>(_ source: T) where T : FloatingPoint // 浮動小数点数型からの Exact 変換(値を丸めない) init?<T>(exactly source: T) where T : FloatingPoint
  15. 15. // 0 をインスタンス化するイニシャライザー init() { self = 0 }
  16. 16. associatedtype Words var words: Words { get } // WORD 表現したときの WORD 数を取得 var countRepresentedWords: Int { get }
  17. 17.
  18. 18. static func &>> <Other>(lhs: Self, rhs: Other) -> Self
 where Other : BinaryInteger static func &>>= <Other>(lhs: inout Self, rhs: Other)
 where Other : BinaryInteger static func &<< <Other>(lhs: Self, rhs: Other) -> Self
 where Other : BinaryInteger static func &<<= <Other>(lhs: inout Self, rhs: Other)
 where Other : BinaryInteger
  19. 19. var words: [UInt] { var result = [UInt]() result.reserveCapacity(countRepresentedWords) for i in 0 ..< countRepresentedWords { result.append(_word(at: i)) } return result }
  20. 20. init(bigEndian value: Int) init(littleEndian value: Int) // 内部データを序列を加味して解釈する var bigEndian: Int { get } var littleEndian: Int { get } // 内部データの序列を交換して解釈する var byteSwapped: Int { get }
  21. 21. // ビットパターンからの変換(nil の場合は 0 で初期化される様子) init(bitPattern pointer: OpaquePointer?) // デコーダーからの変換(使用方法は未確認) init(from decoder: Decoder) throws // エンコード機能もある様子(使用方法は未確認) func encode(to encoder: Encoder) throws
  22. 22. 
 
 
 
 

  23. 23. func multipliedFullWidth(by other: Int)
 -> (high: Int, low: Int.Magnitude) func dividingFullWidth(_ dividend: (high: Int, low: Int.Magnitude))
 -> (quotient: Int, remainder: Int)

×