From 0c5b5be8562ab5c93f54127bbfcc6fb1b2dab17b Mon Sep 17 00:00:00 2001 From: Andrew Hannon Date: Tue, 10 Oct 2017 10:48:13 -0400 Subject: [PATCH 1/2] Jazzy docs for 3.0.1 --- docs/Extensions.html | 80 +- .../BinaryFloatingPoint.html} | 100 +- docs/Extensions/String.html | 103 +- docs/Functions.html | 164 - docs/Protocols.html | 147 - docs/Protocols/ShiftOperations.html | 243 -- docs/Structs.html | 117 +- docs/Structs/BigInt.html | 1706 +++++++++-- docs/Structs/BigInt/Sign.html | 167 + docs/Structs/BigInt/Words.html | 240 ++ docs/Structs/BigUInt.html | 2726 +++++------------ docs/Structs/BigUInt/Words.html | 182 ++ docs/badge.svg | 1 + docs/css/jazzy.css | 39 + .../Resources/Documents/Extensions.html | 80 +- .../Extensions/BinaryFloatingPoint.html} | 100 +- .../Documents/Extensions/String.html | 103 +- .../Resources/Documents/Functions.html | 164 - .../Resources/Documents/Protocols.html | 147 - .../Documents/Protocols/ShiftOperations.html | 243 -- .../Contents/Resources/Documents/Structs.html | 117 +- .../Resources/Documents/Structs/BigInt.html | 1706 +++++++++-- .../Documents/Structs/BigInt/Sign.html | 167 + .../Documents/Structs/BigInt/Words.html | 240 ++ .../Resources/Documents/Structs/BigUInt.html | 2726 +++++------------ .../Documents/Structs/BigUInt/Words.html | 182 ++ .../Resources/Documents/css/jazzy.css | 39 + .../Resources/Documents/img/spinner.gif | Bin 0 -> 1849 bytes .../Contents/Resources/Documents/index.html | 161 +- .../Contents/Resources/Documents/js/jazzy.js | 6 + .../Resources/Documents/js/jazzy.search.js | 62 + .../Resources/Documents/js/lunr.min.js | 6 + .../Documents/js/typeahead.jquery.js | 1538 ++++++++++ .../Contents/Resources/Documents/search.json | 1 + .../Resources/Documents/undocumented.json | 6 - .../Contents/Resources/docSet.dsidx | Bin 45056 -> 49152 bytes docs/docsets/BigInt.tgz | Bin 81351 -> 104951 bytes docs/docsets/BigInt.xml | 2 +- docs/img/spinner.gif | Bin 0 -> 1849 bytes docs/index.html | 161 +- docs/js/jazzy.js | 6 + docs/js/jazzy.search.js | 62 + docs/js/lunr.min.js | 6 + docs/js/typeahead.jquery.js | 1538 ++++++++++ docs/search.json | 1 + docs/undocumented.json | 122 +- 46 files changed, 9618 insertions(+), 6089 deletions(-) rename docs/{docsets/BigInt.docset/Contents/Resources/Documents/Structs/DigitIterator.html => Extensions/BinaryFloatingPoint.html} (50%) delete mode 100644 docs/Functions.html delete mode 100644 docs/Protocols.html delete mode 100644 docs/Protocols/ShiftOperations.html create mode 100644 docs/Structs/BigInt/Sign.html create mode 100644 docs/Structs/BigInt/Words.html create mode 100644 docs/Structs/BigUInt/Words.html create mode 100644 docs/badge.svg rename docs/{Structs/DigitIterator.html => docsets/BigInt.docset/Contents/Resources/Documents/Extensions/BinaryFloatingPoint.html} (50%) delete mode 100644 docs/docsets/BigInt.docset/Contents/Resources/Documents/Functions.html delete mode 100644 docs/docsets/BigInt.docset/Contents/Resources/Documents/Protocols.html delete mode 100644 docs/docsets/BigInt.docset/Contents/Resources/Documents/Protocols/ShiftOperations.html create mode 100644 docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigInt/Sign.html create mode 100644 docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigInt/Words.html create mode 100644 docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigUInt/Words.html create mode 100644 docs/docsets/BigInt.docset/Contents/Resources/Documents/img/spinner.gif create mode 100644 docs/docsets/BigInt.docset/Contents/Resources/Documents/js/jazzy.search.js create mode 100755 docs/docsets/BigInt.docset/Contents/Resources/Documents/js/lunr.min.js create mode 100644 docs/docsets/BigInt.docset/Contents/Resources/Documents/js/typeahead.jquery.js create mode 100644 docs/docsets/BigInt.docset/Contents/Resources/Documents/search.json delete mode 100644 docs/docsets/BigInt.docset/Contents/Resources/Documents/undocumented.json create mode 100644 docs/img/spinner.gif create mode 100644 docs/js/jazzy.search.js create mode 100755 docs/js/lunr.min.js create mode 100644 docs/js/typeahead.jquery.js create mode 100644 docs/search.json diff --git a/docs/Extensions.html b/docs/Extensions.html index 8f89273..b9203ad 100644 --- a/docs/Extensions.html +++ b/docs/Extensions.html @@ -8,6 +8,9 @@ + + + @@ -19,18 +22,24 @@ BigInt Docs - (100% documented) + (92% documented) +

+ +

+

+ +

- + View on GitHub

- + Install in Dash @@ -49,38 +58,31 @@

- - @@ -99,13 +101,37 @@

Extensions

-
- - - -

BigInt

-
-
+
    +
  • +
    + + + + BinaryFloatingPoint + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    protocol BinaryFloatingPoint : FloatingPoint, ExpressibleByFloatLiteral
    + +
    +
    +
    +
    +
  • +
+
+
diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/DigitIterator.html b/docs/Extensions/BinaryFloatingPoint.html similarity index 50% rename from docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/DigitIterator.html rename to docs/Extensions/BinaryFloatingPoint.html index 3a0c17d..648ecee 100644 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/DigitIterator.html +++ b/docs/Extensions/BinaryFloatingPoint.html @@ -1,37 +1,46 @@ - DigitIterator Struct Reference + BinaryFloatingPoint Extension Reference + + + - + - +

BigInt Docs - (100% documented) + (92% documented) +

+ +

+

+ +

- + View on GitHub

- + Install in Dash @@ -41,7 +50,7 @@

@@ -50,38 +59,31 @@ - - @@ -91,15 +93,14 @@
-

DigitIterator

+

BinaryFloatingPoint

-
public struct DigitIterator<Digit>: IteratorProtocol
+
protocol BinaryFloatingPoint : FloatingPoint, ExpressibleByFloatLiteral
-

State for iterating through the digits of a big integer.

- +
@@ -110,9 +111,39 @@

DigitIterator

  • - - - next() + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    protocol BinaryFloatingPoint : FloatingPoint, ExpressibleByFloatLiteral
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(_:)
    @@ -120,20 +151,19 @@

    DigitIterator

    -

    Return the next digit in the integer, or nil if there are no more digits. -Returned digits range from least to most significant.

    +

    Undocumented

    Declaration

    Swift

    -
    public mutating func next() -> Digit?
    +
    protocol BinaryFloatingPoint : FloatingPoint, ExpressibleByFloatLiteral
    @@ -146,8 +176,8 @@

    Declaration

  • diff --git a/docs/Extensions/String.html b/docs/Extensions/String.html index 64c808e..3b61515 100644 --- a/docs/Extensions/String.html +++ b/docs/Extensions/String.html @@ -8,6 +8,9 @@ + + + @@ -20,18 +23,24 @@ BigInt Docs - (100% documented) + (92% documented) +

    + +

    +

    + +

    - + View on GitHub

    - + Install in Dash @@ -50,38 +59,31 @@

    - - @@ -109,9 +111,9 @@

    String

  • - - - init(_:radix:uppercase:) + + + init(_:)
    @@ -119,20 +121,10 @@

    String

    -

    Initialize a new string representing a signed big integer in the given radix (base).

    - -

    Numerals greater than 9 are represented as letters from the English alphabet, -starting with a if uppercase is false or A otherwise.

    - -
    -

    Requires

    - radix > 1 && radix <= 36 - -
    - +

    Initialize a new string with the base-10 representation of an unsigned big integer.

    Complexity

    - O(count) when radix is a power of two; otherwise O(count^2). + O(v.count^2)
    @@ -141,26 +133,22 @@

    String

    Declaration

    Swift

    -
    public init(_ value: BigInt, radix: Int = 10, uppercase: Bool = false)
    +
    public init(_ v: BigUInt)
  • - - -
    -
    • @@ -168,11 +156,18 @@

      Declaration

      -

      Initialize a new string with the base-10 representation of an unsigned big integer.

      +

      Initialize a new string representing an unsigned big integer in the given radix (base).

      + +

      Numerals greater than 9 are represented as letters from the English alphabet, +starting with a if uppercase is false or A otherwise.

      +
      +

      Requires

      + radix > 1 && radix <= 36 +

      Complexity

      - O(v.count^2) + O(count) when radix is a power of two; otherwise O(count^2).
      @@ -181,12 +176,12 @@

      Declaration

      Declaration

      Swift

      -
      public init(_ v: BigUInt)
      +
      public init(_ v: BigUInt, radix: Int, uppercase: Bool = false)
      @@ -194,9 +189,9 @@

      Declaration

    • @@ -204,17 +199,15 @@

      Declaration

      -

      Initialize a new string representing an unsigned big integer in the given radix (base).

      +

      Initialize a new string representing a signed big integer in the given radix (base).

      Numerals greater than 9 are represented as letters from the English alphabet, starting with a if uppercase is false or A otherwise.

      -

      Requires

      radix > 1 && radix <= 36
      -

      Complexity

      O(count) when radix is a power of two; otherwise O(count^2). @@ -226,12 +219,12 @@

      Declaration

      Declaration

      Swift

      -
      public init(_ v: BigUInt, radix: Int, uppercase: Bool = false)
      +
      public init(_ value: BigInt, radix: Int = 10, uppercase: Bool = false)
      @@ -244,8 +237,8 @@

      Declaration

    diff --git a/docs/Functions.html b/docs/Functions.html deleted file mode 100644 index 5293bae..0000000 --- a/docs/Functions.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - Functions Reference - - - - - - - - - - - - -
    -

    - - BigInt Docs - - (100% documented) -

    - -

    - - - View on GitHub - -

    - -

    - - - Install in Dash - -

    -
    - - - -
    - -
    - -
    -
    -

    Functions

    -

    The following functions are available globally.

    - -
    -
    - -
    -
    -
    - -
      -
    • -
      - - - - sqrt(_:) - -
      -
      -
      -
      -
      -
      -

      Returns the integer square root of a big integer; i.e., the largest integer whose square isn’t greater than value.

      - -
      -

      Returns

      - floor(sqrt(value)) - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func sqrt(_ value: BigUInt) -> BigUInt
      - -
      -
      -
      -

      Return Value

      -

      floor(sqrt(value))

      - -
      - -
      -
      -
    • -
    -
    -
    -
    - -
    -
    - - - - diff --git a/docs/Protocols.html b/docs/Protocols.html deleted file mode 100644 index c7b5757..0000000 --- a/docs/Protocols.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - Protocols Reference - - - - - - - - - - - - -
    -

    - - BigInt Docs - - (100% documented) -

    - -

    - - - View on GitHub - -

    - -

    - - - Install in Dash - -

    -
    - - - -
    - -
    - -
    -
    -

    Protocols

    -

    The following protocols are available globally.

    - -
    -
    - -
    -
    -
    -
      -
    • -
      - - - - ShiftOperations - -
      -
      -
      -
      -
      -
      -

      Describes a type that supports all the standard shift operators.

      - - See more -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public protocol ShiftOperations
      - -
      -
      - -
      -
      -
    • -
    -
    -
    -
    - -
    -
    - - - - diff --git a/docs/Protocols/ShiftOperations.html b/docs/Protocols/ShiftOperations.html deleted file mode 100644 index 10f600f..0000000 --- a/docs/Protocols/ShiftOperations.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - ShiftOperations Protocol Reference - - - - - - - - - - - - - -
    -

    - - BigInt Docs - - (100% documented) -

    - -

    - - - View on GitHub - -

    - -

    - - - Install in Dash - -

    -
    - - - -
    - -
    - -
    -
    -

    ShiftOperations

    -
    -
    -
    public protocol ShiftOperations
    - -
    -
    -

    Describes a type that supports all the standard shift operators.

    - -
    -
    - -
    -
    -
    -
      -
    • -
      - - - - <<(_:_:) - -
      -
      -
      -
      -
      -
      -

      Shift the value a by b bits to the left and return the result.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      static func <<(a: Self, b: Self) -> Self
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - >>(_:_:) - -
      -
      -
      -
      -
      -
      -

      Shift the value a by b bits to the right and return the result.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      static func >>(a: Self, b: Self) -> Self
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - <<=(_:_:) - -
      -
      -
      -
      -
      -
      -

      Shift the value a by b bits to the left and store the result in a.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      static func <<=(a: inout Self, b: Self)
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - >>=(_:_:) - -
      -
      -
      -
      -
      -
      -

      Shift the value a by b bits to the right and store the result in a.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      static func >>=(a: inout Self, b: Self)
      - -
      -
      - -
      -
      -
    • -
    -
    -
    -
    - -
    -
    - - - - diff --git a/docs/Structs.html b/docs/Structs.html index 9f22d91..366be84 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -1,36 +1,45 @@ - Structs Reference + Structures Reference + + + - +

    BigInt Docs - (100% documented) + (92% documented) +

    + +

    +

    + +

    - + View on GitHub

    - + Install in Dash @@ -40,7 +49,7 @@

    @@ -49,38 +58,31 @@ - - @@ -90,8 +92,8 @@
    -

    Structs

    -

    The following structs are available globally.

    +

    Structures

    +

    The following structures are available globally.

    @@ -103,9 +105,9 @@

    Structs

  • - + - BigUInt + BigUInt
    @@ -115,24 +117,11 @@

    Structs

    An arbitary precision unsigned integer type, also known as a big integer.

    -

    Operations on big integers never overflow, but they might take a long time to execute. +

    Operations on big integers never overflow, but they may take a long time to execute. The amount of memory (and address space) available is the only constraint to the magnitude of these numbers.

    This particular big integer type uses base-2^64 digits to represent integers; you can think of it as a wrapper -around Array<UInt64>. In fact, BigUInt implements a mutable collection of its UInt64 digits, with the -digit at index 0 being the least significant.

    - -

    To make memory management simple, BigUInt allows you to subscript it with out-of-bounds indexes: -the subscript getter zero-extends the digit sequence, while the subscript setter automatically extends the -underlying storage when necessary:

    - -
    var number = BigUInt(1)
    -number[42]                // Not an error, returns 0
    -number[23] = 1            // Not an error, number is now 2^1472 + 1.
    -
    - -

    Note that it is rarely a good idea to use big integers as collections; in the vast majority of cases it is much -easier to work with the provided high-level methods and operators rather than with raw big digits.

    +around Array<UInt64>. (In fact, BigUInt only uses an array if there are more than two digits.)

    See more
    @@ -140,43 +129,12 @@

    Structs

    Declaration

    Swift

    -
    public struct BigUInt
    - -
    -
    - -
  • - - -
  • -
    - - - - DigitIterator - -
    -
    -
    -
    -
    -
    -

    State for iterating through the digits of a big integer.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct DigitIterator<Digit>: IteratorProtocol
    +
    public struct BigUInt: UnsignedInteger
    @@ -195,9 +153,9 @@

    BigInt

  • - + - BigInt + BigInt
    @@ -218,7 +176,6 @@

    BigInt

    Not all algorithms of BigUInt are available for BigInt values; for example, there is no square root or primality test for signed integers. When you need to call one of these, just extract the absolute value:

    -
    BigInt(255).abs.isPrime()   // Returns false
     
    @@ -228,12 +185,12 @@

    BigInt

    Declaration

    Swift

    -
    public struct BigInt
    +
    public struct BigInt: SignedInteger
    @@ -246,8 +203,8 @@

    Declaration

    diff --git a/docs/Structs/BigInt.html b/docs/Structs/BigInt.html index ea945cc..7bc104a 100644 --- a/docs/Structs/BigInt.html +++ b/docs/Structs/BigInt.html @@ -1,37 +1,46 @@ - BigInt Struct Reference + BigInt Structure Reference + + + - +

    BigInt Docs - (100% documented) + (92% documented) +

    + +

    +

    + +

    - + View on GitHub

    - + Install in Dash @@ -41,7 +50,7 @@

    @@ -50,38 +59,31 @@ - - @@ -94,7 +96,7 @@

    BigInt

    -
    public struct BigInt
    +
    public struct BigInt: SignedInteger
    @@ -111,7 +113,6 @@

    BigInt

    Not all algorithms of BigUInt are available for BigInt values; for example, there is no square root or primality test for signed integers. When you need to call one of these, just extract the absolute value:

    -
    BigInt(255).abs.isPrime()   // Returns false
     
    @@ -125,9 +126,9 @@

    BigInt

  • - - - abs + + + Sign
    @@ -135,19 +136,20 @@

    BigInt

    -

    The absolute value of this integer.

    +

    Undocumented

    + See more

    Declaration

    Swift

    -
    public var abs: BigUInt
    +
    public struct BigInt: SignedInteger
    @@ -155,9 +157,9 @@

    Declaration

  • - - - Digit + + + Word
    @@ -165,19 +167,19 @@

    Declaration

    -

    The type representing a digit in BigInt’s underlying number system.

    +

    The type representing a digit in BigInt‘s underlying number system.

    Declaration

    Swift

    -
    public typealias Digit = BigUInt.Digit
    +
    public typealias Word = BigUInt.Word
    @@ -185,9 +187,9 @@

    Declaration

  • - - - negative + + + isSigned
    @@ -195,19 +197,18 @@

    Declaration

    -

    True iff the value of this integer is negative.

    - +

    Declaration

    Swift

    -
    public var negative: Bool
    +
    public static var isSigned: Bool
    @@ -215,9 +216,9 @@

    Declaration

  • @@ -225,19 +226,19 @@

    Declaration

    -

    Initializes a new big integer with the provided absolute number and sign flag.

    +

    The absolute value of this integer.

    Declaration

    Swift

    -
    public init(abs: BigUInt, negative: Bool = false)
    +
    public var magnitude: BigUInt
    @@ -245,9 +246,9 @@

    Declaration

  • - - - init(_:) + + + sign
    @@ -255,19 +256,19 @@

    Declaration

    -

    Initializes a new big integer with the same value as the specified integer.

    +

    True iff the value of this integer is negative.

    Declaration

    Swift

    -
    public init<I: UnsignedInteger>(_ integer: I)
    +
    public var sign: Sign
    @@ -275,9 +276,9 @@

    Declaration

  • @@ -285,19 +286,19 @@

    Declaration

    -

    Initializes a new big integer with the same value as the specified integer.

    +

    Initializes a new big integer with the provided absolute number and sign flag.

    Declaration

    Swift

    -
    public init<I: SignedInteger>(_ integer: I)
    +
    public init(sign: Sign, magnitude: BigUInt)
    @@ -305,9 +306,9 @@

    Declaration

  • - - - init(_:) + + + isZero
    @@ -315,33 +316,34 @@

    Declaration

    -

    Initializes a new signed big integer with the same value as the specified unsigned big integer.

    +

    Return true iff this integer is zero.

    +
    +

    Complexity

    + O(1) + +

    Declaration

    Swift

    -
    public init(_ integer: BigUInt)
    +
    public var isZero: Bool
  • - -
    -
    -
    • - - - init(_:radix:) + + + signum()
      @@ -349,49 +351,23 @@

      Declaration

      -

      Initialize a big integer from an ASCII representation in a given radix. Numerals above 9 are represented by -letters from the English alphabet.

      - -
      -

      Requires

      - radix > 1 && radix < 36 - -
      - -
      -

      Parameter

      - Parameter text: A string optionally starting with - or + followed by characters corresponding to numerals in the given radix. (0-9, a-z, A-Z) - -
      - -
      -

      Parameter

      - Parameter radix: The base of the number system to use, or 10 if unspecified. - -
      - -
      -

      Returns

      - The integer represented by text, or nil if text contains a character that does not represent a numeral in radix. - -
      +

      Returns -1 if this value is negative and 1 if it’s positive; otherwise, 0.

      Declaration

      Swift

      -
      public init?(_ text: String, radix: Int = 10)
      +
      public func signum() -> BigInt

      Return Value

      -

      The integer represented by text, or nil if text contains a character that does not represent a numeral in radix.

      - +

      The sign of this number, expressed as an integer of the same type.

      @@ -403,9 +379,9 @@

      Return Value

    • - - - description + + + ~(_:)
      @@ -413,33 +389,28 @@

      Return Value

      -

      Return the decimal representation of this integer.

      - +

      Declaration

      Swift

      -
      public var description: String
      +
      public static prefix func ~(x: BigInt) -> BigInt
    • -
    -
    -
    -
    • @@ -447,33 +418,29 @@

      Declaration

      -

      Initialize a new big integer from an integer literal.

      +

      Undocumented

      Declaration

      Swift

      -
      public init(integerLiteral value: IntMax)
      +
      public struct BigInt: SignedInteger
    • -
    -
    -
    -
    • @@ -481,20 +448,19 @@

      Declaration

      -

      Initialize a new big integer from a Unicode scalar. -The scalar must represent a decimal digit.

      +

      Undocumented

      Declaration

      Swift

      -
      public init(unicodeScalarLiteral value: UnicodeScalar)
      +
      public struct BigInt: SignedInteger
      @@ -502,9 +468,9 @@

      Declaration

    • @@ -512,20 +478,19 @@

      Declaration

      -

      Initialize a new big integer from an extended grapheme cluster. -The cluster must consist of a decimal digit.

      +

      Undocumented

      Declaration

      Swift

      -
      public init(extendedGraphemeClusterLiteral value: String)
      +
      public struct BigInt: SignedInteger
      @@ -533,9 +498,9 @@

      Declaration

    • @@ -543,34 +508,28 @@

      Declaration

      -

      Initialize a new big integer from a decimal number represented by a string literal of arbitrary length. -The string must contain only decimal digits.

      - +

      Declaration

      Swift

      -
      public init(stringLiteral value: StringLiteralType)
      +
      public static func &=(lhs: inout BigInt, rhs: BigInt)
    • -
    -
    -
    -
    • @@ -578,19 +537,47 @@

      Declaration

      -

      Return the playground quick look representation of this integer.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func |=(lhs: inout BigInt, rhs: BigInt)
      +
      +
      + +
      +
      +
    • +
    • +
      + + + + ^=(_:_:) + +
      +
      +
      +
      +
      +
      +

      Declaration

      Swift

      -
      public var customPlaygroundQuickLook: PlaygroundQuickLook
      +
      public static func ^=(lhs: inout BigInt, rhs: BigInt)
      @@ -598,13 +585,20 @@

      Declaration

    +
    • @@ -612,19 +606,19 @@

      Declaration

      -

      Return true iff a is equal to b.

      +

      Returns true iff this integer passes the strong probable prime test for the specified base.

      Declaration

      Swift

      -
      public static func ==(a: BigInt, b: BigInt) -> Bool
      +
      public func isStrongProbablePrime(_ base: BigInt) -> Bool
      @@ -632,9 +626,9 @@

      Declaration

    • @@ -642,19 +636,29 @@

      Declaration

      -

      Return true iff a is less than b.

      +

      Returns true if this integer is probably prime. Returns false if this integer is definitely not prime.

      + +

      This function performs a probabilistic Miller-Rabin Primality Test, consisting of rounds iterations, +each calculating the strong probable prime test for a random base. The number of rounds is 10 by default, +but you may specify your own choice.

      + +

      To speed things up, the function checks if self is divisible by the first few prime numbers before +diving into (slower) Miller-Rabin testing.

      + +

      Also, when self is less than 82 bits wide, isPrime does a deterministic test that is guaranteed to +return a correct result.

      Declaration

      Swift

      -
      public static func <(a: BigInt, b: BigInt) -> Bool
      +
      public func isPrime(rounds: Int = 10) -> Bool
      @@ -666,9 +670,9 @@

      Declaration

    • @@ -676,19 +680,47 @@

      Declaration

      -

      Append this BigInt to the specified hasher.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var bitWidth: Int
      +
      +
      + +
      +
      +
    • +
    • +
      + + + + trailingZeroBitCount + +
      +
      +
      +
      +
      +
      +

      Declaration

      Swift

      -
      public func appendHashes(to hasher: inout SipHasher)
      +
      public var trailingZeroBitCount: Int
      @@ -700,9 +732,9 @@

      Declaration

    • - - - advanced(by:) + + + Words
      @@ -710,19 +742,19 @@

      Declaration

      -

      Returns self + n.

      - + + See more

      Declaration

      Swift

      -
      public func advanced(by n: Stride) -> BigInt
      +
      public struct Words: RandomAccessCollection
      @@ -730,9 +762,9 @@

      Declaration

    • - - - Stride + + + words
      @@ -740,19 +772,18 @@

      Declaration

      -

      A type that can represent the distance between two values of BigInt.

      - +

      Declaration

      Swift

      -
      public typealias Stride = BigInt
      +
      public var words: Words
      @@ -760,9 +791,9 @@

      Declaration

    • @@ -770,19 +801,19 @@

      Declaration

      -

      Returns other - self.

      +

      Undocumented

      Declaration

      Swift

      -
      public func distance(to other: BigInt) -> Stride
      +
      public struct BigInt: SignedInteger
      @@ -794,9 +825,9 @@

      Declaration

    • - - - -(_:) + + + appendHashes(to:)
      @@ -804,29 +835,33 @@

      Declaration

      -

      Negate a and return the result.

      +

      Append this BigInt to the specified hasher.

      Declaration

      Swift

      -
      public static prefix func -(a: BigInt) -> BigInt
      +
      public func appendHashes(to hasher: inout SipHasher)
    • +
    +
    +
    +
    • - - - -(_:_:) + + + init(exactly:)
      @@ -834,33 +869,28 @@

      Declaration

      -

      Subtract b from a and return the result.

      - +

      Declaration

      Swift

      -
      public static func -(a: BigInt, b: BigInt) -> BigInt
      +
      public init?<T: BinaryFloatingPoint>(exactly source: T)
    • -
    -
    -
    -
    • - - - abs(_:) + + + init(_:)
      @@ -868,19 +898,18 @@

      Declaration

      -

      Returns the absolute value of x.

      - +

      Declaration

      Swift

      -
      public static func abs(_ x: BigInt) -> BigInt
      +
      public init<T: BinaryFloatingPoint>(_ source: T)
      @@ -892,9 +921,9 @@

      Declaration

    • - - - toIntMax() + + + negate()
      @@ -902,19 +931,18 @@

      Declaration

      -

      Explicitly convert to IntMax, trapping on overflow.

      - +

      Declaration

      Swift

      -
      public func toIntMax() -> IntMax
      +
      public mutating func negate()
      @@ -922,9 +950,9 @@

      Declaration

    • - - - +(_:_:) + + + -(_:_:)
      @@ -932,19 +960,19 @@

      Declaration

      -

      Add a to b and return the result.

      +

      Subtract b from a and return the result.

      Declaration

      Swift

      -
      public static func +(a: BigInt, b: BigInt) -> BigInt
      +
      public static func -(a: BigInt, b: BigInt) -> BigInt
      @@ -952,9 +980,9 @@

      Declaration

    • - - - *(_:_:) + + + -=(_:_:)
      @@ -962,29 +990,33 @@

      Declaration

      -

      Multiply a with b and return the result.

      +

      Subtract b from a in place.

      Declaration

      Swift

      -
      public static func *(a: BigInt, b: BigInt) -> BigInt
      +
      public static func -=(a: inout BigInt, b: BigInt)
    • +
    +
    +
    +
    • @@ -992,19 +1024,33 @@

      Declaration

      -

      Divide a by b and return the quotient. Traps if b is zero.

      +

      Divide this integer by y and return the resulting quotient and remainder.

      +
      +

      Requires

      + y > 0 + +
      +
      +

      Complexity

      + O(count^2) + +

      Declaration

      Swift

      -
      public static func /(a: BigInt, b: BigInt) -> BigInt
      +
      public func quotientAndRemainder(dividingBy y: BigInt) -> (quotient: BigInt, remainder: BigInt)
      +
      +

      Return Value

      +

      (quotient, remainder) where quotient = floor(self/y), remainder = self - quotient * y

      +
      @@ -1012,9 +1058,9 @@

      Declaration

    • - - - %(_:_:) + + + /(_:_:)
      @@ -1022,19 +1068,19 @@

      Declaration

      -

      Divide a by b and return the remainder.

      +

      Divide a by b and return the quotient. Traps if b is zero.

      Declaration

      Swift

      -
      public static func %(a: BigInt, b: BigInt) -> BigInt
      +
      public static func /(a: BigInt, b: BigInt) -> BigInt
      @@ -1042,9 +1088,9 @@

      Declaration

    • @@ -1052,19 +1098,19 @@

      Declaration

      -

      Adds lhs and rhs together. An overflow is never reported.

      +

      Divide a by b and return the remainder. The result has the same sign as a.

      Declaration

      Swift

      -
      public static func addWithOverflow(_ lhs: BigInt, _ rhs: BigInt) -> (BigInt, overflow: Bool)
      +
      public static func %(a: BigInt, b: BigInt) -> BigInt
      @@ -1072,9 +1118,9 @@

      Declaration

    • @@ -1082,29 +1128,33 @@

      Declaration

      -

      Subtracts rhs from lhs. An overflow is never reported.

      +

      Return the result of a mod b. The result is always a nonnegative integer that is less than the absolute value of b.

      Declaration

      Swift

      -
      public static func subtractWithOverflow(_ lhs: BigInt, _ rhs: BigInt) -> (BigInt, overflow: Bool)
      +
      public func modulus(_ mod: BigInt) -> BigInt
    • +
    +
    +
    +
    • @@ -1112,19 +1162,19 @@

      Declaration

      -

      Multiplies lhs with rhs. An overflow is never reported.

      +

      Divide a by b storing the quotient in a.

      Declaration

      Swift

      -
      public static func multiplyWithOverflow(_ lhs: BigInt, _ rhs: BigInt) -> (BigInt, overflow: Bool)
      +
      public static func /=(a: inout BigInt, b: BigInt)
      @@ -1132,9 +1182,9 @@

      Declaration

    • @@ -1142,29 +1192,33 @@

      Declaration

      -

      Divides lhs with rhs, returning the quotient, or trapping if rhs is zero. An overflow is never reported.

      +

      Divide a by b storing the remainder in a.

      Declaration

      Swift

      -
      public static func divideWithOverflow(_ lhs: BigInt, _ rhs: BigInt) -> (BigInt, overflow: Bool)
      +
      public static func %=(a: inout BigInt, b: BigInt)
    • +
    +
    +
    +
    • @@ -1172,33 +1226,29 @@

      Declaration

      -

      Divides lhs with rhs, returning the remainder, or trapping if rhs is zero. An overflow is never reported.

      +

      Undocumented

      Declaration

      Swift

      -
      public static func remainderWithOverflow(_ lhs: BigInt, _ rhs: BigInt) -> (BigInt, overflow: Bool)
      +
      public struct BigInt: SignedInteger
    • -
    -
    -
    -
    • - - - +=(_:_:) + + + init(_:)
      @@ -1206,19 +1256,19 @@

      Declaration

      -

      Add b to a in place.

      +

      Initializes a new signed big integer with the same value as the specified unsigned big integer.

      Declaration

      Swift

      -
      public static func +=(a: inout BigInt, b: BigInt)
      +
      public init(_ integer: BigUInt)
      @@ -1226,9 +1276,9 @@

      Declaration

    • - - - -=(_:_:) + + + init(_:)
      @@ -1236,19 +1286,18 @@

      Declaration

      -

      Subtract b from a in place.

      - +

      Declaration

      Swift

      -
      public static func -=(a: inout BigInt, b: BigInt)
      +
      public init<T>(_ source: T) where T : BinaryInteger
      @@ -1256,9 +1305,9 @@

      Declaration

    • - - - *=(_:_:) + + + init(exactly:)
      @@ -1266,19 +1315,18 @@

      Declaration

      -

      Multiply a with b in place.

      - +

      Declaration

      Swift

      -
      public static func *=(a: inout BigInt, b: BigInt)
      +
      public init?<T>(exactly source: T) where T : BinaryInteger
      @@ -1286,9 +1334,9 @@

      Declaration

    • @@ -1296,19 +1344,18 @@

      Declaration

      -

      Divide a by b storing the quotient in a.

      - +

      Declaration

      Swift

      -
      public static func /=(a: inout BigInt, b: BigInt)
      +
      public init<T>(clamping source: T) where T : BinaryInteger
      @@ -1316,9 +1363,9 @@

      Declaration

    • @@ -1326,19 +1373,1040 @@

      Declaration

      -

      Divide a by b storing the remainder in a.

      - +

      Declaration

      Swift

      -
      public static func %=(a: inout BigInt, b: BigInt)
      +
      public init<T>(truncatingIfNeeded source: T) where T : BinaryInteger
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + init(integerLiteral:) + +
      +
      +
      +
      +
      +
      +

      Initialize a new big integer from an integer literal.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init(integerLiteral value: Int64)
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + ==(_:_:) + +
      +
      +
      +
      +
      +
      +

      Return true iff a is equal to b.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func ==(a: BigInt, b: BigInt) -> Bool
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + <(_:_:) + +
      +
      +
      +
      +
      +
      +

      Return true iff a is less than b.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func <(a: BigInt, b: BigInt) -> Bool
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + init(_:radix:) + +
      +
      +
      +
      +
      +
      +

      Initialize a big integer from an ASCII representation in a given radix. Numerals above 9 are represented by +letters from the English alphabet.

      +
      +

      Requires

      + radix > 1 && radix < 36 + +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init?<S: StringProtocol>(_ text: S, radix: Int = 10)
      + +
      +
      +
      +

      Return Value

      +

      The integer represented by text, or nil if text contains a character that does not represent a numeral in radix.

      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Initialize a new big integer from a Unicode scalar. +The scalar must represent a decimal digit.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init(unicodeScalarLiteral value: UnicodeScalar)
      + +
      +
      + +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Initialize a new big integer from an extended grapheme cluster. +The cluster must consist of a decimal digit.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init(extendedGraphemeClusterLiteral value: String)
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + init(stringLiteral:) + +
      +
      +
      +
      +
      +
      +

      Initialize a new big integer from a decimal number represented by a string literal of arbitrary length. +The string must contain only decimal digits.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init(stringLiteral value: StringLiteralType)
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + description + +
      +
      +
      +
      +
      +
      +

      Return the decimal representation of this integer.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var description: String
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Return the playground quick look representation of this integer.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var customPlaygroundQuickLook: PlaygroundQuickLook
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + *(_:_:) + +
      +
      +
      +
      +
      +
      +

      Multiply a with b and return the result.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func *(a: BigInt, b: BigInt) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + *=(_:_:) + +
      +
      +
      +
      +
      +
      +

      Multiply a with b in place.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func *=(a: inout BigInt, b: BigInt)
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + advanced(by:) + +
      +
      +
      +
      +
      +
      +

      Returns self + n.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func advanced(by n: Stride) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + distance(to:) + +
      +
      +
      +
      +
      +
      +

      Returns other - self.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func distance(to other: BigInt) -> Stride
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + &<<(_:_:) + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public struct BigInt: SignedInteger
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + &<<=(_:_:) + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public struct BigInt: SignedInteger
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + &>>(_:_:) + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public struct BigInt: SignedInteger
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + &>>=(_:_:) + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public struct BigInt: SignedInteger
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + <<(_:_:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func <<<Other: BinaryInteger>(lhs: BigInt, rhs: Other) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + <<=(_:_:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func <<=<Other: BinaryInteger>(lhs: inout BigInt, rhs: Other)
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + >>(_:_:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func >><Other: BinaryInteger>(lhs: BigInt, rhs: Other) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + >>=(_:_:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func >>=<Other: BinaryInteger>(lhs: inout BigInt, rhs: Other)
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Returns the greatest common divisor of a and b.

      +
      +

      Complexity

      + O(count^2) where count = max(a.count, b.count) + +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func greatestCommonDivisor(with b: BigInt) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + inverse(_:) + +
      +
      +
      +
      +
      +
      +

      Returns the multiplicative inverse of this integer in modulo modulus arithmetic, +or nil if there is no such number.

      +
      +

      Requires

      + modulus.magnitude > 1 + +
      +
      +

      Complexity

      + O(count^3) + +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func inverse(_ modulus: BigInt) -> BigInt?
      + +
      +
      +
      +

      Return Value

      +

      If gcd(self, modulus) == 1, the value returned is an integer a < modulus such that (a * self) % modulus == 1. If self and modulus aren’t coprime, the return value is nil.

      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + squareRoot() + +
      +
      +
      +
      +
      +
      +

      Returns the integer square root of a big integer; i.e., the largest integer whose square isn’t greater than value.

      +
      +

      Requires

      + self >= 0 + +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func squareRoot() -> BigInt
      + +
      +
      +
      +

      Return Value

      +

      floor(sqrt(self))

      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + init(from:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init(from decoder: Decoder) throws
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + encode(to:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func encode(to encoder: Encoder) throws
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + power(_:) + +
      +
      +
      +
      +
      +
      +

      Returns this integer raised to the power exponent.

      + +

      This function calculates the result by successively squaring the base while halving the exponent.

      +
      +

      Note

      + This function can be unreasonably expensive for large exponents, which is why exponent is + a simple integer value. If you want to calculate big exponents, you’ll probably need to use + the modulo arithmetic variant. + +
      +
      +

      See also

      + BigUInt.power(_:, modulus:) + +
      +
      +

      Complexity

      + O((exponent * self.count)^log2(3)) or somesuch. The result may require a large amount of memory, too. + +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func power(_ exponent: Int) -> BigInt
      + +
      +
      +
      +

      Return Value

      +

      1 if exponent == 0, otherwise self raised to exponent. (This implies that 0.power(0) == 1.)

      +
      + +
      +
      +
    • +
    • +
      + + + + power(_:modulus:) + +
      +
      +
      +
      +
      +
      +

      Returns the remainder of this integer raised to the power exponent in modulo arithmetic under modulus.

      + +

      Uses the right-to-left binary method.

      +
      +

      Complexity

      + O(exponent.count * modulus.count^log2(3)) or somesuch + +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func power(_ exponent: BigInt, modulus: BigInt) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + +(_:_:) + +
      +
      +
      +
      +
      +
      +

      Add a to b and return the result.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func +(a: BigInt, b: BigInt) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + +=(_:_:) + +
      +
      +
      +
      +
      +
      +

      Add b to a in place.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func +=(a: inout BigInt, b: BigInt)
      @@ -1351,8 +2419,8 @@

      Declaration

    diff --git a/docs/Structs/BigInt/Sign.html b/docs/Structs/BigInt/Sign.html new file mode 100644 index 0000000..2db1db2 --- /dev/null +++ b/docs/Structs/BigInt/Sign.html @@ -0,0 +1,167 @@ + + + + Sign Enumeration Reference + + + + + + + + + + + + + + + + +
    +

    + + BigInt Docs + + (92% documented) +

    + +

    +

    + +
    +

    + +

    + + + View on GitHub + +

    + +

    + + + Install in Dash + +

    +
    + + + +
    + +
    + +
    +
    +

    Sign

    +

    Undocumented

    + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    +
    + +
    +
    + + + + diff --git a/docs/Structs/BigInt/Words.html b/docs/Structs/BigInt/Words.html new file mode 100644 index 0000000..ba949c1 --- /dev/null +++ b/docs/Structs/BigInt/Words.html @@ -0,0 +1,240 @@ + + + + Words Structure Reference + + + + + + + + + + + + + + + + +
    +

    + + BigInt Docs + + (92% documented) +

    + +

    +

    + +
    +

    + +

    + + + View on GitHub + +

    + +

    + + + Install in Dash + +

    +
    + + + +
    + +
    + +
    +
    +

    Words

    +
    +
    +
    public struct Words: RandomAccessCollection
    + +
    +
    + +
    +
    + +
    +
    +
    +
      +
    • +
      + + + + count + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var count: Int
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + indices + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var indices: Indices
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + startIndex + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var startIndex: Int
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + endIndex + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var endIndex: Int
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + + diff --git a/docs/Structs/BigUInt.html b/docs/Structs/BigUInt.html index fc1a300..8c502f7 100644 --- a/docs/Structs/BigUInt.html +++ b/docs/Structs/BigUInt.html @@ -1,37 +1,46 @@ - BigUInt Struct Reference + BigUInt Structure Reference + + + - +

    BigInt Docs - (100% documented) + (92% documented) +

    + +

    +

    + +

    - + View on GitHub

    - + Install in Dash @@ -41,7 +50,7 @@

    @@ -50,38 +59,31 @@ - - @@ -94,30 +96,17 @@

    BigUInt

    -
    public struct BigUInt
    +
    public struct BigUInt: UnsignedInteger

    An arbitary precision unsigned integer type, also known as a big integer.

    -

    Operations on big integers never overflow, but they might take a long time to execute. +

    Operations on big integers never overflow, but they may take a long time to execute. The amount of memory (and address space) available is the only constraint to the magnitude of these numbers.

    This particular big integer type uses base-2^64 digits to represent integers; you can think of it as a wrapper -around Array<UInt64>. In fact, BigUInt implements a mutable collection of its UInt64 digits, with the -digit at index 0 being the least significant.

    - -

    To make memory management simple, BigUInt allows you to subscript it with out-of-bounds indexes: -the subscript getter zero-extends the digit sequence, while the subscript setter automatically extends the -underlying storage when necessary:

    - -
    var number = BigUInt(1)
    -number[42]                // Not an error, returns 0
    -number[23] = 1            // Not an error, number is now 2^1472 + 1.
    -
    - -

    Note that it is rarely a good idea to use big integers as collections; in the vast majority of cases it is much -easier to work with the provided high-level methods and operators rather than with raw big digits.

    +around Array<UInt64>. (In fact, BigUInt only uses an array if there are more than two digits.)

    @@ -129,9 +118,9 @@

    BigUInt

  • - - - Digit + + + Word
    @@ -139,19 +128,19 @@

    BigUInt

    -

    The type representing a digit in BigUInt’s underlying number system.

    +

    The type representing a digit in BigUInt‘s underlying number system.

    Declaration

    Swift

    -
    public typealias Digit = UIntMax
    +
    public typealias Word = UInt
    @@ -159,9 +148,9 @@

    Declaration

  • - + - init() + init()
    @@ -181,7 +170,7 @@

    Declaration

    @@ -189,9 +178,9 @@

    Declaration

  • - - - init(_:) + + + init(words:)
    @@ -206,22 +195,26 @@

    Declaration

    Declaration

    Swift

    -
    public init(_ digits: [Digit])
    +
    public init(words: [Word])
  • + + +
    +
    • - - - init(_:) + + + ~(_:)
      @@ -229,19 +222,24 @@

      Declaration

      -

      Initializes a new BigUInt that has the supplied value.

      +

      Return the ones’ complement of a.

      +
      +

      Complexity

      + O(a.count) + +

      Declaration

      Swift

      -
      public init<I: UnsignedInteger>(_ integer: I)
      +
      public static prefix func ~(a: BigUInt) -> BigUInt
      @@ -249,9 +247,9 @@

      Declaration

    • - - - init(_:) + + + |=(_:_:)
      @@ -259,11 +257,10 @@

      Declaration

      -

      Initializes a new BigUInt that has the supplied value.

      - -
      -

      Requires

      - integer >= 0 +

      Calculate the bitwise OR of a and b, and store the result in a.

      +
      +

      Complexity

      + O(max(a.count, b.count))
      @@ -272,33 +269,22 @@

      Declaration

      Declaration

      Swift

      -
      public init<I: SignedInteger>(_ integer: I)
      +
      public static func |= (a: inout BigUInt, b: BigUInt)
    • -
    -
    -
    - -
    • - - - allZeros + + + &=(_:_:)
      @@ -306,19 +292,24 @@

      Bitwise Operations

      -

      The empty bitset.

      +

      Calculate the bitwise AND of a and b and return the result.

      +
      +

      Complexity

      + O(max(a.count, b.count)) + +

      Declaration

      Swift

      -
      public static let allZeros: BigUInt = 0
      +
      public static func &= (a: inout BigUInt, b: BigUInt)
      @@ -326,9 +317,9 @@

      Declaration

    • - - - width + + + ^=(_:_:)
      @@ -336,17 +327,10 @@

      Declaration

      -

      The minimum number of bits required to represent this integer in binary.

      - -
      -

      Returns

      - floor(log2(2 * self + 1)) - -
      - +

      Calculate the bitwise XOR of a and b and return the result.

      Complexity

      - O(1) + O(max(a.count, b.count))
      @@ -355,27 +339,33 @@

      Declaration

      Declaration

      Swift

      -
      public var width: Int
      +
      public static func ^= (a: inout BigUInt, b: BigUInt)
      -
      -

      Return Value

      -

      floor(log2(2 * self + 1))

      - -
    • +
    +
    +
    + +
    • @@ -383,30 +373,10 @@

      Return Value

      -

      The number of leading zero bits in the binary representation of this integer in base 2^Digit.width. -This is useful when you need to normalize a BigUInt such that the top bit of its most significant digit is 1.

      - +

      Create a big integer consisting of width uniformly distributed random bits.

      Note

      - 0 is considered to have zero leading zero bits. - -
      - -
      -

      Returns

      - A value in 0...(Digit.width - 1). - -
      - -
      -

      See also

      - width - -
      - -
      -

      Complexity

      - O(1) + This function uses arc4random_buf to generate random bits.
      @@ -415,17 +385,16 @@

      Return Value

      Declaration

      Swift

      -
      public var leadingZeroes: Int
      +
      public static func randomInteger(withMaximumWidth width: Int) -> BigUInt

      Return Value

      -

      A value in 0...(Digit.width - 1).

      - +

      A big integer less than 1 << width.

      @@ -433,9 +402,9 @@

      Return Value

    • @@ -443,23 +412,10 @@

      Return Value

      -

      The number of trailing zero bits in the binary representation of this integer.

      - +

      Create a big integer consisting of width-1 uniformly distributed random bits followed by a one bit.

      Note

      - 0 is considered to have zero trailing zero bits. - -
      - -
      -

      Returns

      - A value in 0...width. - -
      - -
      -

      Complexity

      - O(count) + This function uses arc4random_buf to generate random bits.
      @@ -468,17 +424,16 @@

      Return Value

      Declaration

      Swift

      -
      public var trailingZeroes: Int
      +
      public static func randomInteger(withExactWidth width: Int) -> BigUInt

      Return Value

      -

      A value in 0...width.

      - +

      A random big integer whose width is width.

      @@ -486,9 +441,9 @@

      Return Value

    • @@ -496,11 +451,10 @@

      Return Value

      -

      Return the ones’ complement of a.

      - -
      -

      Complexity

      - O(a.count) +

      Create a uniformly distributed random integer that’s less than the specified limit.

      +
      +

      Note

      + This function uses arc4random_buf to generate random bits.
      @@ -509,22 +463,37 @@

      Return Value

      Declaration

      Swift

      -
      public static prefix func ~(a: BigUInt) -> BigUInt
      +
      public static func randomInteger(lessThan limit: BigUInt) -> BigUInt
      +
      +

      Return Value

      +

      A random big integer that is less than limit.

      +
    • +
    +
    +
    + +
    • @@ -532,25 +501,19 @@

      Declaration

      -

      Calculate the bitwise OR of a and b and return the result.

      - -
      -

      Complexity

      - O(max(a.count, b.count)) - -
      +

      Returns true iff this integer passes the strong probable prime test for the specified base.

      Declaration

      Swift

      -
      public static func | (a: BigUInt, b: BigUInt) -> BigUInt
      +
      public func isStrongProbablePrime(_ base: BigUInt) -> Bool
      @@ -558,9 +521,9 @@

      Declaration

    • @@ -568,35 +531,43 @@

      Declaration

      -

      Calculate the bitwise AND of a and b and return the result.

      +

      Returns true if this integer is probably prime. Returns false if this integer is definitely not prime.

      -
      -

      Complexity

      - O(max(a.count, b.count)) +

      This function performs a probabilistic Miller-Rabin Primality Test, consisting of rounds iterations, +each calculating the strong probable prime test for a random base. The number of rounds is 10 by default, +but you may specify your own choice.

      -
      +

      To speed things up, the function checks if self is divisible by the first few prime numbers before +diving into (slower) Miller-Rabin testing.

      + +

      Also, when self is less than 82 bits wide, isPrime does a deterministic test that is guaranteed to +return a correct result.

      Declaration

      Swift

      -
      public static func & (a: BigUInt, b: BigUInt) -> BigUInt
      +
      public func isPrime(rounds: Int = 10) -> Bool
    • +
    +
    +
    +
    • - - - ^(_:_:) + + + bitWidth
      @@ -604,11 +575,10 @@

      Declaration

      -

      Calculate the bitwise OR of a and b and return the result.

      - +

      The minimum number of bits required to represent this integer in binary.

      Complexity

      - O(max(a.count, b.count)) + O(1)
      @@ -617,12 +587,16 @@

      Declaration

      Declaration

      Swift

      -
      public static func ^ (a: BigUInt, b: BigUInt) -> BigUInt
      +
      public var bitWidth: Int
      +
      +

      Return Value

      +

      floor(log2(2 * self + 1))

      +
      @@ -630,9 +604,9 @@

      Declaration

    • @@ -640,11 +614,21 @@

      Declaration

      -

      Calculate the bitwise OR of a and b, and store the result in a.

      +

      The number of leading zero bits in the binary representation of this integer in base 2^(Word.bitWidth). +This is useful when you need to normalize a BigUInt such that the top bit of its most significant word is 1.

      +
      +

      Note

      + 0 is considered to have zero leading zero bits. + +
      +
      +

      See also

      + width +

      Complexity

      - O(max(a.count, b.count)) + O(1)
      @@ -653,12 +637,16 @@

      Declaration

      Declaration

      Swift

      -
      public static func |= (a: inout BigUInt, b: BigUInt)
      +
      public var leadingZeroBitCount: Int
      +
      +

      Return Value

      +

      A value in 0...(Word.bitWidth - 1).

      +
      @@ -666,9 +654,9 @@

      Declaration

    • @@ -676,11 +664,15 @@

      Declaration

      -

      Calculate the bitwise AND of a and b, and store the result in a.

      +

      The number of trailing zero bits in the binary representation of this integer.

      +
      +

      Note

      + 0 is considered to have zero trailing zero bits. +

      Complexity

      - O(max(a.count, b.count)) + O(count)
      @@ -689,22 +681,30 @@

      Declaration

      Declaration

      Swift

      -
      public static func &= (a: inout BigUInt, b: BigUInt)
      +
      public var trailingZeroBitCount: Int
      +
      +

      Return Value

      +

      A value in 0...width.

      +
    • +
    +
    +
    +
    • - - - ^=(_:_:) + + + Words
      @@ -712,46 +712,29 @@

      Declaration

      -

      Calculate the bitwise XOR of a and b, and store the result in a.

      - -
      -

      Complexity

      - O(max(a.count, b.count)) - -
      - + + See more

      Declaration

      Swift

      -
      public static func ^= (a: inout BigUInt, b: BigUInt)
      +
      public struct Words: RandomAccessCollection
    • -
    -
    -
    - -
    • @@ -759,36 +742,18 @@

      Random Integers

      -

      Create a big integer consisting of width uniformly distributed random bits.

      - -
      -

      Returns

      - A big integer less than 1 << width. - -
      - -
      -

      Note

      - This function uses arc4random_buf to generate random bits. - -
      - +

      Declaration

      Swift

      -
      public static func randomInteger(withMaximumWidth width: Int) -> BigUInt
      +
      public var words: Words
      -
      -

      Return Value

      -

      A big integer less than 1 << width.

      - -
      @@ -796,9 +761,9 @@

      Return Value

    • @@ -806,46 +771,40 @@

      Return Value

      -

      Create a big integer consisting of width-1 uniformly distributed random bits followed by a one bit.

      - -
      -

      Returns

      - A random big integer whose width is width. - -
      - -
      -

      Note

      - This function uses arc4random_buf to generate random bits. - -
      +

      Undocumented

      Declaration

      Swift

      -
      public static func randomInteger(withExactWidth width: Int) -> BigUInt
      +
      public struct BigUInt: UnsignedInteger
      -
      -

      Return Value

      -

      A random big integer whose width is width.

      - -
    • +
    +
    +
    + +
    • @@ -853,36 +812,19 @@

      Return Value

      -

      Create a uniformly distributed random integer that’s less than the specified limit.

      - -
      -

      Returns

      - A random big integer that is less than limit. - -
      - -
      -

      Note

      - This function uses arc4random_buf to generate random bits. - -
      +

      Append this BigUInt to the specified hasher.

      Declaration

      Swift

      -
      public static func randomIntegerLessThan(_ limit: BigUInt) -> BigUInt
      +
      public func appendHashes(to hasher: inout SipHasher)
      -
      -

      Return Value

      -

      A random big integer that is less than limit.

      - -
      @@ -890,20 +832,13 @@

      Return Value

    -
    • @@ -911,19 +846,18 @@

      Primality Testing

      -

      Returns true iff this integer passes the strong probable prime test for the specified base.

      - +

      Declaration

      Swift

      -
      public func isStrongProbablePrime(_ base: BigUInt) -> Bool
      +
      public init?<T: BinaryFloatingPoint>(exactly source: T)
      @@ -931,9 +865,9 @@

      Declaration

    • @@ -941,29 +875,18 @@

      Declaration

      -

      Returns true if this integer is probably prime. Returns false if this integer is definitely not prime.

      - -

      This function performs a probabilistic Miller-Rabin Primality Test, consisting of rounds iterations, -each calculating the strong probable prime test for a random base. The number of rounds is 10 by default, -but you may specify your own choice.

      - -

      To speed things up, the function checks if self is divisible by the first few prime numbers before -diving into (slower) Miller-Rabin testing.

      - -

      Also, when self is less than 82 bits wide, isPrime does a deterministic test that is guaranteed to -return a correct result.

      - +

      Declaration

      Swift

      -
      public func isPrime(rounds: Int = 10) -> Bool
      +
      public init<T: BinaryFloatingPoint>(_ source: T)
      @@ -972,19 +895,19 @@

      Declaration

    • @@ -992,40 +915,40 @@

      Hashing

      -

      Append this BigUInt to the specified hasher.

      +

      Subtract other from this integer in place, and return a flag indicating if the operation caused an +arithmetic overflow. other is shifted shift digits to the left before being subtracted.

      +
      +

      Note

      + If the result indicates an overflow, then self becomes the twos’ complement of the absolute difference. + +
      +
      +

      Complexity

      + O(count) + +

      Declaration

      Swift

      -
      public func appendHashes(to hasher: inout SipHasher)
      +
      public mutating func subtractReportingOverflow(_ b: BigUInt, shiftedBy shift: Int = 0) -> Bool
    • -
    -
    -
    - -
    • @@ -1033,15 +956,13 @@

      Subtraction

      -

      Subtract a digit d from this integer in place, returning a flag that is true if the operation -caused an arithmetic overflow. d is shifted shift digits to the left before being subtracted.

      - +

      Subtract other from this integer, returning the difference and a flag indicating arithmetic overflow. +other is shifted shift digits to the left before being subtracted.

      Note

      - If the result is true, then self becomes the two’s complement of the absolute difference. + If overflow is true, then the result value is the twos’ complement of the absolute value of the difference.
      -

      Complexity

      O(count) @@ -1053,12 +974,12 @@

      Subtraction

      Declaration

      Swift

      -
      public mutating func subtractDigitWithOverflow(_ d: Digit, atPosition shift: Int = 0) -> Bool
      +
      public func subtractingReportingOverflow(_ other: BigUInt, shiftedBy shift: Int) -> (partialValue: BigUInt, overflow: Bool)
      @@ -1066,9 +987,9 @@

      Declaration

    • @@ -1076,15 +997,12 @@

      Declaration

      -

      Subtract a digit d from this integer, returning the difference and a flag that is true if the operation -caused an arithmetic overflow. d is shifted shift digits to the left before being subtracted.

      - +

      Subtracts other from self, returning the result and a flag indicating arithmetic overflow.

      Note

      - If overflow is true, then the returned value is the two’s complement of the absolute difference. + When the operation overflows, then partialValue is the twos’ complement of the absolute value of the difference.
      -

      Complexity

      O(count) @@ -1096,12 +1014,12 @@

      Declaration

      Declaration

      Swift

      -
      public func subtractingDigitWithOverflow(_ d: Digit, atPosition shift: Int = 0) -> (BigUInt, overflow: Bool)
      +
      public func subtractingReportingOverflow(_ other: BigUInt) -> (partialValue: BigUInt, overflow: Bool)
      @@ -1109,9 +1027,9 @@

      Declaration

    • @@ -1119,15 +1037,13 @@

      Declaration

      -

      Subtract a digit d from this integer in place. -d is shifted shift digits to the left before being subtracted.

      - +

      Subtract other from this integer in place. +other is shifted shift digits to the left before being subtracted.

      Requires

      - self >= d * 2^shift + self >= other * 2^shift
      -

      Complexity

      O(count) @@ -1139,12 +1055,12 @@

      Declaration

      Declaration

      Swift

      -
      public mutating func subtractDigit(_ d: Digit, atPosition shift: Int = 0)
      +
      public mutating func subtract(_ other: BigUInt, shiftedBy shift: Int = 0)
      @@ -1152,9 +1068,9 @@

      Declaration

    • @@ -1162,15 +1078,13 @@

      Declaration

      -

      Subtract a digit d from this integer and return the result. -d is shifted shift digits to the left before being subtracted.

      - +

      Subtract b from this integer, and return the difference. +b is shifted shift digits to the left before being subtracted.

      Requires

      - self >= d * 2^shift + self >= b * 2^shift
      -

      Complexity

      O(count) @@ -1182,12 +1096,12 @@

      Declaration

      Declaration

      Swift

      -
      public func subtractingDigit(_ d: Digit, atPosition shift: Int = 0) -> BigUInt
      +
      public func subtracting(_ other: BigUInt, shiftedBy shift: Int = 0) -> BigUInt
      @@ -1195,9 +1109,9 @@

      Declaration

    • @@ -1205,15 +1119,12 @@

      Declaration

      -

      Subtract b from this integer in place, and return true iff the operation caused an -arithmetic overflow. b is shifted shift digits to the left before being subtracted.

      - -
      -

      Note

      - If the result is true, then self becomes the twos’ complement of the absolute difference. +

      Decrement this integer by one.

      +
      +

      Requires

      + !isZero
      -

      Complexity

      O(count) @@ -1225,12 +1136,12 @@

      Declaration

      Declaration

      Swift

      -
      public mutating func subtractWithOverflow(_ b: BigUInt, atPosition shift: Int = 0) -> Bool
      +
      public mutating func decrement(shiftedBy shift: Int = 0)
      @@ -1238,9 +1149,9 @@

      Declaration

    • @@ -1248,18 +1159,15 @@

      Declaration

      -

      Subtract b from this integer, returning the difference and a flag that is true if the operation caused an -arithmetic overflow. b is shifted shift digits to the left before being subtracted.

      - -
      -

      Note

      - If overflow is true, then the result value is the twos’ complement of the absolute value of the difference. +

      Subtract b from a and return the result.

      +
      +

      Requires

      + a >= b
      -

      Complexity

      - O(count) + O(a.count)
      @@ -1268,12 +1176,12 @@

      Declaration

      Declaration

      Swift

      -
      public func subtractingWithOverflow(_ b: BigUInt, atPosition shift: Int = 0) -> (BigUInt, overflow: Bool)
      +
      public static func -(a: BigUInt, b: BigUInt) -> BigUInt
      @@ -1281,9 +1189,9 @@

      Declaration

    • @@ -1291,18 +1199,15 @@

      Declaration

      -

      Subtract b from this integer in place. -b is shifted shift digits to the left before being subtracted.

      - +

      Subtract b from a and store the result in a.

      Requires

      - self >= b * 2^shift + a >= b
      -

      Complexity

      - O(count) + O(a.count)
      @@ -1311,22 +1216,33 @@

      Declaration

      Declaration

      Swift

      -
      public mutating func subtract(_ b: BigUInt, atPosition shift: Int = 0)
      +
      public static func -=(a: inout BigUInt, b: BigUInt)
    • +
    +
    +
    + +
    • @@ -1334,18 +1250,15 @@

      Declaration

      -

      Subtract b from this integer, and return the difference. -b is shifted shift digits to the left before being subtracted.

      - +

      Divide this integer by y and return the resulting quotient and remainder.

      Requires

      - self >= b * 2^shift + y > 0
      -

      Complexity

      - O(count) + O(count^2)
      @@ -1354,12 +1267,16 @@

      Declaration

      Declaration

      Swift

      -
      public func subtracting(_ b: BigUInt, atPosition shift: Int = 0) -> BigUInt
      +
      public func quotientAndRemainder(dividingBy y: BigUInt) -> (quotient: BigUInt, remainder: BigUInt)
      +
      +

      Return Value

      +

      (quotient, remainder) where quotient = floor(self/y), remainder = self - quotient * y

      +
      @@ -1367,9 +1284,9 @@

      Declaration

    • @@ -1377,17 +1294,10 @@

      Declaration

      -

      Decrement this integer by one.

      - -
      -

      Requires

      - !isZero - -
      - -
      -

      Complexity

      - O(count) +

      Divide x by y and return the quotient.

      +
      +

      Note

      + Use divided(by:) if you also need the remainder.
      @@ -1396,12 +1306,12 @@

      Declaration

      Declaration

      Swift

      -
      public mutating func decrement(atPosition shift: Int = 0)
      +
      public static func /(x: BigUInt, y: BigUInt) -> BigUInt
      @@ -1409,9 +1319,9 @@

      Declaration

    • - - - -(_:_:) + + + %(_:_:)
      @@ -1419,17 +1329,10 @@

      Declaration

      -

      Subtract b from a and return the result.

      - -
      -

      Requires

      - a >= b - -
      - -
      -

      Complexity

      - O(a.count) +

      Divide x by y and return the remainder.

      +
      +

      Note

      + Use divided(by:) if you also need the remainder.
      @@ -1438,12 +1341,12 @@

      Declaration

      Declaration

      Swift

      -
      public static func -(a: BigUInt, b: BigUInt) -> BigUInt
      +
      public static func %(x: BigUInt, y: BigUInt) -> BigUInt
      @@ -1451,9 +1354,9 @@

      Declaration

    • - - - -=(_:_:) + + + /=(_:_:)
      @@ -1461,17 +1364,10 @@

      Declaration

      -

      Subtract b from a and store the result in a.

      - -
      -

      Requires

      - a >= b - -
      - -
      -

      Complexity

      - O(a.count) +

      Divide x by y and store the quotient in x.

      +
      +

      Note

      + Use divided(by:) if you also need the remainder.
      @@ -1480,12 +1376,12 @@

      Declaration

      Declaration

      Swift

      -
      public static func -=(a: inout BigUInt, b: BigUInt)
      +
      public static func /=(x: inout BigUInt, y: BigUInt)
      @@ -1493,9 +1389,9 @@

      Declaration

    • @@ -1503,20 +1399,24 @@

      Declaration

      -

      Subtracts rhs from lhs, returning the result and a Bool that is true iff the operation caused an arithmetic overflow. -Overflow is returned if and only if lhs is less than rhs, in which case the result is the twos’ complement of the absolute difference.

      +

      Divide x by y and store the remainder in x.

      +
      +

      Note

      + Use divided(by:) if you also need the remainder. + +

      Declaration

      Swift

      -
      public static func subtractWithOverflow(_ lhs: BigUInt, _ rhs: BigUInt) -> (BigUInt, overflow: Bool)
      +
      public static func %=(x: inout BigUInt, y: BigUInt)
      @@ -1524,20 +1424,13 @@

      Declaration

    -
    • @@ -1545,31 +1438,18 @@

      Division

      -

      Divide this integer by the digit y, leaving the quotient in its place and returning the remainder.

      - -
      -

      Requires

      - y > 0 - -
      - -
      -

      Complexity

      - O(count) - -
      - +

      Declaration

      Swift

      -
      public mutating func divide(byDigit y: Digit) -> Digit
      +
      public init?<T: BinaryInteger>(exactly source: T)
      @@ -1577,9 +1457,9 @@

      Declaration

    • @@ -1587,167 +1467,18 @@

      Declaration

      -

      Divide this integer by the digit y and return the resulting quotient and remainder.

      - -
      -

      Requires

      - y > 0 - -
      - -
      -

      Returns

      - (quotient, remainder) where quotient = floor(x/y), remainder = x - quotient * y - -
      - -
      -

      Complexity

      - O(x.count) - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func divided(byDigit y: Digit) -> (quotient: BigUInt, remainder: Digit)
      - -
      -
      -
      -

      Return Value

      -

      (quotient, remainder) where quotient = floor(x/y), remainder = x - quotient * y

      - -
      - -
      -
      -
    • -
    • -
      - - - - divided(by:) - -
      -
      -
      -
      -
      -
      -

      Divide this integer by y and return the resulting quotient and remainder.

      - -
      -

      Requires

      - y > 0 - -
      - -
      -

      Returns

      - (quotient, remainder) where quotient = floor(self/y), remainder = self - quotient * y - -
      - -
      -

      Complexity

      - O(count^2) - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func divided(by y: BigUInt) -> (quotient: BigUInt, remainder: BigUInt)
      - -
      -
      -
      -

      Return Value

      -

      (quotient, remainder) where quotient = floor(self/y), remainder = self - quotient * y

      - -
      - -
      -
      -
    • -
    • -
      - - - - /(_:_:) - -
      -
      -
      -
      -
      -
      -

      Divide x by y and return the quotient.

      - -
      -

      Note

      - Use divided(by:) if you also need the remainder. - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public static func /(x: BigUInt, y: BigUInt) -> BigUInt
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - %(_:_:) - -
      -
      -
      -
      -
      -
      -

      Divide x by y and return the remainder.

      - -
      -

      Note

      - Use divided(by:) if you also need the remainder. - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public static func %(x: BigUInt, y: BigUInt) -> BigUInt
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init<T: BinaryInteger>(_ source: T)
      @@ -1755,81 +1486,9 @@

      Declaration

    • - - - /=(_:_:) - -
      -
      -
      -
      -
      -
      -

      Divide x by y and store the quotient in x.

      - -
      -

      Note

      - Use divided(by:) if you also need the remainder. - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public static func /=(x: inout BigUInt, y: BigUInt)
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - %=(_:_:) - -
      -
      -
      -
      -
      -
      -

      Divide x by y and store the remainder in x.

      - -
      -

      Note

      - Use divided(by:) if you also need the remainder. - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public static func %=(x: inout BigUInt, y: BigUInt)
      - -
      -
      - -
      -
      -
    • -
    • -
      @@ -1837,19 +1496,18 @@

      Declaration

      -

      Divide lhs by rhs, returning the quotient. This function never results in an overflow.

      - +

      Declaration

      Swift

      -
      public static func divideWithOverflow(_ lhs: BigUInt, _ rhs: BigUInt) -> (BigUInt, overflow: Bool)
      +
      public init<T: BinaryInteger>(truncatingIfNeeded source: T)
      @@ -1857,9 +1515,9 @@

      Declaration

    • @@ -1867,19 +1525,18 @@

      Declaration

      -

      Divide lhs by rhs, returning the remainder. This function never results in an overflow.

      - +

      Declaration

      Swift

      -
      public static func remainderWithOverflow(_ lhs: BigUInt, _ rhs: BigUInt) -> (BigUInt, overflow: Bool)
      +
      public init<T: BinaryInteger>(clamping source: T)
      @@ -1887,20 +1544,13 @@

      Declaration

    -
    @@ -1928,20 +1578,13 @@

    Declaration

    -
    • @@ -1949,20 +1592,18 @@

      Init from String literals

      -

      Initialize a new big integer from a Unicode scalar. -The scalar must represent a decimal digit.

      - +

      Declaration

      Swift

      -
      public init(unicodeScalarLiteral value: UnicodeScalar)
      +
      public static var isSigned: Bool
      @@ -1970,9 +1611,9 @@

      Declaration

    • @@ -1980,51 +1621,23 @@

      Declaration

      -

      Initialize a new big integer from an extended grapheme cluster. -The cluster must consist of a decimal digit.

      +

      Returns -1 if this value is negative and 1 if it’s positive; otherwise, 0.

      Declaration

      Swift

      -
      public init(extendedGraphemeClusterLiteral value: String)
      +
      public func signum() -> BigUInt
      - -
      -
      -
    • -
    • -
      - - - - init(stringLiteral:) - -
      -
      -
      -
      -
      -
      -

      Initialize a new big integer from a decimal number represented by a string literal of arbitrary length. -The string must contain only decimal digits.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public init(stringLiteral value: StringLiteralType)
      - -
      +
      +

      Return Value

      +

      The sign of this number, expressed as an integer of the same type.

      @@ -2032,13 +1645,20 @@

      Declaration

    +
    • @@ -2046,576 +1666,63 @@

      Declaration

      -

      Explicitly convert to IntMax, trapping on overflow.

      +

      Get or set a digit at a given index.

      +
      +

      Note

      + Unlike a normal collection, it is OK for the index to be greater than or equal to endIndex. +The subscripting getter returns zero for indexes beyond the most significant digit. +Setting these extended digits automatically appends new elements to the underlying digit array. -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func toIntMax() -> IntMax
      +
      +
      +

      Requires

      + index >= 0 -
      -
      - -
      -
      -
    • -
    -
    -
    - -
      -
    • -
      - - - - Iterator - -
      -
      -
      -
      -
      -
      -

      The type representing the iteration interface for the digits in a big integer.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public typealias Iterator = DigitIterator<Digit>
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - Indices - -
      -
      -
      -
      -
      -
      -

      The type representing valid indices for subscripting the collection.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public typealias Indices = CountableRange<Int>
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - SubSequence - -
      -
      -
      -
      -
      -
      -

      Big integers can be contiguous digit subranges of another big integer.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public typealias SubSequence = BigUInt
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - subscript(_:) - -
      -
      -
      -
      -
      -
      -

      Get or set a digit at a given index.

      - -
      -

      Note

      - Unlike a normal collection, it is OK for the index to be greater than or equal to endIndex. -The subscripting getter returns zero for indexes beyond the most significant digit. -Setting these extended digits automatically appends new elements to the underlying digit array. - -
      - -
      -

      Requires

      - index >= 0 - -
      - -
      -

      Complexity

      - The getter is O(1). The setter is O(1) if the conditions below are true; otherwise it’s O(count). - -
        -
      • The integer’s storage is not shared with another integer
      • -
      • The integer wasn’t created as a slice of another integer
      • -
      • index < count
      • -
      - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public subscript(index: Int) -> Digit
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - subscript(_:) - -
      -
      -
      -
      -
      -
      -

      Returns an integer built from the digits of this integer in the given range.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public subscript(bounds: Range<Int>) -> BigUInt
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - IndexDistance - -
      -
      -
      -
      -
      -
      -

      The type representing the number of steps between two indices.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public typealias IndexDistance = Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - Index - -
      -
      -
      -
      -
      -
      -

      Big integers implement Collection to provide access to their big digits, indexed by integers; a zero index refers to the least significant digit.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public typealias Index = Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - indices - -
      -
      -
      -
      -
      -
      -

      Big integers can be contiguous digit subranges of another big integer.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public var indices: Indices
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - startIndex - -
      -
      -
      -
      -
      -
      -

      The index of the first digit, starting from the least significant. (This is always zero.)

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public var startIndex: Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - endIndex - -
      -
      -
      -
      -
      -
      -

      The index of the digit after the most significant digit in this integer.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public var endIndex: Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - count - -
      -
      -
      -
      -
      -
      -

      The number of digits in this integer, excluding leading zero digits.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public var count: Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - makeIterator() - -
      -
      -
      -
      -
      -
      -

      Return a generator over the digits of this integer, starting at the least significant digit.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func makeIterator() -> DigitIterator<Digit>
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - index(after:) - -
      -
      -
      -
      -
      -
      -

      Returns the position immediately after the given index.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func index(after i: Int) -> Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - index(before:) - -
      -
      -
      -
      -
      -
      -

      Returns the position immediately before the given index.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func index(before i: Int) -> Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - formIndex(after:) - -
      -
      -
      -
      -
      -
      -

      Replaces the given index with its successor.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func formIndex(after i: inout Int)
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - formIndex(before:) - -
      -
      -
      -
      -
      -
      -

      Replaces the given index with its predecessor.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func formIndex(before i: inout Int)
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - index(_:offsetBy:) - -
      -
      -
      -
      -
      -
      -

      Returns an index that is the specified distance from the given index.

      +
      +
      +

      Complexity

      + The getter is O(1). The setter is O(1) if the conditions below are true; otherwise it’s O(count). + +
        +
      • The integer’s storage is not shared with another integer
      • +
      • The integer wasn’t created as a slice of another integer
      • +
      • index < count
      • +
      + +

      Declaration

      Swift

      -
      public func index(_ i: Int, offsetBy n: Int) -> Int
      +
      subscript(_ index: Int) -> Word
  • + + +
    + + -
    -
    - +
    +
    + +
    -
    - +
    +
    +
    + -
    -
    - -
    - Show on GitHub + Show on GitHub
    @@ -3064,9 +2143,9 @@

    Declaration

  • - + - serialize() + serialize()
    @@ -3074,7 +2153,7 @@

    Declaration

    -

    Return an NSData instance that contains the base-256 representation of this integer, in network (big-endian) byte order.

    +

    Return a Data value that contains the base-256 representation of this integer, in network (big-endian) byte order.

    @@ -3086,7 +2165,7 @@

    Declaration

    @@ -3105,9 +2184,9 @@

    Multiplication

  • - - - multiply(byDigit:) + + + multiply(byWord:)
    @@ -3115,8 +2194,7 @@

    Multiplication

    -

    Multiply this big integer by a single digit, and store the result in place of the original big integer.

    - +

    Multiply this big integer by a single word, and store the result in place of the original big integer.

    Complexity

    O(count) @@ -3128,12 +2206,12 @@

    Multiplication

    Declaration

    Swift

    -
    public mutating func multiply(byDigit y: Digit)
    +
    public mutating func multiply(byWord y: Word)
    @@ -3141,9 +2219,9 @@

    Declaration

  • - - - multiplied(byDigit:) + + + multiplied(byWord:)
    @@ -3151,8 +2229,7 @@

    Declaration

    -

    Multiply this big integer by a single digit, and return the result.

    - +

    Multiply this big integer by a single Word, and return the result.

    Complexity

    O(count) @@ -3164,12 +2241,12 @@

    Declaration

    Declaration

    Swift

    -
    public func multiplied(byDigit y: Digit) -> BigUInt
    +
    public func multiplied(byWord y: Word) -> BigUInt
    @@ -3177,9 +2254,9 @@

    Declaration

  • - - - multiplyAndAdd(_:_:atPosition:) + + + multiplyAndAdd(_:_:shiftedBy:)
    @@ -3187,21 +2264,13 @@

    Declaration

    -

    Multiply x by y, and add the result to this integer, optionally shifted shift digits to the left.

    - +

    Multiply x by y, and add the result to this integer, optionally shifted shift words to the left.

    Note

    This is the fused multiply/shift/add operation; it is more efficient than doing the components individually. (The fused operation doesn’t need to allocate space for temporary big integers.)
    - -
    -

    Returns

    - self is set to self + (x * y) << (shift * 2^Digit.width) - -
    -

    Complexity

    O(count) @@ -3213,17 +2282,16 @@

    Declaration

    Declaration

    Swift

    -
    public mutating func multiplyAndAdd(_ x: BigUInt, _ y: Digit, atPosition shift: Int = 0)
    +
    public mutating func multiplyAndAdd(_ x: BigUInt, _ y: Word, shiftedBy shift: Int = 0)

    Return Value

    -

    self is set to self + (x * y) << (shift * 2^Digit.width)

    - +

    self is set to self + (x * y) << (shift * 2^Word.bitWidth)

    @@ -3231,9 +2299,9 @@

    Return Value

  • - + - multiplied(by:) + multiplied(by:)
    @@ -3242,14 +2310,12 @@

    Return Value

    Multiply this integer by y and return the result.

    -

    Note

    This uses the naive O(n^2) multiplication algorithm unless both arguments have more than -BigUInt.directMultiplicationLimit digits. +BigUInt.directMultiplicationLimit words.
    -

    Complexity

    O(n^log2(3)) @@ -3266,7 +2332,7 @@

    Declaration

    @@ -3274,9 +2340,9 @@

    Declaration

  • - + - directMultiplicationLimit + directMultiplicationLimit
    @@ -3284,7 +2350,7 @@

    Declaration

    -

    Multiplication switches to an asymptotically better recursive algorithm when arguments have more digits than this limit.

    +

    Multiplication switches to an asymptotically better recursive algorithm when arguments have more words than this limit.

    @@ -3296,7 +2362,7 @@

    Declaration

    @@ -3304,9 +2370,9 @@

    Declaration

  • - + - *(_:_:) + *(_:_:)
    @@ -3315,14 +2381,12 @@

    Declaration

    Multiply a by b and return the result.

    -

    Note

    This uses the naive O(n^2) multiplication algorithm unless both arguments have more than -BigUInt.directMultiplicationLimit digits. +BigUInt.directMultiplicationLimit words.
    -

    Complexity

    O(n^log2(3)) @@ -3334,12 +2398,76 @@

    Declaration

    Declaration

    Swift

    -
    public static func *(x: BigUInt, y: BigUInt) -> BigUInt
    +
    public static func *(x: BigUInt, y: BigUInt) -> BigUInt
    + +
    +
    + + +
    +
  • +
  • +
    + + + + *=(_:_:) + +
    +
    +
    +
    +
    +
    +

    Multiply a by b and store the result in a.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func *=(a: inout BigUInt, b: BigUInt)
    + +
    +
    + +
    +
    +
  • + + +
    +
    -
    - +
    +
    + +
    @@ -3950,9 +2917,9 @@

    Declaration

  • - - - increment(atPosition:) + + + power(_:modulus:)
    @@ -3960,12 +2927,12 @@

    Declaration

    -

    Increment this integer by one. If shift is non-zero, it selects -the digit that is to be incremented.

    +

    Returns the remainder of this integer raised to the power exponent in modulo arithmetic under modulus.

    +

    Uses the right-to-left binary method.

    Complexity

    - O(count + shift) + O(exponent.count * modulus.count^log2(3)) or somesuch
    @@ -3974,22 +2941,33 @@

    Declaration

    Declaration

    Swift

    -
    public mutating func increment(atPosition shift: Int = 0)
    +
    public func power(_ exponent: BigUInt, modulus: BigUInt) -> BigUInt
  • + + +
    + +
    diff --git a/docs/Structs/BigUInt/Words.html b/docs/Structs/BigUInt/Words.html new file mode 100644 index 0000000..b0dda68 --- /dev/null +++ b/docs/Structs/BigUInt/Words.html @@ -0,0 +1,182 @@ + + + + Words Structure Reference + + + + + + + + + + + + + + + + +
    +

    + + BigInt Docs + + (92% documented) +

    + +

    +

    + +
    +

    + +

    + + + View on GitHub + +

    + +

    + + + Install in Dash + +

    +
    + + + +
    + +
    + +
    +
    +

    Words

    +
    +
    +
    public struct Words: RandomAccessCollection
    + +
    +
    + +
    +
    + +
    +
    +
    +
      +
    • +
      + + + + startIndex + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var startIndex: Int
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + endIndex + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var endIndex: Int
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + + diff --git a/docs/badge.svg b/docs/badge.svg new file mode 100644 index 0000000..658cf7a --- /dev/null +++ b/docs/badge.svg @@ -0,0 +1 @@ +documentationdocumentation92%92% \ No newline at end of file diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css index 75b5433..c83db5b 100644 --- a/docs/css/jazzy.css +++ b/docs/css/jazzy.css @@ -327,3 +327,42 @@ html.dash .header, html.dash .breadcrumbs, html.dash .navigation { display: none; } html.dash .height-container { display: block; } + +form[role=search] input { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 0 10px; + margin: 0; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } +form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fbfbfb; + color: #333; + border: 1px solid #ddd; } +form[role=search] .tt-highlight { + font-weight: bold; } +form[role=search] .tt-suggestion { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } +form[role=search] .tt-suggestion:hover, +form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } +form[role=search] .tt-suggestion:hover .doc-parent-name, +form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Extensions.html index 8f89273..b9203ad 100644 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Extensions.html +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Extensions.html @@ -8,6 +8,9 @@ + + + @@ -19,18 +22,24 @@ BigInt Docs - (100% documented) + (92% documented) +

    + +

    +

    + +

    - + View on GitHub

    - + Install in Dash @@ -49,38 +58,31 @@

    - - @@ -99,13 +101,37 @@

    Extensions

    -
    - - - -

    BigInt

    -
    -
    +
      +
    • +
      + + + + BinaryFloatingPoint + +
      +
      +
      +
      +
      +
      + + See more +
      +
      +

      Declaration

      +
      +

      Swift

      +
      protocol BinaryFloatingPoint : FloatingPoint, ExpressibleByFloatLiteral
      + +
      +
      +
      +
      +
    • +
    +
    +
    diff --git a/docs/Structs/DigitIterator.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Extensions/BinaryFloatingPoint.html similarity index 50% rename from docs/Structs/DigitIterator.html rename to docs/docsets/BigInt.docset/Contents/Resources/Documents/Extensions/BinaryFloatingPoint.html index 3a0c17d..648ecee 100644 --- a/docs/Structs/DigitIterator.html +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Extensions/BinaryFloatingPoint.html @@ -1,37 +1,46 @@ - DigitIterator Struct Reference + BinaryFloatingPoint Extension Reference + + + - + - +

    BigInt Docs - (100% documented) + (92% documented) +

    + +

    +

    + +

    - + View on GitHub

    - + Install in Dash @@ -41,7 +50,7 @@

    @@ -50,38 +59,31 @@ - - @@ -91,15 +93,14 @@
    -

    DigitIterator

    +

    BinaryFloatingPoint

    -
    public struct DigitIterator<Digit>: IteratorProtocol
    +
    protocol BinaryFloatingPoint : FloatingPoint, ExpressibleByFloatLiteral
    -

    State for iterating through the digits of a big integer.

    - +
    @@ -110,9 +111,39 @@

    DigitIterator

  • - - - next() + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    protocol BinaryFloatingPoint : FloatingPoint, ExpressibleByFloatLiteral
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(_:)
    @@ -120,20 +151,19 @@

    DigitIterator

    -

    Return the next digit in the integer, or nil if there are no more digits. -Returned digits range from least to most significant.

    +

    Undocumented

    Declaration

    Swift

    -
    public mutating func next() -> Digit?
    +
    protocol BinaryFloatingPoint : FloatingPoint, ExpressibleByFloatLiteral
    @@ -146,8 +176,8 @@

    Declaration

  • diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Extensions/String.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Extensions/String.html index 64c808e..3b61515 100644 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Extensions/String.html +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Extensions/String.html @@ -8,6 +8,9 @@ + + + @@ -20,18 +23,24 @@ BigInt Docs - (100% documented) + (92% documented) +

    + +

    +

    + +

    - + View on GitHub

    - + Install in Dash @@ -50,38 +59,31 @@

    - - @@ -109,9 +111,9 @@

    String

  • - - - init(_:radix:uppercase:) + + + init(_:)
    @@ -119,20 +121,10 @@

    String

    -

    Initialize a new string representing a signed big integer in the given radix (base).

    - -

    Numerals greater than 9 are represented as letters from the English alphabet, -starting with a if uppercase is false or A otherwise.

    - -
    -

    Requires

    - radix > 1 && radix <= 36 - -
    - +

    Initialize a new string with the base-10 representation of an unsigned big integer.

    Complexity

    - O(count) when radix is a power of two; otherwise O(count^2). + O(v.count^2)
    @@ -141,26 +133,22 @@

    String

    Declaration

    Swift

    -
    public init(_ value: BigInt, radix: Int = 10, uppercase: Bool = false)
    +
    public init(_ v: BigUInt)
  • - - -
    -
    • @@ -168,11 +156,18 @@

      Declaration

      -

      Initialize a new string with the base-10 representation of an unsigned big integer.

      +

      Initialize a new string representing an unsigned big integer in the given radix (base).

      + +

      Numerals greater than 9 are represented as letters from the English alphabet, +starting with a if uppercase is false or A otherwise.

      +
      +

      Requires

      + radix > 1 && radix <= 36 +

      Complexity

      - O(v.count^2) + O(count) when radix is a power of two; otherwise O(count^2).
      @@ -181,12 +176,12 @@

      Declaration

      Declaration

      Swift

      -
      public init(_ v: BigUInt)
      +
      public init(_ v: BigUInt, radix: Int, uppercase: Bool = false)
      @@ -194,9 +189,9 @@

      Declaration

    • @@ -204,17 +199,15 @@

      Declaration

      -

      Initialize a new string representing an unsigned big integer in the given radix (base).

      +

      Initialize a new string representing a signed big integer in the given radix (base).

      Numerals greater than 9 are represented as letters from the English alphabet, starting with a if uppercase is false or A otherwise.

      -

      Requires

      radix > 1 && radix <= 36
      -

      Complexity

      O(count) when radix is a power of two; otherwise O(count^2). @@ -226,12 +219,12 @@

      Declaration

      Declaration

      Swift

      -
      public init(_ v: BigUInt, radix: Int, uppercase: Bool = false)
      +
      public init(_ value: BigInt, radix: Int = 10, uppercase: Bool = false)
      @@ -244,8 +237,8 @@

      Declaration

    diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Functions.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Functions.html deleted file mode 100644 index 5293bae..0000000 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Functions.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - Functions Reference - - - - - - - - - - - - -
    -

    - - BigInt Docs - - (100% documented) -

    - -

    - - - View on GitHub - -

    - -

    - - - Install in Dash - -

    -
    - - - -
    - -
    - -
    -
    -

    Functions

    -

    The following functions are available globally.

    - -
    -
    - -
    -
    -
    - -
      -
    • -
      - - - - sqrt(_:) - -
      -
      -
      -
      -
      -
      -

      Returns the integer square root of a big integer; i.e., the largest integer whose square isn’t greater than value.

      - -
      -

      Returns

      - floor(sqrt(value)) - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func sqrt(_ value: BigUInt) -> BigUInt
      - -
      -
      -
      -

      Return Value

      -

      floor(sqrt(value))

      - -
      - -
      -
      -
    • -
    -
    -
    -
    - -
    -
    - - - - diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Protocols.html deleted file mode 100644 index c7b5757..0000000 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Protocols.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - Protocols Reference - - - - - - - - - - - - -
    -

    - - BigInt Docs - - (100% documented) -

    - -

    - - - View on GitHub - -

    - -

    - - - Install in Dash - -

    -
    - - - -
    - -
    - -
    -
    -

    Protocols

    -

    The following protocols are available globally.

    - -
    -
    - -
    -
    -
    -
      -
    • -
      - - - - ShiftOperations - -
      -
      -
      -
      -
      -
      -

      Describes a type that supports all the standard shift operators.

      - - See more -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public protocol ShiftOperations
      - -
      -
      - -
      -
      -
    • -
    -
    -
    -
    - -
    -
    - - - - diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Protocols/ShiftOperations.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Protocols/ShiftOperations.html deleted file mode 100644 index 10f600f..0000000 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Protocols/ShiftOperations.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - ShiftOperations Protocol Reference - - - - - - - - - - - - - -
    -

    - - BigInt Docs - - (100% documented) -

    - -

    - - - View on GitHub - -

    - -

    - - - Install in Dash - -

    -
    - - - -
    - -
    - -
    -
    -

    ShiftOperations

    -
    -
    -
    public protocol ShiftOperations
    - -
    -
    -

    Describes a type that supports all the standard shift operators.

    - -
    -
    - -
    -
    -
    -
      -
    • -
      - - - - <<(_:_:) - -
      -
      -
      -
      -
      -
      -

      Shift the value a by b bits to the left and return the result.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      static func <<(a: Self, b: Self) -> Self
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - >>(_:_:) - -
      -
      -
      -
      -
      -
      -

      Shift the value a by b bits to the right and return the result.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      static func >>(a: Self, b: Self) -> Self
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - <<=(_:_:) - -
      -
      -
      -
      -
      -
      -

      Shift the value a by b bits to the left and store the result in a.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      static func <<=(a: inout Self, b: Self)
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - >>=(_:_:) - -
      -
      -
      -
      -
      -
      -

      Shift the value a by b bits to the right and store the result in a.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      static func >>=(a: inout Self, b: Self)
      - -
      -
      - -
      -
      -
    • -
    -
    -
    -
    - -
    -
    - - - - diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs.html index 9f22d91..366be84 100644 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs.html @@ -1,36 +1,45 @@ - Structs Reference + Structures Reference + + + - +

    BigInt Docs - (100% documented) + (92% documented) +

    + +

    +

    + +

    - + View on GitHub

    - + Install in Dash @@ -40,7 +49,7 @@

    @@ -49,38 +58,31 @@ - - @@ -90,8 +92,8 @@
    -

    Structs

    -

    The following structs are available globally.

    +

    Structures

    +

    The following structures are available globally.

    @@ -103,9 +105,9 @@

    Structs

  • - + - BigUInt + BigUInt
    @@ -115,24 +117,11 @@

    Structs

    An arbitary precision unsigned integer type, also known as a big integer.

    -

    Operations on big integers never overflow, but they might take a long time to execute. +

    Operations on big integers never overflow, but they may take a long time to execute. The amount of memory (and address space) available is the only constraint to the magnitude of these numbers.

    This particular big integer type uses base-2^64 digits to represent integers; you can think of it as a wrapper -around Array<UInt64>. In fact, BigUInt implements a mutable collection of its UInt64 digits, with the -digit at index 0 being the least significant.

    - -

    To make memory management simple, BigUInt allows you to subscript it with out-of-bounds indexes: -the subscript getter zero-extends the digit sequence, while the subscript setter automatically extends the -underlying storage when necessary:

    - -
    var number = BigUInt(1)
    -number[42]                // Not an error, returns 0
    -number[23] = 1            // Not an error, number is now 2^1472 + 1.
    -
    - -

    Note that it is rarely a good idea to use big integers as collections; in the vast majority of cases it is much -easier to work with the provided high-level methods and operators rather than with raw big digits.

    +around Array<UInt64>. (In fact, BigUInt only uses an array if there are more than two digits.)

    See more
    @@ -140,43 +129,12 @@

    Structs

    Declaration

    Swift

    -
    public struct BigUInt
    - -
    -
    - -
  • - - -
  • -
    - - - - DigitIterator - -
    -
    -
    -
    -
    -
    -

    State for iterating through the digits of a big integer.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct DigitIterator<Digit>: IteratorProtocol
    +
    public struct BigUInt: UnsignedInteger
    @@ -195,9 +153,9 @@

    BigInt

  • - + - BigInt + BigInt
    @@ -218,7 +176,6 @@

    BigInt

    Not all algorithms of BigUInt are available for BigInt values; for example, there is no square root or primality test for signed integers. When you need to call one of these, just extract the absolute value:

    -
    BigInt(255).abs.isPrime()   // Returns false
     
    @@ -228,12 +185,12 @@

    BigInt

    Declaration

    Swift

    -
    public struct BigInt
    +
    public struct BigInt: SignedInteger
    @@ -246,8 +203,8 @@

    Declaration

    diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigInt.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigInt.html index ea945cc..7bc104a 100644 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigInt.html +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigInt.html @@ -1,37 +1,46 @@ - BigInt Struct Reference + BigInt Structure Reference + + + - +

    BigInt Docs - (100% documented) + (92% documented) +

    + +

    +

    + +

    - + View on GitHub

    - + Install in Dash @@ -41,7 +50,7 @@

    @@ -50,38 +59,31 @@ - - @@ -94,7 +96,7 @@

    BigInt

    -
    public struct BigInt
    +
    public struct BigInt: SignedInteger
    @@ -111,7 +113,6 @@

    BigInt

    Not all algorithms of BigUInt are available for BigInt values; for example, there is no square root or primality test for signed integers. When you need to call one of these, just extract the absolute value:

    -
    BigInt(255).abs.isPrime()   // Returns false
     
    @@ -125,9 +126,9 @@

    BigInt

  • - - - abs + + + Sign
    @@ -135,19 +136,20 @@

    BigInt

    -

    The absolute value of this integer.

    +

    Undocumented

    + See more

    Declaration

    Swift

    -
    public var abs: BigUInt
    +
    public struct BigInt: SignedInteger
    @@ -155,9 +157,9 @@

    Declaration

  • - - - Digit + + + Word
    @@ -165,19 +167,19 @@

    Declaration

    -

    The type representing a digit in BigInt’s underlying number system.

    +

    The type representing a digit in BigInt‘s underlying number system.

    Declaration

    Swift

    -
    public typealias Digit = BigUInt.Digit
    +
    public typealias Word = BigUInt.Word
    @@ -185,9 +187,9 @@

    Declaration

  • - - - negative + + + isSigned
    @@ -195,19 +197,18 @@

    Declaration

    -

    True iff the value of this integer is negative.

    - +

    Declaration

    Swift

    -
    public var negative: Bool
    +
    public static var isSigned: Bool
    @@ -215,9 +216,9 @@

    Declaration

  • @@ -225,19 +226,19 @@

    Declaration

    -

    Initializes a new big integer with the provided absolute number and sign flag.

    +

    The absolute value of this integer.

    Declaration

    Swift

    -
    public init(abs: BigUInt, negative: Bool = false)
    +
    public var magnitude: BigUInt
    @@ -245,9 +246,9 @@

    Declaration

  • - - - init(_:) + + + sign
    @@ -255,19 +256,19 @@

    Declaration

    -

    Initializes a new big integer with the same value as the specified integer.

    +

    True iff the value of this integer is negative.

    Declaration

    Swift

    -
    public init<I: UnsignedInteger>(_ integer: I)
    +
    public var sign: Sign
    @@ -275,9 +276,9 @@

    Declaration

  • @@ -285,19 +286,19 @@

    Declaration

    -

    Initializes a new big integer with the same value as the specified integer.

    +

    Initializes a new big integer with the provided absolute number and sign flag.

    Declaration

    Swift

    -
    public init<I: SignedInteger>(_ integer: I)
    +
    public init(sign: Sign, magnitude: BigUInt)
    @@ -305,9 +306,9 @@

    Declaration

  • - - - init(_:) + + + isZero
    @@ -315,33 +316,34 @@

    Declaration

    -

    Initializes a new signed big integer with the same value as the specified unsigned big integer.

    +

    Return true iff this integer is zero.

    +
    +

    Complexity

    + O(1) + +

    Declaration

    Swift

    -
    public init(_ integer: BigUInt)
    +
    public var isZero: Bool
  • - -
    -
    -
    • - - - init(_:radix:) + + + signum()
      @@ -349,49 +351,23 @@

      Declaration

      -

      Initialize a big integer from an ASCII representation in a given radix. Numerals above 9 are represented by -letters from the English alphabet.

      - -
      -

      Requires

      - radix > 1 && radix < 36 - -
      - -
      -

      Parameter

      - Parameter text: A string optionally starting with - or + followed by characters corresponding to numerals in the given radix. (0-9, a-z, A-Z) - -
      - -
      -

      Parameter

      - Parameter radix: The base of the number system to use, or 10 if unspecified. - -
      - -
      -

      Returns

      - The integer represented by text, or nil if text contains a character that does not represent a numeral in radix. - -
      +

      Returns -1 if this value is negative and 1 if it’s positive; otherwise, 0.

      Declaration

      Swift

      -
      public init?(_ text: String, radix: Int = 10)
      +
      public func signum() -> BigInt

      Return Value

      -

      The integer represented by text, or nil if text contains a character that does not represent a numeral in radix.

      - +

      The sign of this number, expressed as an integer of the same type.

      @@ -403,9 +379,9 @@

      Return Value

    • - - - description + + + ~(_:)
      @@ -413,33 +389,28 @@

      Return Value

      -

      Return the decimal representation of this integer.

      - +

      Declaration

      Swift

      -
      public var description: String
      +
      public static prefix func ~(x: BigInt) -> BigInt
    • -
    -
    -
    -
    • @@ -447,33 +418,29 @@

      Declaration

      -

      Initialize a new big integer from an integer literal.

      +

      Undocumented

      Declaration

      Swift

      -
      public init(integerLiteral value: IntMax)
      +
      public struct BigInt: SignedInteger
    • -
    -
    -
    -
    • @@ -481,20 +448,19 @@

      Declaration

      -

      Initialize a new big integer from a Unicode scalar. -The scalar must represent a decimal digit.

      +

      Undocumented

      Declaration

      Swift

      -
      public init(unicodeScalarLiteral value: UnicodeScalar)
      +
      public struct BigInt: SignedInteger
      @@ -502,9 +468,9 @@

      Declaration

    • @@ -512,20 +478,19 @@

      Declaration

      -

      Initialize a new big integer from an extended grapheme cluster. -The cluster must consist of a decimal digit.

      +

      Undocumented

      Declaration

      Swift

      -
      public init(extendedGraphemeClusterLiteral value: String)
      +
      public struct BigInt: SignedInteger
      @@ -533,9 +498,9 @@

      Declaration

    • @@ -543,34 +508,28 @@

      Declaration

      -

      Initialize a new big integer from a decimal number represented by a string literal of arbitrary length. -The string must contain only decimal digits.

      - +

      Declaration

      Swift

      -
      public init(stringLiteral value: StringLiteralType)
      +
      public static func &=(lhs: inout BigInt, rhs: BigInt)
    • -
    -
    -
    -
    • @@ -578,19 +537,47 @@

      Declaration

      -

      Return the playground quick look representation of this integer.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func |=(lhs: inout BigInt, rhs: BigInt)
      +
      +
      + +
      +
      +
    • +
    • +
      + + + + ^=(_:_:) + +
      +
      +
      +
      +
      +
      +

      Declaration

      Swift

      -
      public var customPlaygroundQuickLook: PlaygroundQuickLook
      +
      public static func ^=(lhs: inout BigInt, rhs: BigInt)
      @@ -598,13 +585,20 @@

      Declaration

    +
    • @@ -612,19 +606,19 @@

      Declaration

      -

      Return true iff a is equal to b.

      +

      Returns true iff this integer passes the strong probable prime test for the specified base.

      Declaration

      Swift

      -
      public static func ==(a: BigInt, b: BigInt) -> Bool
      +
      public func isStrongProbablePrime(_ base: BigInt) -> Bool
      @@ -632,9 +626,9 @@

      Declaration

    • @@ -642,19 +636,29 @@

      Declaration

      -

      Return true iff a is less than b.

      +

      Returns true if this integer is probably prime. Returns false if this integer is definitely not prime.

      + +

      This function performs a probabilistic Miller-Rabin Primality Test, consisting of rounds iterations, +each calculating the strong probable prime test for a random base. The number of rounds is 10 by default, +but you may specify your own choice.

      + +

      To speed things up, the function checks if self is divisible by the first few prime numbers before +diving into (slower) Miller-Rabin testing.

      + +

      Also, when self is less than 82 bits wide, isPrime does a deterministic test that is guaranteed to +return a correct result.

      Declaration

      Swift

      -
      public static func <(a: BigInt, b: BigInt) -> Bool
      +
      public func isPrime(rounds: Int = 10) -> Bool
      @@ -666,9 +670,9 @@

      Declaration

    • @@ -676,19 +680,47 @@

      Declaration

      -

      Append this BigInt to the specified hasher.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var bitWidth: Int
      +
      +
      + +
      +
      +
    • +
    • +
      + + + + trailingZeroBitCount + +
      +
      +
      +
      +
      +
      +

      Declaration

      Swift

      -
      public func appendHashes(to hasher: inout SipHasher)
      +
      public var trailingZeroBitCount: Int
      @@ -700,9 +732,9 @@

      Declaration

    • - - - advanced(by:) + + + Words
      @@ -710,19 +742,19 @@

      Declaration

      -

      Returns self + n.

      - + + See more

      Declaration

      Swift

      -
      public func advanced(by n: Stride) -> BigInt
      +
      public struct Words: RandomAccessCollection
      @@ -730,9 +762,9 @@

      Declaration

    • - - - Stride + + + words
      @@ -740,19 +772,18 @@

      Declaration

      -

      A type that can represent the distance between two values of BigInt.

      - +

      Declaration

      Swift

      -
      public typealias Stride = BigInt
      +
      public var words: Words
      @@ -760,9 +791,9 @@

      Declaration

    • @@ -770,19 +801,19 @@

      Declaration

      -

      Returns other - self.

      +

      Undocumented

      Declaration

      Swift

      -
      public func distance(to other: BigInt) -> Stride
      +
      public struct BigInt: SignedInteger
      @@ -794,9 +825,9 @@

      Declaration

    • - - - -(_:) + + + appendHashes(to:)
      @@ -804,29 +835,33 @@

      Declaration

      -

      Negate a and return the result.

      +

      Append this BigInt to the specified hasher.

      Declaration

      Swift

      -
      public static prefix func -(a: BigInt) -> BigInt
      +
      public func appendHashes(to hasher: inout SipHasher)
    • +
    +
    +
    +
    • - - - -(_:_:) + + + init(exactly:)
      @@ -834,33 +869,28 @@

      Declaration

      -

      Subtract b from a and return the result.

      - +

      Declaration

      Swift

      -
      public static func -(a: BigInt, b: BigInt) -> BigInt
      +
      public init?<T: BinaryFloatingPoint>(exactly source: T)
    • -
    -
    -
    -
    • - - - abs(_:) + + + init(_:)
      @@ -868,19 +898,18 @@

      Declaration

      -

      Returns the absolute value of x.

      - +

      Declaration

      Swift

      -
      public static func abs(_ x: BigInt) -> BigInt
      +
      public init<T: BinaryFloatingPoint>(_ source: T)
      @@ -892,9 +921,9 @@

      Declaration

    • - - - toIntMax() + + + negate()
      @@ -902,19 +931,18 @@

      Declaration

      -

      Explicitly convert to IntMax, trapping on overflow.

      - +

      Declaration

      Swift

      -
      public func toIntMax() -> IntMax
      +
      public mutating func negate()
      @@ -922,9 +950,9 @@

      Declaration

    • - - - +(_:_:) + + + -(_:_:)
      @@ -932,19 +960,19 @@

      Declaration

      -

      Add a to b and return the result.

      +

      Subtract b from a and return the result.

      Declaration

      Swift

      -
      public static func +(a: BigInt, b: BigInt) -> BigInt
      +
      public static func -(a: BigInt, b: BigInt) -> BigInt
      @@ -952,9 +980,9 @@

      Declaration

    • - - - *(_:_:) + + + -=(_:_:)
      @@ -962,29 +990,33 @@

      Declaration

      -

      Multiply a with b and return the result.

      +

      Subtract b from a in place.

      Declaration

      Swift

      -
      public static func *(a: BigInt, b: BigInt) -> BigInt
      +
      public static func -=(a: inout BigInt, b: BigInt)
    • +
    +
    +
    +
    • @@ -992,19 +1024,33 @@

      Declaration

      -

      Divide a by b and return the quotient. Traps if b is zero.

      +

      Divide this integer by y and return the resulting quotient and remainder.

      +
      +

      Requires

      + y > 0 + +
      +
      +

      Complexity

      + O(count^2) + +

      Declaration

      Swift

      -
      public static func /(a: BigInt, b: BigInt) -> BigInt
      +
      public func quotientAndRemainder(dividingBy y: BigInt) -> (quotient: BigInt, remainder: BigInt)
      +
      +

      Return Value

      +

      (quotient, remainder) where quotient = floor(self/y), remainder = self - quotient * y

      +
      @@ -1012,9 +1058,9 @@

      Declaration

    • - - - %(_:_:) + + + /(_:_:)
      @@ -1022,19 +1068,19 @@

      Declaration

      -

      Divide a by b and return the remainder.

      +

      Divide a by b and return the quotient. Traps if b is zero.

      Declaration

      Swift

      -
      public static func %(a: BigInt, b: BigInt) -> BigInt
      +
      public static func /(a: BigInt, b: BigInt) -> BigInt
      @@ -1042,9 +1088,9 @@

      Declaration

    • @@ -1052,19 +1098,19 @@

      Declaration

      -

      Adds lhs and rhs together. An overflow is never reported.

      +

      Divide a by b and return the remainder. The result has the same sign as a.

      Declaration

      Swift

      -
      public static func addWithOverflow(_ lhs: BigInt, _ rhs: BigInt) -> (BigInt, overflow: Bool)
      +
      public static func %(a: BigInt, b: BigInt) -> BigInt
      @@ -1072,9 +1118,9 @@

      Declaration

    • @@ -1082,29 +1128,33 @@

      Declaration

      -

      Subtracts rhs from lhs. An overflow is never reported.

      +

      Return the result of a mod b. The result is always a nonnegative integer that is less than the absolute value of b.

      Declaration

      Swift

      -
      public static func subtractWithOverflow(_ lhs: BigInt, _ rhs: BigInt) -> (BigInt, overflow: Bool)
      +
      public func modulus(_ mod: BigInt) -> BigInt
    • +
    +
    +
    +
    • @@ -1112,19 +1162,19 @@

      Declaration

      -

      Multiplies lhs with rhs. An overflow is never reported.

      +

      Divide a by b storing the quotient in a.

      Declaration

      Swift

      -
      public static func multiplyWithOverflow(_ lhs: BigInt, _ rhs: BigInt) -> (BigInt, overflow: Bool)
      +
      public static func /=(a: inout BigInt, b: BigInt)
      @@ -1132,9 +1182,9 @@

      Declaration

    • @@ -1142,29 +1192,33 @@

      Declaration

      -

      Divides lhs with rhs, returning the quotient, or trapping if rhs is zero. An overflow is never reported.

      +

      Divide a by b storing the remainder in a.

      Declaration

      Swift

      -
      public static func divideWithOverflow(_ lhs: BigInt, _ rhs: BigInt) -> (BigInt, overflow: Bool)
      +
      public static func %=(a: inout BigInt, b: BigInt)
    • +
    +
    +
    +
    • @@ -1172,33 +1226,29 @@

      Declaration

      -

      Divides lhs with rhs, returning the remainder, or trapping if rhs is zero. An overflow is never reported.

      +

      Undocumented

      Declaration

      Swift

      -
      public static func remainderWithOverflow(_ lhs: BigInt, _ rhs: BigInt) -> (BigInt, overflow: Bool)
      +
      public struct BigInt: SignedInteger
    • -
    -
    -
    -
    • - - - +=(_:_:) + + + init(_:)
      @@ -1206,19 +1256,19 @@

      Declaration

      -

      Add b to a in place.

      +

      Initializes a new signed big integer with the same value as the specified unsigned big integer.

      Declaration

      Swift

      -
      public static func +=(a: inout BigInt, b: BigInt)
      +
      public init(_ integer: BigUInt)
      @@ -1226,9 +1276,9 @@

      Declaration

    • - - - -=(_:_:) + + + init(_:)
      @@ -1236,19 +1286,18 @@

      Declaration

      -

      Subtract b from a in place.

      - +

      Declaration

      Swift

      -
      public static func -=(a: inout BigInt, b: BigInt)
      +
      public init<T>(_ source: T) where T : BinaryInteger
      @@ -1256,9 +1305,9 @@

      Declaration

    • - - - *=(_:_:) + + + init(exactly:)
      @@ -1266,19 +1315,18 @@

      Declaration

      -

      Multiply a with b in place.

      - +

      Declaration

      Swift

      -
      public static func *=(a: inout BigInt, b: BigInt)
      +
      public init?<T>(exactly source: T) where T : BinaryInteger
      @@ -1286,9 +1334,9 @@

      Declaration

    • @@ -1296,19 +1344,18 @@

      Declaration

      -

      Divide a by b storing the quotient in a.

      - +

      Declaration

      Swift

      -
      public static func /=(a: inout BigInt, b: BigInt)
      +
      public init<T>(clamping source: T) where T : BinaryInteger
      @@ -1316,9 +1363,9 @@

      Declaration

    • @@ -1326,19 +1373,1040 @@

      Declaration

      -

      Divide a by b storing the remainder in a.

      - +

      Declaration

      Swift

      -
      public static func %=(a: inout BigInt, b: BigInt)
      +
      public init<T>(truncatingIfNeeded source: T) where T : BinaryInteger
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + init(integerLiteral:) + +
      +
      +
      +
      +
      +
      +

      Initialize a new big integer from an integer literal.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init(integerLiteral value: Int64)
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + ==(_:_:) + +
      +
      +
      +
      +
      +
      +

      Return true iff a is equal to b.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func ==(a: BigInt, b: BigInt) -> Bool
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + <(_:_:) + +
      +
      +
      +
      +
      +
      +

      Return true iff a is less than b.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func <(a: BigInt, b: BigInt) -> Bool
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + init(_:radix:) + +
      +
      +
      +
      +
      +
      +

      Initialize a big integer from an ASCII representation in a given radix. Numerals above 9 are represented by +letters from the English alphabet.

      +
      +

      Requires

      + radix > 1 && radix < 36 + +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init?<S: StringProtocol>(_ text: S, radix: Int = 10)
      + +
      +
      +
      +

      Return Value

      +

      The integer represented by text, or nil if text contains a character that does not represent a numeral in radix.

      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Initialize a new big integer from a Unicode scalar. +The scalar must represent a decimal digit.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init(unicodeScalarLiteral value: UnicodeScalar)
      + +
      +
      + +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Initialize a new big integer from an extended grapheme cluster. +The cluster must consist of a decimal digit.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init(extendedGraphemeClusterLiteral value: String)
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + init(stringLiteral:) + +
      +
      +
      +
      +
      +
      +

      Initialize a new big integer from a decimal number represented by a string literal of arbitrary length. +The string must contain only decimal digits.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init(stringLiteral value: StringLiteralType)
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + description + +
      +
      +
      +
      +
      +
      +

      Return the decimal representation of this integer.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var description: String
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Return the playground quick look representation of this integer.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var customPlaygroundQuickLook: PlaygroundQuickLook
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + *(_:_:) + +
      +
      +
      +
      +
      +
      +

      Multiply a with b and return the result.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func *(a: BigInt, b: BigInt) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + *=(_:_:) + +
      +
      +
      +
      +
      +
      +

      Multiply a with b in place.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func *=(a: inout BigInt, b: BigInt)
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + advanced(by:) + +
      +
      +
      +
      +
      +
      +

      Returns self + n.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func advanced(by n: Stride) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + distance(to:) + +
      +
      +
      +
      +
      +
      +

      Returns other - self.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func distance(to other: BigInt) -> Stride
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + &<<(_:_:) + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public struct BigInt: SignedInteger
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + &<<=(_:_:) + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public struct BigInt: SignedInteger
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + &>>(_:_:) + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public struct BigInt: SignedInteger
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + &>>=(_:_:) + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public struct BigInt: SignedInteger
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + <<(_:_:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func <<<Other: BinaryInteger>(lhs: BigInt, rhs: Other) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + <<=(_:_:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func <<=<Other: BinaryInteger>(lhs: inout BigInt, rhs: Other)
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + >>(_:_:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func >><Other: BinaryInteger>(lhs: BigInt, rhs: Other) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + >>=(_:_:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func >>=<Other: BinaryInteger>(lhs: inout BigInt, rhs: Other)
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Returns the greatest common divisor of a and b.

      +
      +

      Complexity

      + O(count^2) where count = max(a.count, b.count) + +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func greatestCommonDivisor(with b: BigInt) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + inverse(_:) + +
      +
      +
      +
      +
      +
      +

      Returns the multiplicative inverse of this integer in modulo modulus arithmetic, +or nil if there is no such number.

      +
      +

      Requires

      + modulus.magnitude > 1 + +
      +
      +

      Complexity

      + O(count^3) + +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func inverse(_ modulus: BigInt) -> BigInt?
      + +
      +
      +
      +

      Return Value

      +

      If gcd(self, modulus) == 1, the value returned is an integer a < modulus such that (a * self) % modulus == 1. If self and modulus aren’t coprime, the return value is nil.

      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + squareRoot() + +
      +
      +
      +
      +
      +
      +

      Returns the integer square root of a big integer; i.e., the largest integer whose square isn’t greater than value.

      +
      +

      Requires

      + self >= 0 + +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func squareRoot() -> BigInt
      + +
      +
      +
      +

      Return Value

      +

      floor(sqrt(self))

      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + init(from:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init(from decoder: Decoder) throws
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + encode(to:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func encode(to encoder: Encoder) throws
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + power(_:) + +
      +
      +
      +
      +
      +
      +

      Returns this integer raised to the power exponent.

      + +

      This function calculates the result by successively squaring the base while halving the exponent.

      +
      +

      Note

      + This function can be unreasonably expensive for large exponents, which is why exponent is + a simple integer value. If you want to calculate big exponents, you’ll probably need to use + the modulo arithmetic variant. + +
      +
      +

      See also

      + BigUInt.power(_:, modulus:) + +
      +
      +

      Complexity

      + O((exponent * self.count)^log2(3)) or somesuch. The result may require a large amount of memory, too. + +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func power(_ exponent: Int) -> BigInt
      + +
      +
      +
      +

      Return Value

      +

      1 if exponent == 0, otherwise self raised to exponent. (This implies that 0.power(0) == 1.)

      +
      + +
      +
      +
    • +
    • +
      + + + + power(_:modulus:) + +
      +
      +
      +
      +
      +
      +

      Returns the remainder of this integer raised to the power exponent in modulo arithmetic under modulus.

      + +

      Uses the right-to-left binary method.

      +
      +

      Complexity

      + O(exponent.count * modulus.count^log2(3)) or somesuch + +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func power(_ exponent: BigInt, modulus: BigInt) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
      +
    • +
      + + + + +(_:_:) + +
      +
      +
      +
      +
      +
      +

      Add a to b and return the result.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func +(a: BigInt, b: BigInt) -> BigInt
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + +=(_:_:) + +
      +
      +
      +
      +
      +
      +

      Add b to a in place.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public static func +=(a: inout BigInt, b: BigInt)
      @@ -1351,8 +2419,8 @@

      Declaration

    diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigInt/Sign.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigInt/Sign.html new file mode 100644 index 0000000..2db1db2 --- /dev/null +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigInt/Sign.html @@ -0,0 +1,167 @@ + + + + Sign Enumeration Reference + + + + + + + + + + + + + + + + +
    +

    + + BigInt Docs + + (92% documented) +

    + +

    +

    + +
    +

    + +

    + + + View on GitHub + +

    + +

    + + + Install in Dash + +

    +
    + + + +
    + +
    + +
    +
    +

    Sign

    +

    Undocumented

    + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    +
    + +
    +
    + + + + diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigInt/Words.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigInt/Words.html new file mode 100644 index 0000000..ba949c1 --- /dev/null +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigInt/Words.html @@ -0,0 +1,240 @@ + + + + Words Structure Reference + + + + + + + + + + + + + + + + +
    +

    + + BigInt Docs + + (92% documented) +

    + +

    +

    + +
    +

    + +

    + + + View on GitHub + +

    + +

    + + + Install in Dash + +

    +
    + + + +
    + +
    + +
    +
    +

    Words

    +
    +
    +
    public struct Words: RandomAccessCollection
    + +
    +
    + +
    +
    + +
    +
    +
    +
      +
    • +
      + + + + count + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var count: Int
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + indices + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var indices: Indices
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + startIndex + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var startIndex: Int
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + endIndex + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var endIndex: Int
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + + diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigUInt.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigUInt.html index fc1a300..8c502f7 100644 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigUInt.html +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigUInt.html @@ -1,37 +1,46 @@ - BigUInt Struct Reference + BigUInt Structure Reference + + + - +

    BigInt Docs - (100% documented) + (92% documented) +

    + +

    +

    + +

    - + View on GitHub

    - + Install in Dash @@ -41,7 +50,7 @@

    @@ -50,38 +59,31 @@ - - @@ -94,30 +96,17 @@

    BigUInt

    -
    public struct BigUInt
    +
    public struct BigUInt: UnsignedInteger

    An arbitary precision unsigned integer type, also known as a big integer.

    -

    Operations on big integers never overflow, but they might take a long time to execute. +

    Operations on big integers never overflow, but they may take a long time to execute. The amount of memory (and address space) available is the only constraint to the magnitude of these numbers.

    This particular big integer type uses base-2^64 digits to represent integers; you can think of it as a wrapper -around Array<UInt64>. In fact, BigUInt implements a mutable collection of its UInt64 digits, with the -digit at index 0 being the least significant.

    - -

    To make memory management simple, BigUInt allows you to subscript it with out-of-bounds indexes: -the subscript getter zero-extends the digit sequence, while the subscript setter automatically extends the -underlying storage when necessary:

    - -
    var number = BigUInt(1)
    -number[42]                // Not an error, returns 0
    -number[23] = 1            // Not an error, number is now 2^1472 + 1.
    -
    - -

    Note that it is rarely a good idea to use big integers as collections; in the vast majority of cases it is much -easier to work with the provided high-level methods and operators rather than with raw big digits.

    +around Array<UInt64>. (In fact, BigUInt only uses an array if there are more than two digits.)

    @@ -129,9 +118,9 @@

    BigUInt

  • - - - Digit + + + Word
    @@ -139,19 +128,19 @@

    BigUInt

    -

    The type representing a digit in BigUInt’s underlying number system.

    +

    The type representing a digit in BigUInt‘s underlying number system.

    Declaration

    Swift

    -
    public typealias Digit = UIntMax
    +
    public typealias Word = UInt
    @@ -159,9 +148,9 @@

    Declaration

  • - + - init() + init()
    @@ -181,7 +170,7 @@

    Declaration

    @@ -189,9 +178,9 @@

    Declaration

  • - - - init(_:) + + + init(words:)
    @@ -206,22 +195,26 @@

    Declaration

    Declaration

    Swift

    -
    public init(_ digits: [Digit])
    +
    public init(words: [Word])
  • + + +
    +
    • - - - init(_:) + + + ~(_:)
      @@ -229,19 +222,24 @@

      Declaration

      -

      Initializes a new BigUInt that has the supplied value.

      +

      Return the ones’ complement of a.

      +
      +

      Complexity

      + O(a.count) + +

      Declaration

      Swift

      -
      public init<I: UnsignedInteger>(_ integer: I)
      +
      public static prefix func ~(a: BigUInt) -> BigUInt
      @@ -249,9 +247,9 @@

      Declaration

    • - - - init(_:) + + + |=(_:_:)
      @@ -259,11 +257,10 @@

      Declaration

      -

      Initializes a new BigUInt that has the supplied value.

      - -
      -

      Requires

      - integer >= 0 +

      Calculate the bitwise OR of a and b, and store the result in a.

      +
      +

      Complexity

      + O(max(a.count, b.count))
      @@ -272,33 +269,22 @@

      Declaration

      Declaration

      Swift

      -
      public init<I: SignedInteger>(_ integer: I)
      +
      public static func |= (a: inout BigUInt, b: BigUInt)
    • -
    -
    -
    - -
    • - - - allZeros + + + &=(_:_:)
      @@ -306,19 +292,24 @@

      Bitwise Operations

      -

      The empty bitset.

      +

      Calculate the bitwise AND of a and b and return the result.

      +
      +

      Complexity

      + O(max(a.count, b.count)) + +

      Declaration

      Swift

      -
      public static let allZeros: BigUInt = 0
      +
      public static func &= (a: inout BigUInt, b: BigUInt)
      @@ -326,9 +317,9 @@

      Declaration

    • - - - width + + + ^=(_:_:)
      @@ -336,17 +327,10 @@

      Declaration

      -

      The minimum number of bits required to represent this integer in binary.

      - -
      -

      Returns

      - floor(log2(2 * self + 1)) - -
      - +

      Calculate the bitwise XOR of a and b and return the result.

      Complexity

      - O(1) + O(max(a.count, b.count))
      @@ -355,27 +339,33 @@

      Declaration

      Declaration

      Swift

      -
      public var width: Int
      +
      public static func ^= (a: inout BigUInt, b: BigUInt)
      -
      -

      Return Value

      -

      floor(log2(2 * self + 1))

      - -
    • +
    +
    +
    + +
    • @@ -383,30 +373,10 @@

      Return Value

      -

      The number of leading zero bits in the binary representation of this integer in base 2^Digit.width. -This is useful when you need to normalize a BigUInt such that the top bit of its most significant digit is 1.

      - +

      Create a big integer consisting of width uniformly distributed random bits.

      Note

      - 0 is considered to have zero leading zero bits. - -
      - -
      -

      Returns

      - A value in 0...(Digit.width - 1). - -
      - -
      -

      See also

      - width - -
      - -
      -

      Complexity

      - O(1) + This function uses arc4random_buf to generate random bits.
      @@ -415,17 +385,16 @@

      Return Value

      Declaration

      Swift

      -
      public var leadingZeroes: Int
      +
      public static func randomInteger(withMaximumWidth width: Int) -> BigUInt

      Return Value

      -

      A value in 0...(Digit.width - 1).

      - +

      A big integer less than 1 << width.

      @@ -433,9 +402,9 @@

      Return Value

    • @@ -443,23 +412,10 @@

      Return Value

      -

      The number of trailing zero bits in the binary representation of this integer.

      - +

      Create a big integer consisting of width-1 uniformly distributed random bits followed by a one bit.

      Note

      - 0 is considered to have zero trailing zero bits. - -
      - -
      -

      Returns

      - A value in 0...width. - -
      - -
      -

      Complexity

      - O(count) + This function uses arc4random_buf to generate random bits.
      @@ -468,17 +424,16 @@

      Return Value

      Declaration

      Swift

      -
      public var trailingZeroes: Int
      +
      public static func randomInteger(withExactWidth width: Int) -> BigUInt

      Return Value

      -

      A value in 0...width.

      - +

      A random big integer whose width is width.

      @@ -486,9 +441,9 @@

      Return Value

    • @@ -496,11 +451,10 @@

      Return Value

      -

      Return the ones’ complement of a.

      - -
      -

      Complexity

      - O(a.count) +

      Create a uniformly distributed random integer that’s less than the specified limit.

      +
      +

      Note

      + This function uses arc4random_buf to generate random bits.
      @@ -509,22 +463,37 @@

      Return Value

      Declaration

      Swift

      -
      public static prefix func ~(a: BigUInt) -> BigUInt
      +
      public static func randomInteger(lessThan limit: BigUInt) -> BigUInt
      +
      +

      Return Value

      +

      A random big integer that is less than limit.

      +
    • +
    +
    +
    + +
    • @@ -532,25 +501,19 @@

      Declaration

      -

      Calculate the bitwise OR of a and b and return the result.

      - -
      -

      Complexity

      - O(max(a.count, b.count)) - -
      +

      Returns true iff this integer passes the strong probable prime test for the specified base.

      Declaration

      Swift

      -
      public static func | (a: BigUInt, b: BigUInt) -> BigUInt
      +
      public func isStrongProbablePrime(_ base: BigUInt) -> Bool
      @@ -558,9 +521,9 @@

      Declaration

    • @@ -568,35 +531,43 @@

      Declaration

      -

      Calculate the bitwise AND of a and b and return the result.

      +

      Returns true if this integer is probably prime. Returns false if this integer is definitely not prime.

      -
      -

      Complexity

      - O(max(a.count, b.count)) +

      This function performs a probabilistic Miller-Rabin Primality Test, consisting of rounds iterations, +each calculating the strong probable prime test for a random base. The number of rounds is 10 by default, +but you may specify your own choice.

      -
      +

      To speed things up, the function checks if self is divisible by the first few prime numbers before +diving into (slower) Miller-Rabin testing.

      + +

      Also, when self is less than 82 bits wide, isPrime does a deterministic test that is guaranteed to +return a correct result.

      Declaration

      Swift

      -
      public static func & (a: BigUInt, b: BigUInt) -> BigUInt
      +
      public func isPrime(rounds: Int = 10) -> Bool
    • +
    +
    +
    +
    • - - - ^(_:_:) + + + bitWidth
      @@ -604,11 +575,10 @@

      Declaration

      -

      Calculate the bitwise OR of a and b and return the result.

      - +

      The minimum number of bits required to represent this integer in binary.

      Complexity

      - O(max(a.count, b.count)) + O(1)
      @@ -617,12 +587,16 @@

      Declaration

      Declaration

      Swift

      -
      public static func ^ (a: BigUInt, b: BigUInt) -> BigUInt
      +
      public var bitWidth: Int
      +
      +

      Return Value

      +

      floor(log2(2 * self + 1))

      +
      @@ -630,9 +604,9 @@

      Declaration

    • @@ -640,11 +614,21 @@

      Declaration

      -

      Calculate the bitwise OR of a and b, and store the result in a.

      +

      The number of leading zero bits in the binary representation of this integer in base 2^(Word.bitWidth). +This is useful when you need to normalize a BigUInt such that the top bit of its most significant word is 1.

      +
      +

      Note

      + 0 is considered to have zero leading zero bits. + +
      +
      +

      See also

      + width +

      Complexity

      - O(max(a.count, b.count)) + O(1)
      @@ -653,12 +637,16 @@

      Declaration

      Declaration

      Swift

      -
      public static func |= (a: inout BigUInt, b: BigUInt)
      +
      public var leadingZeroBitCount: Int
      +
      +

      Return Value

      +

      A value in 0...(Word.bitWidth - 1).

      +
      @@ -666,9 +654,9 @@

      Declaration

    • @@ -676,11 +664,15 @@

      Declaration

      -

      Calculate the bitwise AND of a and b, and store the result in a.

      +

      The number of trailing zero bits in the binary representation of this integer.

      +
      +

      Note

      + 0 is considered to have zero trailing zero bits. +

      Complexity

      - O(max(a.count, b.count)) + O(count)
      @@ -689,22 +681,30 @@

      Declaration

      Declaration

      Swift

      -
      public static func &= (a: inout BigUInt, b: BigUInt)
      +
      public var trailingZeroBitCount: Int
      +
      +

      Return Value

      +

      A value in 0...width.

      +
    • +
    +
    +
    +
    • - - - ^=(_:_:) + + + Words
      @@ -712,46 +712,29 @@

      Declaration

      -

      Calculate the bitwise XOR of a and b, and store the result in a.

      - -
      -

      Complexity

      - O(max(a.count, b.count)) - -
      - + + See more

      Declaration

      Swift

      -
      public static func ^= (a: inout BigUInt, b: BigUInt)
      +
      public struct Words: RandomAccessCollection
    • -
    -
    -
    - -
    • @@ -759,36 +742,18 @@

      Random Integers

      -

      Create a big integer consisting of width uniformly distributed random bits.

      - -
      -

      Returns

      - A big integer less than 1 << width. - -
      - -
      -

      Note

      - This function uses arc4random_buf to generate random bits. - -
      - +

      Declaration

      Swift

      -
      public static func randomInteger(withMaximumWidth width: Int) -> BigUInt
      +
      public var words: Words
      -
      -

      Return Value

      -

      A big integer less than 1 << width.

      - -
      @@ -796,9 +761,9 @@

      Return Value

    • @@ -806,46 +771,40 @@

      Return Value

      -

      Create a big integer consisting of width-1 uniformly distributed random bits followed by a one bit.

      - -
      -

      Returns

      - A random big integer whose width is width. - -
      - -
      -

      Note

      - This function uses arc4random_buf to generate random bits. - -
      +

      Undocumented

      Declaration

      Swift

      -
      public static func randomInteger(withExactWidth width: Int) -> BigUInt
      +
      public struct BigUInt: UnsignedInteger
      -
      -

      Return Value

      -

      A random big integer whose width is width.

      - -
    • +
    +
    +
    + +
    • @@ -853,36 +812,19 @@

      Return Value

      -

      Create a uniformly distributed random integer that’s less than the specified limit.

      - -
      -

      Returns

      - A random big integer that is less than limit. - -
      - -
      -

      Note

      - This function uses arc4random_buf to generate random bits. - -
      +

      Append this BigUInt to the specified hasher.

      Declaration

      Swift

      -
      public static func randomIntegerLessThan(_ limit: BigUInt) -> BigUInt
      +
      public func appendHashes(to hasher: inout SipHasher)
      -
      -

      Return Value

      -

      A random big integer that is less than limit.

      - -
      @@ -890,20 +832,13 @@

      Return Value

    -
    • @@ -911,19 +846,18 @@

      Primality Testing

      -

      Returns true iff this integer passes the strong probable prime test for the specified base.

      - +

      Declaration

      Swift

      -
      public func isStrongProbablePrime(_ base: BigUInt) -> Bool
      +
      public init?<T: BinaryFloatingPoint>(exactly source: T)
      @@ -931,9 +865,9 @@

      Declaration

    • @@ -941,29 +875,18 @@

      Declaration

      -

      Returns true if this integer is probably prime. Returns false if this integer is definitely not prime.

      - -

      This function performs a probabilistic Miller-Rabin Primality Test, consisting of rounds iterations, -each calculating the strong probable prime test for a random base. The number of rounds is 10 by default, -but you may specify your own choice.

      - -

      To speed things up, the function checks if self is divisible by the first few prime numbers before -diving into (slower) Miller-Rabin testing.

      - -

      Also, when self is less than 82 bits wide, isPrime does a deterministic test that is guaranteed to -return a correct result.

      - +

      Declaration

      Swift

      -
      public func isPrime(rounds: Int = 10) -> Bool
      +
      public init<T: BinaryFloatingPoint>(_ source: T)
      @@ -972,19 +895,19 @@

      Declaration

    • @@ -992,40 +915,40 @@

      Hashing

      -

      Append this BigUInt to the specified hasher.

      +

      Subtract other from this integer in place, and return a flag indicating if the operation caused an +arithmetic overflow. other is shifted shift digits to the left before being subtracted.

      +
      +

      Note

      + If the result indicates an overflow, then self becomes the twos’ complement of the absolute difference. + +
      +
      +

      Complexity

      + O(count) + +

      Declaration

      Swift

      -
      public func appendHashes(to hasher: inout SipHasher)
      +
      public mutating func subtractReportingOverflow(_ b: BigUInt, shiftedBy shift: Int = 0) -> Bool
    • -
    -
    -
    - -
    • @@ -1033,15 +956,13 @@

      Subtraction

      -

      Subtract a digit d from this integer in place, returning a flag that is true if the operation -caused an arithmetic overflow. d is shifted shift digits to the left before being subtracted.

      - +

      Subtract other from this integer, returning the difference and a flag indicating arithmetic overflow. +other is shifted shift digits to the left before being subtracted.

      Note

      - If the result is true, then self becomes the two’s complement of the absolute difference. + If overflow is true, then the result value is the twos’ complement of the absolute value of the difference.
      -

      Complexity

      O(count) @@ -1053,12 +974,12 @@

      Subtraction

      Declaration

      Swift

      -
      public mutating func subtractDigitWithOverflow(_ d: Digit, atPosition shift: Int = 0) -> Bool
      +
      public func subtractingReportingOverflow(_ other: BigUInt, shiftedBy shift: Int) -> (partialValue: BigUInt, overflow: Bool)
      @@ -1066,9 +987,9 @@

      Declaration

    • @@ -1076,15 +997,12 @@

      Declaration

      -

      Subtract a digit d from this integer, returning the difference and a flag that is true if the operation -caused an arithmetic overflow. d is shifted shift digits to the left before being subtracted.

      - +

      Subtracts other from self, returning the result and a flag indicating arithmetic overflow.

      Note

      - If overflow is true, then the returned value is the two’s complement of the absolute difference. + When the operation overflows, then partialValue is the twos’ complement of the absolute value of the difference.
      -

      Complexity

      O(count) @@ -1096,12 +1014,12 @@

      Declaration

      Declaration

      Swift

      -
      public func subtractingDigitWithOverflow(_ d: Digit, atPosition shift: Int = 0) -> (BigUInt, overflow: Bool)
      +
      public func subtractingReportingOverflow(_ other: BigUInt) -> (partialValue: BigUInt, overflow: Bool)
      @@ -1109,9 +1027,9 @@

      Declaration

    • @@ -1119,15 +1037,13 @@

      Declaration

      -

      Subtract a digit d from this integer in place. -d is shifted shift digits to the left before being subtracted.

      - +

      Subtract other from this integer in place. +other is shifted shift digits to the left before being subtracted.

      Requires

      - self >= d * 2^shift + self >= other * 2^shift
      -

      Complexity

      O(count) @@ -1139,12 +1055,12 @@

      Declaration

      Declaration

      Swift

      -
      public mutating func subtractDigit(_ d: Digit, atPosition shift: Int = 0)
      +
      public mutating func subtract(_ other: BigUInt, shiftedBy shift: Int = 0)
      @@ -1152,9 +1068,9 @@

      Declaration

    • @@ -1162,15 +1078,13 @@

      Declaration

      -

      Subtract a digit d from this integer and return the result. -d is shifted shift digits to the left before being subtracted.

      - +

      Subtract b from this integer, and return the difference. +b is shifted shift digits to the left before being subtracted.

      Requires

      - self >= d * 2^shift + self >= b * 2^shift
      -

      Complexity

      O(count) @@ -1182,12 +1096,12 @@

      Declaration

      Declaration

      Swift

      -
      public func subtractingDigit(_ d: Digit, atPosition shift: Int = 0) -> BigUInt
      +
      public func subtracting(_ other: BigUInt, shiftedBy shift: Int = 0) -> BigUInt
      @@ -1195,9 +1109,9 @@

      Declaration

    • @@ -1205,15 +1119,12 @@

      Declaration

      -

      Subtract b from this integer in place, and return true iff the operation caused an -arithmetic overflow. b is shifted shift digits to the left before being subtracted.

      - -
      -

      Note

      - If the result is true, then self becomes the twos’ complement of the absolute difference. +

      Decrement this integer by one.

      +
      +

      Requires

      + !isZero
      -

      Complexity

      O(count) @@ -1225,12 +1136,12 @@

      Declaration

      Declaration

      Swift

      -
      public mutating func subtractWithOverflow(_ b: BigUInt, atPosition shift: Int = 0) -> Bool
      +
      public mutating func decrement(shiftedBy shift: Int = 0)
      @@ -1238,9 +1149,9 @@

      Declaration

    • @@ -1248,18 +1159,15 @@

      Declaration

      -

      Subtract b from this integer, returning the difference and a flag that is true if the operation caused an -arithmetic overflow. b is shifted shift digits to the left before being subtracted.

      - -
      -

      Note

      - If overflow is true, then the result value is the twos’ complement of the absolute value of the difference. +

      Subtract b from a and return the result.

      +
      +

      Requires

      + a >= b
      -

      Complexity

      - O(count) + O(a.count)
      @@ -1268,12 +1176,12 @@

      Declaration

      Declaration

      Swift

      -
      public func subtractingWithOverflow(_ b: BigUInt, atPosition shift: Int = 0) -> (BigUInt, overflow: Bool)
      +
      public static func -(a: BigUInt, b: BigUInt) -> BigUInt
      @@ -1281,9 +1189,9 @@

      Declaration

    • @@ -1291,18 +1199,15 @@

      Declaration

      -

      Subtract b from this integer in place. -b is shifted shift digits to the left before being subtracted.

      - +

      Subtract b from a and store the result in a.

      Requires

      - self >= b * 2^shift + a >= b
      -

      Complexity

      - O(count) + O(a.count)
      @@ -1311,22 +1216,33 @@

      Declaration

      Declaration

      Swift

      -
      public mutating func subtract(_ b: BigUInt, atPosition shift: Int = 0)
      +
      public static func -=(a: inout BigUInt, b: BigUInt)
    • +
    +
    +
    + +
    • @@ -1334,18 +1250,15 @@

      Declaration

      -

      Subtract b from this integer, and return the difference. -b is shifted shift digits to the left before being subtracted.

      - +

      Divide this integer by y and return the resulting quotient and remainder.

      Requires

      - self >= b * 2^shift + y > 0
      -

      Complexity

      - O(count) + O(count^2)
      @@ -1354,12 +1267,16 @@

      Declaration

      Declaration

      Swift

      -
      public func subtracting(_ b: BigUInt, atPosition shift: Int = 0) -> BigUInt
      +
      public func quotientAndRemainder(dividingBy y: BigUInt) -> (quotient: BigUInt, remainder: BigUInt)
      +
      +

      Return Value

      +

      (quotient, remainder) where quotient = floor(self/y), remainder = self - quotient * y

      +
      @@ -1367,9 +1284,9 @@

      Declaration

    • @@ -1377,17 +1294,10 @@

      Declaration

      -

      Decrement this integer by one.

      - -
      -

      Requires

      - !isZero - -
      - -
      -

      Complexity

      - O(count) +

      Divide x by y and return the quotient.

      +
      +

      Note

      + Use divided(by:) if you also need the remainder.
      @@ -1396,12 +1306,12 @@

      Declaration

      Declaration

      Swift

      -
      public mutating func decrement(atPosition shift: Int = 0)
      +
      public static func /(x: BigUInt, y: BigUInt) -> BigUInt
      @@ -1409,9 +1319,9 @@

      Declaration

    • - - - -(_:_:) + + + %(_:_:)
      @@ -1419,17 +1329,10 @@

      Declaration

      -

      Subtract b from a and return the result.

      - -
      -

      Requires

      - a >= b - -
      - -
      -

      Complexity

      - O(a.count) +

      Divide x by y and return the remainder.

      +
      +

      Note

      + Use divided(by:) if you also need the remainder.
      @@ -1438,12 +1341,12 @@

      Declaration

      Declaration

      Swift

      -
      public static func -(a: BigUInt, b: BigUInt) -> BigUInt
      +
      public static func %(x: BigUInt, y: BigUInt) -> BigUInt
      @@ -1451,9 +1354,9 @@

      Declaration

    • - - - -=(_:_:) + + + /=(_:_:)
      @@ -1461,17 +1364,10 @@

      Declaration

      -

      Subtract b from a and store the result in a.

      - -
      -

      Requires

      - a >= b - -
      - -
      -

      Complexity

      - O(a.count) +

      Divide x by y and store the quotient in x.

      +
      +

      Note

      + Use divided(by:) if you also need the remainder.
      @@ -1480,12 +1376,12 @@

      Declaration

      Declaration

      Swift

      -
      public static func -=(a: inout BigUInt, b: BigUInt)
      +
      public static func /=(x: inout BigUInt, y: BigUInt)
      @@ -1493,9 +1389,9 @@

      Declaration

    • @@ -1503,20 +1399,24 @@

      Declaration

      -

      Subtracts rhs from lhs, returning the result and a Bool that is true iff the operation caused an arithmetic overflow. -Overflow is returned if and only if lhs is less than rhs, in which case the result is the twos’ complement of the absolute difference.

      +

      Divide x by y and store the remainder in x.

      +
      +

      Note

      + Use divided(by:) if you also need the remainder. + +

      Declaration

      Swift

      -
      public static func subtractWithOverflow(_ lhs: BigUInt, _ rhs: BigUInt) -> (BigUInt, overflow: Bool)
      +
      public static func %=(x: inout BigUInt, y: BigUInt)
      @@ -1524,20 +1424,13 @@

      Declaration

    -
    • @@ -1545,31 +1438,18 @@

      Division

      -

      Divide this integer by the digit y, leaving the quotient in its place and returning the remainder.

      - -
      -

      Requires

      - y > 0 - -
      - -
      -

      Complexity

      - O(count) - -
      - +

      Declaration

      Swift

      -
      public mutating func divide(byDigit y: Digit) -> Digit
      +
      public init?<T: BinaryInteger>(exactly source: T)
      @@ -1577,9 +1457,9 @@

      Declaration

    • @@ -1587,167 +1467,18 @@

      Declaration

      -

      Divide this integer by the digit y and return the resulting quotient and remainder.

      - -
      -

      Requires

      - y > 0 - -
      - -
      -

      Returns

      - (quotient, remainder) where quotient = floor(x/y), remainder = x - quotient * y - -
      - -
      -

      Complexity

      - O(x.count) - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func divided(byDigit y: Digit) -> (quotient: BigUInt, remainder: Digit)
      - -
      -
      -
      -

      Return Value

      -

      (quotient, remainder) where quotient = floor(x/y), remainder = x - quotient * y

      - -
      - -
      -
      -
    • -
    • -
      - - - - divided(by:) - -
      -
      -
      -
      -
      -
      -

      Divide this integer by y and return the resulting quotient and remainder.

      - -
      -

      Requires

      - y > 0 - -
      - -
      -

      Returns

      - (quotient, remainder) where quotient = floor(self/y), remainder = self - quotient * y - -
      - -
      -

      Complexity

      - O(count^2) - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func divided(by y: BigUInt) -> (quotient: BigUInt, remainder: BigUInt)
      - -
      -
      -
      -

      Return Value

      -

      (quotient, remainder) where quotient = floor(self/y), remainder = self - quotient * y

      - -
      - -
      -
      -
    • -
    • -
      - - - - /(_:_:) - -
      -
      -
      -
      -
      -
      -

      Divide x by y and return the quotient.

      - -
      -

      Note

      - Use divided(by:) if you also need the remainder. - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public static func /(x: BigUInt, y: BigUInt) -> BigUInt
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - %(_:_:) - -
      -
      -
      -
      -
      -
      -

      Divide x by y and return the remainder.

      - -
      -

      Note

      - Use divided(by:) if you also need the remainder. - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public static func %(x: BigUInt, y: BigUInt) -> BigUInt
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init<T: BinaryInteger>(_ source: T)
      @@ -1755,81 +1486,9 @@

      Declaration

    • - - - /=(_:_:) - -
      -
      -
      -
      -
      -
      -

      Divide x by y and store the quotient in x.

      - -
      -

      Note

      - Use divided(by:) if you also need the remainder. - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public static func /=(x: inout BigUInt, y: BigUInt)
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - %=(_:_:) - -
      -
      -
      -
      -
      -
      -

      Divide x by y and store the remainder in x.

      - -
      -

      Note

      - Use divided(by:) if you also need the remainder. - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public static func %=(x: inout BigUInt, y: BigUInt)
      - -
      -
      - -
      -
      -
    • -
    • -
      @@ -1837,19 +1496,18 @@

      Declaration

      -

      Divide lhs by rhs, returning the quotient. This function never results in an overflow.

      - +

      Declaration

      Swift

      -
      public static func divideWithOverflow(_ lhs: BigUInt, _ rhs: BigUInt) -> (BigUInt, overflow: Bool)
      +
      public init<T: BinaryInteger>(truncatingIfNeeded source: T)
      @@ -1857,9 +1515,9 @@

      Declaration

    • @@ -1867,19 +1525,18 @@

      Declaration

      -

      Divide lhs by rhs, returning the remainder. This function never results in an overflow.

      - +

      Declaration

      Swift

      -
      public static func remainderWithOverflow(_ lhs: BigUInt, _ rhs: BigUInt) -> (BigUInt, overflow: Bool)
      +
      public init<T: BinaryInteger>(clamping source: T)
      @@ -1887,20 +1544,13 @@

      Declaration

    -
    @@ -1928,20 +1578,13 @@

    Declaration

    -
    • @@ -1949,20 +1592,18 @@

      Init from String literals

      -

      Initialize a new big integer from a Unicode scalar. -The scalar must represent a decimal digit.

      - +

      Declaration

      Swift

      -
      public init(unicodeScalarLiteral value: UnicodeScalar)
      +
      public static var isSigned: Bool
      @@ -1970,9 +1611,9 @@

      Declaration

    • @@ -1980,51 +1621,23 @@

      Declaration

      -

      Initialize a new big integer from an extended grapheme cluster. -The cluster must consist of a decimal digit.

      +

      Returns -1 if this value is negative and 1 if it’s positive; otherwise, 0.

      Declaration

      Swift

      -
      public init(extendedGraphemeClusterLiteral value: String)
      +
      public func signum() -> BigUInt
      - -
      -
      -
    • -
    • -
      - - - - init(stringLiteral:) - -
      -
      -
      -
      -
      -
      -

      Initialize a new big integer from a decimal number represented by a string literal of arbitrary length. -The string must contain only decimal digits.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public init(stringLiteral value: StringLiteralType)
      - -
      +
      +

      Return Value

      +

      The sign of this number, expressed as an integer of the same type.

      @@ -2032,13 +1645,20 @@

      Declaration

    +
    • @@ -2046,576 +1666,63 @@

      Declaration

      -

      Explicitly convert to IntMax, trapping on overflow.

      +

      Get or set a digit at a given index.

      +
      +

      Note

      + Unlike a normal collection, it is OK for the index to be greater than or equal to endIndex. +The subscripting getter returns zero for indexes beyond the most significant digit. +Setting these extended digits automatically appends new elements to the underlying digit array. -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func toIntMax() -> IntMax
      +
      +
      +

      Requires

      + index >= 0 -
      -
      - -
      -
      -
    • -
    -
    -
    - -
      -
    • -
      - - - - Iterator - -
      -
      -
      -
      -
      -
      -

      The type representing the iteration interface for the digits in a big integer.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public typealias Iterator = DigitIterator<Digit>
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - Indices - -
      -
      -
      -
      -
      -
      -

      The type representing valid indices for subscripting the collection.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public typealias Indices = CountableRange<Int>
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - SubSequence - -
      -
      -
      -
      -
      -
      -

      Big integers can be contiguous digit subranges of another big integer.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public typealias SubSequence = BigUInt
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - subscript(_:) - -
      -
      -
      -
      -
      -
      -

      Get or set a digit at a given index.

      - -
      -

      Note

      - Unlike a normal collection, it is OK for the index to be greater than or equal to endIndex. -The subscripting getter returns zero for indexes beyond the most significant digit. -Setting these extended digits automatically appends new elements to the underlying digit array. - -
      - -
      -

      Requires

      - index >= 0 - -
      - -
      -

      Complexity

      - The getter is O(1). The setter is O(1) if the conditions below are true; otherwise it’s O(count). - -
        -
      • The integer’s storage is not shared with another integer
      • -
      • The integer wasn’t created as a slice of another integer
      • -
      • index < count
      • -
      - -
      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public subscript(index: Int) -> Digit
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - subscript(_:) - -
      -
      -
      -
      -
      -
      -

      Returns an integer built from the digits of this integer in the given range.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public subscript(bounds: Range<Int>) -> BigUInt
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - IndexDistance - -
      -
      -
      -
      -
      -
      -

      The type representing the number of steps between two indices.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public typealias IndexDistance = Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - Index - -
      -
      -
      -
      -
      -
      -

      Big integers implement Collection to provide access to their big digits, indexed by integers; a zero index refers to the least significant digit.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public typealias Index = Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - indices - -
      -
      -
      -
      -
      -
      -

      Big integers can be contiguous digit subranges of another big integer.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public var indices: Indices
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - startIndex - -
      -
      -
      -
      -
      -
      -

      The index of the first digit, starting from the least significant. (This is always zero.)

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public var startIndex: Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - endIndex - -
      -
      -
      -
      -
      -
      -

      The index of the digit after the most significant digit in this integer.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public var endIndex: Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - count - -
      -
      -
      -
      -
      -
      -

      The number of digits in this integer, excluding leading zero digits.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public var count: Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - makeIterator() - -
      -
      -
      -
      -
      -
      -

      Return a generator over the digits of this integer, starting at the least significant digit.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func makeIterator() -> DigitIterator<Digit>
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - index(after:) - -
      -
      -
      -
      -
      -
      -

      Returns the position immediately after the given index.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func index(after i: Int) -> Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - index(before:) - -
      -
      -
      -
      -
      -
      -

      Returns the position immediately before the given index.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func index(before i: Int) -> Int
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - formIndex(after:) - -
      -
      -
      -
      -
      -
      -

      Replaces the given index with its successor.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func formIndex(after i: inout Int)
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - formIndex(before:) - -
      -
      -
      -
      -
      -
      -

      Replaces the given index with its predecessor.

      - -
      -
      -

      Declaration

      -
      -

      Swift

      -
      public func formIndex(before i: inout Int)
      - -
      -
      - -
      -
      -
    • -
    • -
      - - - - index(_:offsetBy:) - -
      -
      -
      -
      -
      -
      -

      Returns an index that is the specified distance from the given index.

      +
      +
      +

      Complexity

      + The getter is O(1). The setter is O(1) if the conditions below are true; otherwise it’s O(count). + +
        +
      • The integer’s storage is not shared with another integer
      • +
      • The integer wasn’t created as a slice of another integer
      • +
      • index < count
      • +
      + +

      Declaration

      Swift

      -
      public func index(_ i: Int, offsetBy n: Int) -> Int
      +
      subscript(_ index: Int) -> Word
  • + + +
    + + -
    -
    - +
    +
    + +
    -
    - +
    +
    +
    + -
    -
    - -
    - Show on GitHub + Show on GitHub
    @@ -3064,9 +2143,9 @@

    Declaration

  • - + - serialize() + serialize()
    @@ -3074,7 +2153,7 @@

    Declaration

    -

    Return an NSData instance that contains the base-256 representation of this integer, in network (big-endian) byte order.

    +

    Return a Data value that contains the base-256 representation of this integer, in network (big-endian) byte order.

    @@ -3086,7 +2165,7 @@

    Declaration

    @@ -3105,9 +2184,9 @@

    Multiplication

  • - - - multiply(byDigit:) + + + multiply(byWord:)
    @@ -3115,8 +2194,7 @@

    Multiplication

    -

    Multiply this big integer by a single digit, and store the result in place of the original big integer.

    - +

    Multiply this big integer by a single word, and store the result in place of the original big integer.

    Complexity

    O(count) @@ -3128,12 +2206,12 @@

    Multiplication

    Declaration

    Swift

    -
    public mutating func multiply(byDigit y: Digit)
    +
    public mutating func multiply(byWord y: Word)
    @@ -3141,9 +2219,9 @@

    Declaration

  • - - - multiplied(byDigit:) + + + multiplied(byWord:)
    @@ -3151,8 +2229,7 @@

    Declaration

    -

    Multiply this big integer by a single digit, and return the result.

    - +

    Multiply this big integer by a single Word, and return the result.

    Complexity

    O(count) @@ -3164,12 +2241,12 @@

    Declaration

    Declaration

    Swift

    -
    public func multiplied(byDigit y: Digit) -> BigUInt
    +
    public func multiplied(byWord y: Word) -> BigUInt
    @@ -3177,9 +2254,9 @@

    Declaration

  • - - - multiplyAndAdd(_:_:atPosition:) + + + multiplyAndAdd(_:_:shiftedBy:)
    @@ -3187,21 +2264,13 @@

    Declaration

    -

    Multiply x by y, and add the result to this integer, optionally shifted shift digits to the left.

    - +

    Multiply x by y, and add the result to this integer, optionally shifted shift words to the left.

    Note

    This is the fused multiply/shift/add operation; it is more efficient than doing the components individually. (The fused operation doesn’t need to allocate space for temporary big integers.)
    - -
    -

    Returns

    - self is set to self + (x * y) << (shift * 2^Digit.width) - -
    -

    Complexity

    O(count) @@ -3213,17 +2282,16 @@

    Declaration

    Declaration

    Swift

    -
    public mutating func multiplyAndAdd(_ x: BigUInt, _ y: Digit, atPosition shift: Int = 0)
    +
    public mutating func multiplyAndAdd(_ x: BigUInt, _ y: Word, shiftedBy shift: Int = 0)

    Return Value

    -

    self is set to self + (x * y) << (shift * 2^Digit.width)

    - +

    self is set to self + (x * y) << (shift * 2^Word.bitWidth)

    @@ -3231,9 +2299,9 @@

    Return Value

  • - + - multiplied(by:) + multiplied(by:)
    @@ -3242,14 +2310,12 @@

    Return Value

    Multiply this integer by y and return the result.

    -

    Note

    This uses the naive O(n^2) multiplication algorithm unless both arguments have more than -BigUInt.directMultiplicationLimit digits. +BigUInt.directMultiplicationLimit words.
    -

    Complexity

    O(n^log2(3)) @@ -3266,7 +2332,7 @@

    Declaration

    @@ -3274,9 +2340,9 @@

    Declaration

  • - + - directMultiplicationLimit + directMultiplicationLimit
    @@ -3284,7 +2350,7 @@

    Declaration

    -

    Multiplication switches to an asymptotically better recursive algorithm when arguments have more digits than this limit.

    +

    Multiplication switches to an asymptotically better recursive algorithm when arguments have more words than this limit.

    @@ -3296,7 +2362,7 @@

    Declaration

    @@ -3304,9 +2370,9 @@

    Declaration

  • - + - *(_:_:) + *(_:_:)
    @@ -3315,14 +2381,12 @@

    Declaration

    Multiply a by b and return the result.

    -

    Note

    This uses the naive O(n^2) multiplication algorithm unless both arguments have more than -BigUInt.directMultiplicationLimit digits. +BigUInt.directMultiplicationLimit words.
    -

    Complexity

    O(n^log2(3)) @@ -3334,12 +2398,76 @@

    Declaration

    Declaration

    Swift

    -
    public static func *(x: BigUInt, y: BigUInt) -> BigUInt
    +
    public static func *(x: BigUInt, y: BigUInt) -> BigUInt
    + +
    +
    + + +
    +
  • +
  • +
    + + + + *=(_:_:) + +
    +
    +
    +
    +
    +
    +

    Multiply a by b and store the result in a.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func *=(a: inout BigUInt, b: BigUInt)
    + +
    +
    + +
    +
    +
  • + + +
    +
    -
    - +
    +
    + +
    @@ -3950,9 +2917,9 @@

    Declaration

  • - - - increment(atPosition:) + + + power(_:modulus:)
    @@ -3960,12 +2927,12 @@

    Declaration

    -

    Increment this integer by one. If shift is non-zero, it selects -the digit that is to be incremented.

    +

    Returns the remainder of this integer raised to the power exponent in modulo arithmetic under modulus.

    +

    Uses the right-to-left binary method.

    Complexity

    - O(count + shift) + O(exponent.count * modulus.count^log2(3)) or somesuch
    @@ -3974,22 +2941,33 @@

    Declaration

    Declaration

    Swift

    -
    public mutating func increment(atPosition shift: Int = 0)
    +
    public func power(_ exponent: BigUInt, modulus: BigUInt) -> BigUInt
  • + + +
    + +
    diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigUInt/Words.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigUInt/Words.html new file mode 100644 index 0000000..b0dda68 --- /dev/null +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/Structs/BigUInt/Words.html @@ -0,0 +1,182 @@ + + + + Words Structure Reference + + + + + + + + + + + + + + + + +
    +

    + + BigInt Docs + + (92% documented) +

    + +

    +

    + +
    +

    + +

    + + + View on GitHub + +

    + +

    + + + Install in Dash + +

    +
    + + + +
    + +
    + +
    +
    +

    Words

    +
    +
    +
    public struct Words: RandomAccessCollection
    + +
    +
    + +
    +
    + +
    +
    +
    +
      +
    • +
      + + + + startIndex + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var startIndex: Int
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + endIndex + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var endIndex: Int
      + +
      +
      + +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + + diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/BigInt.docset/Contents/Resources/Documents/css/jazzy.css index 75b5433..c83db5b 100644 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/css/jazzy.css +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/css/jazzy.css @@ -327,3 +327,42 @@ html.dash .header, html.dash .breadcrumbs, html.dash .navigation { display: none; } html.dash .height-container { display: block; } + +form[role=search] input { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 0 10px; + margin: 0; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } +form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fbfbfb; + color: #333; + border: 1px solid #ddd; } +form[role=search] .tt-highlight { + font-weight: bold; } +form[role=search] .tt-suggestion { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } +form[role=search] .tt-suggestion:hover, +form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } +form[role=search] .tt-suggestion:hover .doc-parent-name, +form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/img/spinner.gif b/docs/docsets/BigInt.docset/Contents/Resources/Documents/img/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3038d0a42c55b1a07caecb7c7a6cbac982ec09d GIT binary patch literal 1849 zcmb8wZBSF$83*voz31lM+?V7Kkqwb`LI|3K#DupH#kDs91c6du6?SMB!bsTr6|ge_{#vAVj^!DyNA-l zJ&$jDFNv;BTZXX@Qk-7+S5ErF>mkOcZ@lQv>F1VyCEMe2Ud@f<|L%#&QJi${E`2lR zqKFaW2Y$aTRxUY&ae$IHsN;Z;rdZ%CjYLTv!tMi234j-ON=CnvK-1QU|MG$YErn{gHZ@0Q6&?xSyply?S$EVNXH;gp?S5kV2-)$ga^gw`(f4Mm_Y(`RbgRkQTHF2@zL}dCiLk$RoZIc{xZL z_J*d5)Kb;#oKCFyfL*NGSs?y;e(QKvPJe1#G)h5*6E(?L9$nt?UaQJfP^$GDL0PU; z?r}C|);JQ4HES3w5VMlY7x6xfJAzDKlHE~>x;D`Fa=WygYot{pfFehH69o9pK|72W zwC6?t^AnATIJa=kewn=ep?Nk(aZ*pZo}51`S=^)jPRb`~l^VE}08>P3OJtQlXx1K8 z8Q}_u=F*fS;=k=?(fIv#+%811NTx8^}rHwvH%LbYmpFl9p1A{Idh@2x$ zuVp7)VD9}Uc(*(C**!QOdS(6B)$5^Tq5p3q*7un&_Z-NKEiEYg$D{Uq&sa>wj|za5 zJ6M~p)z+E6*X${8j6Ci+sqZ}zxeCAo0gZmZuhl+)Q%1U$Br_`NXcA-3yBdYMha+{o z{?q0Q(kaR2n`M29{!pwpgX6+CPQEgIO%x*0#!TC=c-ZPSkLO>OcmQUao5%-3w)U`F zRz?uGCEKQDh!TQPDmyd;iDX$TkMIe)%61q51Y2b-ie4r00!csilXgKL$txqj|6D(# z@(#!nQ}3R1JGeB3B5Tuqdvyg@*!-bq`9`pmasNGvy9^*+cd1Y*g>HK#rl7i79QQAG zl4SL_wW@WY1d+F?j0gFInGhsRrqvV3SKl{oqW+;9!fu|u@J)h4WM!0Cu02l@p60b#5M9c{dKh=_eRw~yl zWT0gw8RePzf%i8X&twiB|LF0bI@CYE{x1PI;Ylr4RJzU#Zc0j!c07g&q7=_eSd(sH z9VKChd?}^52IKcMqolAWiQH;HSp1Ploa$t zQhg|2sK;%Eb!By`)j9G1w?>`Wt6IK3gB}~uoue(MlRiIoZ#d{pgJZ8b{^{HO8)@%= zX)og3`*D5v1g;*Lz8@Sm(Q|&}PUytlb@Q_dzKFOzKK!Z_&?GO4+JO-)iPH=fs{(`& zZ9{oNn~LUZaeN!>i9p*0N^sHye8nw4xSi!REaP@@^Jy66|)Y9_AFoLlrlkg(42 zVq2J??I(+1*BcSKsTyO7LCho{8tVQm1b>*GQ*H~Mn71Lhy`alw%;D@CU^0)5Ng{cHz@LS7QZ o8uGHYt7)tmZjae5ge5$b`e_;HIklOseoIbqeod19BU-8d00{dbSpWb4 literal 0 HcmV?d00001 diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/index.html b/docs/docsets/BigInt.docset/Contents/Resources/Documents/index.html index a80a19b..15361d3 100644 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/index.html @@ -8,6 +8,9 @@ + + + @@ -19,18 +22,24 @@ BigInt Docs - (100% documented) + (92% documented) +

    + +

    +

    + +

    - + View on GitHub

    - + Install in Dash @@ -49,38 +58,31 @@

    - - @@ -91,7 +93,7 @@
    -

    BigInt

    +

    BigInt

    -

    Swift 3 -Documented +

    Swift 3 License Platform

    -

    Build Status -Code Coverage +

    Build Status +Code Coverage Carthage compatible Version

    -

    Overview

    +

    Overview

    This repository provides integer types of arbitrary width implemented in 100% pure Swift. The underlying representation is in base 2^64, using Array<UInt64>.

    @@ -131,7 +132,7 @@ you don’t want to add The GNU Multiple Precision Arithmetic Library as a dependency.

    -

    Two big integer types are included: BigUInt and BigInt, +

    Two big integer types are included: BigUInt and BigInt, the latter being the signed variant. Both of these are Swift structs with copy-on-write value semantics, and they can be used much like any other integer type.

    @@ -140,43 +141,43 @@ big integers, including

    The implementations are intended to be reasonably efficient, but they are unlikely to be @@ -185,16 +186,16 @@

    The library has 100% unit test coverage. Sadly this does not imply that there are no bugs in it.

    -

    API Documentation

    +

    API Documentation

    -

    Generated API docs are available at http://lorentey.github.io/BigInt/.

    -

    License

    +

    Generated API docs are available at http://attaswift.github.io/BigInt/.

    +

    License

    -

    BigInt can be used, distributed and modified under the MIT license.

    -

    Requirements and Integration

    +

    BigInt can be used, distributed and modified under the MIT license.

    +

    Requirements and Integration

    -

    BigInt 2.1.0 requires Swift 3.0.1. (The last version with support for Swift 3.0.0 was BigInt 2.0.1. -The last version with support for Swift 2.2 was BigInt 1.3.0.)

    +

    BigInt 3.0.0 requires Swift 4. (The last version with support for Swift 3.x was BigInt 2.1.0. +The last version with support for Swift 2 was BigInt 1.3.0.)

    BigInt deploys to macOS 10.10, iOS 9, watchOS 2 and tvOS 9. It has been tested on the latest OS releases only—however, as the module uses very few platform-provided APIs, @@ -209,37 +210,37 @@

  • Swift Package Manager: Although the Package Manager is still in its infancy, BigInt provides experimental support for it. Add this to the dependency section of your Package.swift manifest:

    -
    .Package(url: "https://github.com/lorentey/BigInt.git", majorVersion: 2, minorVersion: 1)
    +
    .Package(url: "https://github.com/attaswift/BigInt.git", from: "3.0.0")
     
  • CocoaPods: Put this in your Podfile:

    -
    pod 'BigInt', '~> 2.1'
    +
    pod 'BigInt', '~> 3.0'
     
  • Carthage: Put this in your Cartfile:

    -
    github "lorentey/BigInt" ~> 2.1
    +
    github "attaswift/BigInt" ~> 3.0
     
  • -

    Implementation notes

    +

    Implementation notes

    -

    BigUInt is a MutableCollectionType of its 64-bit digits, with the least significant -digit at index 0. As a convenience, BigUInt allows you to subscript it with indexes at -or above its count. The subscript operator returns 0 for out-of-bound gets and +

    BigUInt is a MutableCollectionType of its 64-bit digits, with the least significant +digit at index 0. As a convenience, BigUInt allows you to subscript it with indexes at +or above its count. The subscript operator returns 0 for out-of-bound gets and automatically extends the array on out-of-bound sets. This makes memory management simpler.

    -

    BigInt is just a tiny wrapper around a BigUInt absolute value and a -sign bit, both of which are accessible as public read-write properties.

    -

    Full-width multiplication and division primitives

    +

    BigInt is just a tiny wrapper around a BigUInt absolute value and a +sign bit, both of which are accessible as public read-write properties.

    +

    Full-width multiplication and division primitives

    I haven’t found (64,64)->128 multiplication or (128,64)->64 division operations -in Swift, so the module has generic implementations for them in terms of the standard +in Swift, so the module has generic implementations for them in terms of the standard single-width * and / operators. I suspect there are LLVM intrinsics for full-width arithmetics that are probably accessible somehow, though. (Let me know if you know how!)

    This sounds slow, but 64-bit digits are still considerably faster than 32-bit, even though the latter can use direct 64-bit arithmetic to implement these primitives.

    -

    Why is there no generic BigInt<Digit> type?

    +

    Why is there no generic BigInt<Digit> type?

    -

    The types provided by BigInt are not parametric—this is very much intentional, as +

    The types provided by BigInt are not parametric—this is very much intentional, as Swift generics cost us dearly at runtime in this use case. In every approach I tried, making arbitrary-precision arithmetic operations work with a generic Digit type parameter resulted in code that was literally ten times slower. If you can make the algorithms generic @@ -249,14 +250,14 @@ implementations for arbitrary-width arithmetic operations. (Polynomial division and decimal bases are two examples.) The library already implements double-digit multiplication and division as extension methods on a protocol with an associated type requirement; this has not measurably affected -performance. Unfortunately, the same is not true for BigUInt’s methods.

    +performance. Unfortunately, the same is not true for BigUInt‘s methods.

    Of course, as a last resort, we could just duplicate the code to create a separate generic variant that was slower but more flexible.

    -

    Calculation Samples

    -

    Obligatory Factorial Demo

    +

    Calculation Samples

    +

    Obligatory Factorial Demo

    -

    It is easy to use BigInt to calculate the factorial function for any integer:

    +

    It is easy to use BigInt to calculate the factorial function for any integer:

    import BigInt
     
     func factorial(_ n: Int) -> BigInt {
    @@ -307,9 +308,9 @@
     

    Well, I guess that’s all right, but it’s not very interesting. Let’s try something more useful.

    -

    RSA Cryptography

    +

    RSA Cryptography

    -

    The BigInt module provides all necessary parts to implement an (overly) +

    The BigInt module provides all necessary parts to implement an (overly) simple RSA cryptography system.

    Let’s start with a simple function that generates a random n-bit prime. The module @@ -376,7 +377,7 @@

    Let’s try out our new keypair by converting a string into UTF-8, interpreting the resulting binary representation as a big integer, and encrypting it with the -public key. BigUInt has an initializer that takes an NSData, so this is pretty +public key. BigUInt has an initializer that takes an NSData, so this is pretty easy to do:

    let secret: BigUInt = BigUInt("Arbitrary precision arithmetic is fun!".dataUsingEncoding(NSUTF8StringEncoding)!)
     ==> 83323446846105976078466731524728681905293067701804838925389198929123912971229457
    @@ -407,9 +408,9 @@
     

    Yay! This is truly terrific, but please don’t use this example code in an actual cryptography system. RSA has lots of subtle (and some not so subtle) complications that we ignored to keep this example short.

    -

    Calculating the Digits of π

    +

    Calculating the Digits of π

    -

    Another fun activity to try with BigInts is to generate the digits of π. +

    Another fun activity to try with BigInts is to generate the digits of π. Let’s try implementing Jeremy Gibbon’s spigot algorithm. This is a rather slow algorithm as π-generators go, but it makes up for it with its grooviness factor: it’s remarkably short, it only uses (big) integer arithmetic, and every iteration @@ -469,8 +470,8 @@

    diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/js/jazzy.js b/docs/docsets/BigInt.docset/Contents/Resources/Documents/js/jazzy.js index e2b491d..009c80d 100755 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/js/jazzy.js +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/js/jazzy.js @@ -35,3 +35,9 @@ $(".token").click(function(event) { } event.preventDefault(); }); + +// Dumb down quotes within code blocks that delimit strings instead of quotations +// https://github.com/realm/jazzy/issues/714 +$("code q").replaceWith(function () { + return ["\"", $(this).contents(), "\""]; +}); diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/js/jazzy.search.js b/docs/docsets/BigInt.docset/Contents/Resources/Documents/js/jazzy.search.js new file mode 100644 index 0000000..54be83c --- /dev/null +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/js/jazzy.search.js @@ -0,0 +1,62 @@ +$(function(){ + var searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + }); + + var $typeahead = $('[data-typeahead]'); + var $form = $typeahead.parents('form'); + var searchURL = $form.attr('action'); + + function displayTemplate(result) { + return result.name; + } + + function suggestionTemplate(result) { + var t = '
    '; + t += '' + result.name + ''; + if (result.parent_name) { + t += '' + result.parent_name + ''; + } + t += '
    '; + return t; + } + + $typeahead.one('focus', function() { + $form.addClass('loading'); + + $.getJSON(searchURL).then(function(searchData) { + $.each(searchData, function (url, doc) { + searchIndex.add({url: url, name: doc.name}); + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3 + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + var results = searchIndex.search(query).map(function(result) { + var doc = searchData[result.ref]; + doc.url = result.ref; + return doc; + }); + sync(results); + } + } + ); + $form.removeClass('loading'); + $typeahead.trigger('focus'); + }); + }); + + var baseURL = searchURL.slice(0, -"search.json".length); + + $typeahead.on('typeahead:select', function(e, result) { + window.location = baseURL + result.url; + }); +}); diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/js/lunr.min.js b/docs/docsets/BigInt.docset/Contents/Resources/Documents/js/lunr.min.js new file mode 100755 index 0000000..22776bb --- /dev/null +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/js/lunr.min.js @@ -0,0 +1,6 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.7.2 + * Copyright (C) 2016 Oliver Nightingale + * @license MIT + */ +!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.7.2",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){if(!arguments.length||null==e||void 0==e)return[];if(Array.isArray(e))return e.map(function(e){return t.utils.asString(e).toLowerCase()});var n=t.tokenizer.seperator||t.tokenizer.separator;return e.toString().trim().toLowerCase().split(n)},t.tokenizer.seperator=!1,t.tokenizer.separator=/[\s\-]+/,t.tokenizer.load=function(t){var e=this.registeredFunctions[t];if(!e)throw new Error("Cannot load un-registered function: "+t);return e},t.tokenizer.label="default",t.tokenizer.registeredFunctions={"default":t.tokenizer},t.tokenizer.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing tokenizer: "+n),e.label=n,this.registeredFunctions[n]=e},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone();for(var r=0,o=n.toArray();rp;p++)c[p]===a&&d++;h+=d/f*l.boost}}this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(this.tokenizerFn(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),d=Object.keys(f),p=d.length,v=0;p>v;v++)l.add(f[d[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,z=/^(.+?)e$/,O=/ll$/,P=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=g,a=m,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,u=k,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=F,a=_,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=z,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=P,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=O,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n', + menu: '
    ' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e; + $e = $.Event(namespace + type); + (args = args || []).unshift($e); + this.$el.trigger.apply(this.$el, args); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function getRegex(patterns, caseSensitive, wordsOnly) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + escapedPatterns.push(_.escapeRegExChars(patterns[i])); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
    "); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = o.name || nameGenerator(); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", this.name, suggestions, false); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", this.name, suggestions, true); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + rendered += suggestions.length; + that._append(query, suggestions.slice(0, that.limit - rendered)); + that.async && that.trigger("asyncReceived", query); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
    "); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion || suggestionTemplate + }; + function suggestionTemplate(context) { + return $("
    ").text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
    ").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, isDatasetEmpty); + function isDatasetEmpty(dataset) { + return dataset.isEmpty(); + } + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
    "); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
    "); + $menu = this.menu.$node || $("
    "); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) { + this._updateHint(); + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, payload, cancelMove; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + payload = data ? data.obj : null; + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", payload)) { + this.menu.setCursor($candidate); + if (data) { + this.input.setInputValue(data.val); + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", payload); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(newVal); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop("readonly", true).removeAttr("id name placeholder required").attr({ + autocomplete: "off", + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + autocomplete: "off", + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/search.json b/docs/docsets/BigInt.docset/Contents/Resources/Documents/search.json new file mode 100644 index 0000000..3f6d5e8 --- /dev/null +++ b/docs/docsets/BigInt.docset/Contents/Resources/Documents/search.json @@ -0,0 +1 @@ +{"Structs/BigInt/Words.html#/s:s10CollectionP5count13IndexDistanceQzv":{"name":"count","parent_name":"Words"},"Structs/BigInt/Words.html#/s:s22RandomAccessCollectionP7indices7IndicesQzv":{"name":"indices","parent_name":"Words"},"Structs/BigInt/Words.html#/s:s14_IndexableBaseP10startIndex0D0Qzv":{"name":"startIndex","parent_name":"Words"},"Structs/BigInt/Words.html#/s:s14_IndexableBaseP8endIndex0D0Qzv":{"name":"endIndex","parent_name":"Words"},"Structs/BigInt/Sign.html#/s:6BigIntAAV4SignO4plusA2DmF":{"name":"plus","abstract":"

    Undocumented

    ","parent_name":"Sign"},"Structs/BigInt/Sign.html#/s:6BigIntAAV4SignO5minusA2DmF":{"name":"minus","abstract":"

    Undocumented

    ","parent_name":"Sign"},"Structs/BigInt/Sign.html":{"name":"Sign","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV4Worda":{"name":"Word","abstract":"

    The type representing a digit in BigInt‘s underlying number system.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP8isSignedSbvZ":{"name":"isSigned","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV9magnitudeAA0A4UIntVv":{"name":"magnitude","abstract":"

    The absolute value of this integer.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV4signAB4SignOv":{"name":"sign","abstract":"

    True iff the value of this integer is negative.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVA2B4SignO4sign_AA0A4UIntV9magnitudetcfc":{"name":"init(sign:magnitude:)","abstract":"

    Initializes a new big integer with the provided absolute number and sign flag.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV6isZeroSbv":{"name":"isZero","abstract":"

    Return true iff this integer is zero.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV6signumAByF":{"name":"signum()","abstract":"

    Returns -1 if this value is negative and 1 if it’s positive; otherwise, 0.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP1topxxFZ":{"name":"~(_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1aoiA2Bz_ABtFZ":{"name":"&(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1ooiA2Bz_ABtFZ":{"name":"|(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1xoiA2Bz_ABtFZ":{"name":"^(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP2aeoiyxz_xtFZ":{"name":"&=(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP2oeoiyxz_xtFZ":{"name":"|=(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP2xeoiyxz_xtFZ":{"name":"^=(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV21isStrongProbablePrimeSbABF":{"name":"isStrongProbablePrime(_:)","abstract":"

    Returns true iff this integer passes the strong probable prime test for the specified base.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV7isPrimeSbSi6rounds_tF":{"name":"isPrime(rounds:)","abstract":"

    Returns true if this integer is probably prime. Returns false if this integer is definitely not prime.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP8bitWidthSiv":{"name":"bitWidth","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP20trailingZeroBitCountSiv":{"name":"trailingZeroBitCount","parent_name":"BigInt"},"Structs/BigInt/Words.html":{"name":"Words","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP5words5WordsQzv":{"name":"words","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABx5words_tcs8SequenceRzSu7ElementRtzlufc":{"name":"init(words:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV12appendHashesy7SipHash0E6HasherVz2to_tF":{"name":"appendHashes(to:)","abstract":"

    Append this BigInt to the specified hasher.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerPxSgqd__7exactly_tcs0A13FloatingPointRd__lufc":{"name":"init(exactly:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerPxqd__cs0A13FloatingPointRd__lufc":{"name":"init(_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13SignedNumericP6negateyyF":{"name":"negate()","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1soiA2B_ABtFZ":{"name":"-(_:_:)","abstract":"

    Subtract b from a and return the result.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV2seoiyABz_ABtFZ":{"name":"-=(_:_:)","abstract":"

    Subtract b from a in place.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV20quotientAndRemainderAB0C0_AB9remaindertAB10dividingBy_tF":{"name":"quotientAndRemainder(dividingBy:)","abstract":"

    Divide this integer by y and return the resulting quotient and remainder.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1doiA2B_ABtFZ":{"name":"/(_:_:)","abstract":"

    Divide a by b and return the quotient. Traps if b is zero.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1roiA2B_ABtFZ":{"name":"%(_:_:)","abstract":"

    Divide a by b and return the remainder. The result has the same sign as a.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV7modulusA2BF":{"name":"modulus(_:)","abstract":"

    Return the result of a mod b. The result is always a nonnegative integer that is less than the absolute value of b.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV2deoiyABz_ABtFZ":{"name":"/=(_:_:)","abstract":"

    Divide a by b storing the quotient in a.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV2reoiyABz_ABtFZ":{"name":"%=(_:_:)","abstract":"

    Divide a by b storing the remainder in a.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABycfc":{"name":"init()","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVAbA0A4UIntVcfc":{"name":"init(_:)","abstract":"

    Initializes a new signed big integer with the same value as the specified unsigned big integer.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerPxqd__csAARd__lufc":{"name":"init(_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s7NumericPxSgqd__7exactly_tcs13BinaryIntegerRd__lufc":{"name":"init(exactly:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerPxqd__8clamping_tcsAARd__lufc":{"name":"init(clamping:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerPxqd__18truncatingIfNeeded_tcsAARd__lufc":{"name":"init(truncatingIfNeeded:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABs5Int64V14integerLiteral_tcfc":{"name":"init(integerLiteral:)","abstract":"

    Initialize a new big integer from an integer literal.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV2eeoiSbAB_ABtFZ":{"name":"==(_:_:)","abstract":"

    Return true iff a is equal to b.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1loiSbAB_ABtFZ":{"name":"<(_:_:)","abstract":"

    Return true iff a is less than b.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABSgx_Si5radixtcs14StringProtocolRzlufc":{"name":"init(_:radix:)","abstract":"

    Initialize a big integer from an ASCII representation in a given radix. Numerals above 9 are represented by","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABs7UnicodeO6ScalarV07unicodeD7Literal_tcfc":{"name":"init(unicodeScalarLiteral:)","abstract":"

    Initialize a new big integer from a Unicode scalar.","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABSS30extendedGraphemeClusterLiteral_tcfc":{"name":"init(extendedGraphemeClusterLiteral:)","abstract":"

    Initialize a new big integer from an extended grapheme cluster.","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABSS13stringLiteral_tcfc":{"name":"init(stringLiteral:)","abstract":"

    Initialize a new big integer from a decimal number represented by a string literal of arbitrary length.","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV11descriptionSSv":{"name":"description","abstract":"

    Return the decimal representation of this integer.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV25customPlaygroundQuickLooks0deF0Ov":{"name":"customPlaygroundQuickLook","abstract":"

    Return the playground quick look representation of this integer.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1moiA2B_ABtFZ":{"name":"*(_:_:)","abstract":"

    Multiply a with b and return the result.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV2meoiyABz_ABtFZ":{"name":"*=(_:_:)","abstract":"

    Multiply a with b in place.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV8advancedA2B2by_tF":{"name":"advanced(by:)","abstract":"

    Returns self + n.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV8distanceA2B2to_tF":{"name":"distance(to:)","abstract":"

    Returns other - self.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV3alloiA2B_ABtFZ":{"name":"&<<(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV4alleoiyABz_ABtFZ":{"name":"&<<=(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV3aggoiA2B_ABtFZ":{"name":"&>>(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV4aggeoiyABz_ABtFZ":{"name":"&>>=(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP2lloixx_qd__tsAARd__lFZ":{"name":"<<(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP3lleoiyxz_qd__tsAARd__lFZ":{"name":"<<=(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP2ggoixx_qd__tsAARd__lFZ":{"name":">>(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP3ggeoiyxz_qd__tsAARd__lFZ":{"name":">>=(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV21greatestCommonDivisorA2B4with_tF":{"name":"greatestCommonDivisor(with:)","abstract":"

    Returns the greatest common divisor of a and b.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV7inverseABSgABF":{"name":"inverse(_:)","abstract":"

    Returns the multiplicative inverse of this integer in modulo modulus arithmetic,","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV10squareRootAByF":{"name":"squareRoot()","abstract":"

    Returns the integer square root of a big integer; i.e., the largest integer whose square isn’t greater than value.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s9DecodablePxs7Decoder_p4from_tKcfc":{"name":"init(from:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s9EncodableP6encodeys7Encoder_p2to_tKF":{"name":"encode(to:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV5powerABSiF":{"name":"power(_:)","abstract":"

    Returns this integer raised to the power exponent.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV5powerA2B_AB7modulustF":{"name":"power(_:modulus:)","abstract":"

    Returns the remainder of this integer raised to the power exponent in modulo arithmetic under modulus.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1poiA2B_ABtFZ":{"name":"+(_:_:)","abstract":"

    Add a to b and return the result.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV2peoiyABz_ABtFZ":{"name":"+=(_:_:)","abstract":"

    Add b to a in place.

    ","parent_name":"BigInt"},"Structs/BigUInt/Words.html#/s:s14_IndexableBaseP10startIndex0D0Qzv":{"name":"startIndex","parent_name":"Words"},"Structs/BigUInt/Words.html#/s:s14_IndexableBaseP8endIndex0D0Qzv":{"name":"endIndex","parent_name":"Words"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV4Worda":{"name":"Word","abstract":"

    The type representing a digit in BigUInt‘s underlying number system.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACycfc":{"name":"init()","abstract":"

    Initializes a new BigUInt with value 0.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACSaySuG5words_tcfc":{"name":"init(words:)","abstract":"

    Initializes a new BigUInt with the specified digits. The digits are ordered from least to most significant.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1topA2CFZ":{"name":"~(_:)","abstract":"

    Return the ones’ complement of a.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2oeoiyACz_ACtFZ":{"name":"|=(_:_:)","abstract":"

    Calculate the bitwise OR of a and b, and store the result in a.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2aeoiyACz_ACtFZ":{"name":"&=(_:_:)","abstract":"

    Calculate the bitwise AND of a and b and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2xeoiyACz_ACtFZ":{"name":"^=(_:_:)","abstract":"

    Calculate the bitwise XOR of a and b and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV13randomIntegerACSi16withMaximumWidth_tFZ":{"name":"randomInteger(withMaximumWidth:)","abstract":"

    Create a big integer consisting of width uniformly distributed random bits.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV13randomIntegerACSi14withExactWidth_tFZ":{"name":"randomInteger(withExactWidth:)","abstract":"

    Create a big integer consisting of width-1 uniformly distributed random bits followed by a one bit.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV13randomIntegerA2C8lessThan_tFZ":{"name":"randomInteger(lessThan:)","abstract":"

    Create a uniformly distributed random integer that’s less than the specified limit.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV21isStrongProbablePrimeSbACF":{"name":"isStrongProbablePrime(_:)","abstract":"

    Returns true iff this integer passes the strong probable prime test for the specified base.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV7isPrimeSbSi6rounds_tF":{"name":"isPrime(rounds:)","abstract":"

    Returns true if this integer is probably prime. Returns false if this integer is definitely not prime.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV8bitWidthSiv":{"name":"bitWidth","abstract":"

    The minimum number of bits required to represent this integer in binary.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV19leadingZeroBitCountSiv":{"name":"leadingZeroBitCount","abstract":"

    The number of leading zero bits in the binary representation of this integer in base 2^(Word.bitWidth).","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV20trailingZeroBitCountSiv":{"name":"trailingZeroBitCount","abstract":"

    The number of trailing zero bits in the binary representation of this integer.

    ","parent_name":"BigUInt"},"Structs/BigUInt/Words.html":{"name":"Words","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerP5words5WordsQzv":{"name":"words","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACx5words_tcs8SequenceRzSu7ElementRtzlufc":{"name":"init(words:)","abstract":"

    Undocumented

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV12appendHashesy7SipHash0F6HasherVz2to_tF":{"name":"appendHashes(to:)","abstract":"

    Append this BigUInt to the specified hasher.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerPxSgqd__7exactly_tcs0A13FloatingPointRd__lufc":{"name":"init(exactly:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerPxqd__cs0A13FloatingPointRd__lufc":{"name":"init(_:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV25subtractReportingOverflowSbAC_Si9shiftedBytF":{"name":"subtractReportingOverflow(_:shiftedBy:)","abstract":"

    Subtract other from this integer in place, and return a flag indicating if the operation caused an","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV28subtractingReportingOverflowAC12partialValue_Sb8overflowtAC_Si9shiftedBytF":{"name":"subtractingReportingOverflow(_:shiftedBy:)","abstract":"

    Subtract other from this integer, returning the difference and a flag indicating arithmetic overflow.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV28subtractingReportingOverflowAC12partialValue_Sb8overflowtACF":{"name":"subtractingReportingOverflow(_:)","abstract":"

    Subtracts other from self, returning the result and a flag indicating arithmetic overflow.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV8subtractyAC_Si9shiftedBytF":{"name":"subtract(_:shiftedBy:)","abstract":"

    Subtract other from this integer in place.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV11subtractingA2C_Si9shiftedBytF":{"name":"subtracting(_:shiftedBy:)","abstract":"

    Subtract b from this integer, and return the difference.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV9decrementySi9shiftedBy_tF":{"name":"decrement(shiftedBy:)","abstract":"

    Decrement this integer by one.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1soiA2C_ACtFZ":{"name":"-(_:_:)","abstract":"

    Subtract b from a and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2seoiyACz_ACtFZ":{"name":"-=(_:_:)","abstract":"

    Subtract b from a and store the result in a.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV20quotientAndRemainderAC0D0_AC9remaindertAC10dividingBy_tF":{"name":"quotientAndRemainder(dividingBy:)","abstract":"

    Divide this integer by y and return the resulting quotient and remainder.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1doiA2C_ACtFZ":{"name":"/(_:_:)","abstract":"

    Divide x by y and return the quotient.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1roiA2C_ACtFZ":{"name":"%(_:_:)","abstract":"

    Divide x by y and return the remainder.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2deoiyACz_ACtFZ":{"name":"/=(_:_:)","abstract":"

    Divide x by y and store the quotient in x.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2reoiyACz_ACtFZ":{"name":"%=(_:_:)","abstract":"

    Divide x by y and store the remainder in x.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s7NumericPxSgqd__7exactly_tcs13BinaryIntegerRd__lufc":{"name":"init(exactly:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerPxqd__csAARd__lufc":{"name":"init(_:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerPxqd__18truncatingIfNeeded_tcsAARd__lufc":{"name":"init(truncatingIfNeeded:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerPxqd__8clamping_tcsAARd__lufc":{"name":"init(clamping:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACs6UInt64V14integerLiteral_tcfc":{"name":"init(integerLiteral:)","abstract":"

    Initialize a new big integer from an integer literal.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerP8isSignedSbvZ":{"name":"isSigned","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV6signumACyF":{"name":"signum()","abstract":"

    Returns -1 if this value is negative and 1 if it’s positive; otherwise, 0.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV9subscriptSuSici":{"name":"subscript(_:)","abstract":"

    Get or set a digit at a given index.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV7compareSC16ComparisonResultOAC_ACtFZ":{"name":"compare(_:_:)","abstract":"

    Compare a to b and return an NSComparisonResult indicating their order.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2eeoiSbAC_ACtFZ":{"name":"==(_:_:)","abstract":"

    Return true iff a is equal to b.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1loiSbAC_ACtFZ":{"name":"<(_:_:)","abstract":"

    Return true iff a is less than b.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACSgSS_Si5radixtcfc":{"name":"init(_:radix:)","abstract":"

    Initialize a big integer from an ASCII representation in a given radix. Numerals above 9 are represented by","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACSgs9SubstringV_Si5radixtcfc":{"name":"init(_:radix:)","abstract":"

    Undocumented

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACs7UnicodeO6ScalarV07unicodeE7Literal_tcfc":{"name":"init(unicodeScalarLiteral:)","abstract":"

    Initialize a new big integer from a Unicode scalar.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACSS30extendedGraphemeClusterLiteral_tcfc":{"name":"init(extendedGraphemeClusterLiteral:)","abstract":"

    Initialize a new big integer from an extended grapheme cluster.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACSS13stringLiteral_tcfc":{"name":"init(stringLiteral:)","abstract":"

    Initialize a new big integer from a decimal number represented by a string literal of arbitrary length.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV11descriptionSSv":{"name":"description","abstract":"

    Return the decimal representation of this integer.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV25customPlaygroundQuickLooks0efG0Ov":{"name":"customPlaygroundQuickLook","abstract":"

    Return the playground quick look representation of this integer.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACs22UnsafeRawBufferPointerVcfc":{"name":"init(_:)","abstract":"

    Undocumented

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVAC10Foundation4DataVcfc":{"name":"init(_:)","abstract":"

    Initializes an integer from the bits stored inside a piece of Data.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV9serialize10Foundation4DataVyF":{"name":"serialize()","abstract":"

    Return a Data value that contains the base-256 representation of this integer, in network (big-endian) byte order.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV8multiplyySu6byWord_tF":{"name":"multiply(byWord:)","abstract":"

    Multiply this big integer by a single word, and store the result in place of the original big integer.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV10multipliedACSu6byWord_tF":{"name":"multiplied(byWord:)","abstract":"

    Multiply this big integer by a single Word, and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV14multiplyAndAddyAC_SuSi9shiftedBytF":{"name":"multiplyAndAdd(_:_:shiftedBy:)","abstract":"

    Multiply x by y, and add the result to this integer, optionally shifted shift words to the left.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV10multipliedA2C2by_tF":{"name":"multiplied(by:)","abstract":"

    Multiply this integer by y and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV25directMultiplicationLimitSivZ":{"name":"directMultiplicationLimit","abstract":"

    Multiplication switches to an asymptotically better recursive algorithm when arguments have more words than this limit.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1moiA2C_ACtFZ":{"name":"*(_:_:)","abstract":"

    Multiply a by b and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2meoiyACz_ACtFZ":{"name":"*=(_:_:)","abstract":"

    Multiply a by b and store the result in a.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV6Stridea":{"name":"Stride","abstract":"

    A type that can represent the distance between two values ofa BigUInt.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV8advancedAc2AV2by_tF":{"name":"advanced(by:)","abstract":"

    Adds n to self and returns the result. Traps if the result would be less than zero.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV8distanceA2AVAC2to_tF":{"name":"distance(to:)","abstract":"

    Returns the (potentially negative) difference between self and other as a BigInt. Never traps.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerP3ggeoiyxz_qd__tsAARd__lFZ":{"name":">>=(_:_:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerP3lleoiyxz_qd__tsAARd__lFZ":{"name":"<<=(_:_:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerP2ggoixx_qd__tsAARd__lFZ":{"name":">>(_:_:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerP2lloixx_qd__tsAARd__lFZ":{"name":"<<(_:_:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV21greatestCommonDivisorA2C4with_tF":{"name":"greatestCommonDivisor(with:)","abstract":"

    Returns the greatest common divisor of self and b.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV7inverseACSgACF":{"name":"inverse(_:)","abstract":"

    Returns the multiplicative inverse of this integer in modulo modulus arithmetic,","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV10squareRootACyF":{"name":"squareRoot()","abstract":"

    Returns the integer square root of a big integer; i.e., the largest integer whose square isn’t greater than value.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s9DecodablePxs7Decoder_p4from_tKcfc":{"name":"init(from:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s9EncodableP6encodeys7Encoder_p2to_tKF":{"name":"encode(to:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV5powerACSiF":{"name":"power(_:)","abstract":"

    Returns this integer raised to the power exponent.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV5powerA2C_AC7modulustF":{"name":"power(_:modulus:)","abstract":"

    Returns the remainder of this integer raised to the power exponent in modulo arithmetic under modulus.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1poiA2C_ACtFZ":{"name":"+(_:_:)","abstract":"

    Add a and b together and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2peoiyACz_ACtFZ":{"name":"+=(_:_:)","abstract":"

    Add a and b together, and store the sum in a.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html":{"name":"BigUInt","abstract":"

    An arbitary precision unsigned integer type, also known as a big integer.

    "},"Structs/BigInt.html":{"name":"BigInt","abstract":"

    An arbitary precision signed integer type, also known as a big integer.

    "},"Extensions/String.html#/s:SS6BigIntESSAA0A4UIntVcfc":{"name":"init(_:)","abstract":"

    Initialize a new string with the base-10 representation of an unsigned big integer.

    ","parent_name":"String"},"Extensions/String.html#/s:SS6BigIntESSAA0A4UIntV_Si5radixSb9uppercasetcfc":{"name":"init(_:radix:uppercase:)","abstract":"

    Initialize a new string representing an unsigned big integer in the given radix (base).

    ","parent_name":"String"},"Extensions/String.html#/s:SS6BigIntESSA2AV_Si5radixSb9uppercasetcfc":{"name":"init(_:radix:uppercase:)","abstract":"

    Initialize a new string representing a signed big integer in the given radix (base).

    ","parent_name":"String"},"Extensions/BinaryFloatingPoint.html#/s:s19BinaryFloatingPointP6BigIntsAARzs17FixedWidthInteger11RawExponentRpzsAD0I11SignificandRpzlExA2CVcfc":{"name":"init(_:)","abstract":"

    Undocumented

    ","parent_name":"BinaryFloatingPoint"},"Extensions/BinaryFloatingPoint.html#/s:s19BinaryFloatingPointP6BigIntsAARzs17FixedWidthInteger11RawExponentRpzsAD0I11SignificandRpzlExAC0D4UIntVcfc":{"name":"init(_:)","abstract":"

    Undocumented

    ","parent_name":"BinaryFloatingPoint"},"Extensions/BinaryFloatingPoint.html":{"name":"BinaryFloatingPoint"},"Extensions/String.html":{"name":"String"},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file diff --git a/docs/docsets/BigInt.docset/Contents/Resources/Documents/undocumented.json b/docs/docsets/BigInt.docset/Contents/Resources/Documents/undocumented.json deleted file mode 100644 index 5874735..0000000 --- a/docs/docsets/BigInt.docset/Contents/Resources/Documents/undocumented.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "warnings": [ - - ], - "source_directory": "/Users/lorentey/Git/BigInt" -} \ No newline at end of file diff --git a/docs/docsets/BigInt.docset/Contents/Resources/docSet.dsidx b/docs/docsets/BigInt.docset/Contents/Resources/docSet.dsidx index e93070a982f833fadb9e3e5466b8147b90614844..95c33c813623e9e0ea8ee550454e17d0f63fffc7 100644 GIT binary patch literal 49152 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 T$EQ;onA(jUAkT*v)?EJwc%;@a literal 45056 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 bm(Q2am(Q2am(Q2a`p^FdN)7)-0H6v0s0E7) literal 81351 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.1.0https://lorentey.github.io/BigInt/reference/docsets/BigInt.tgz +3.0.1https://attaswift.github.io/BigInt/reference/docsets/BigInt.tgz diff --git a/docs/img/spinner.gif b/docs/img/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3038d0a42c55b1a07caecb7c7a6cbac982ec09d GIT binary patch literal 1849 zcmb8wZBSF$83*voz31lM+?V7Kkqwb`LI|3K#DupH#kDs91c6du6?SMB!bsTr6|ge_{#vAVj^!DyNA-l zJ&$jDFNv;BTZXX@Qk-7+S5ErF>mkOcZ@lQv>F1VyCEMe2Ud@f<|L%#&QJi${E`2lR zqKFaW2Y$aTRxUY&ae$IHsN;Z;rdZ%CjYLTv!tMi234j-ON=CnvK-1QU|MG$YErn{gHZ@0Q6&?xSyply?S$EVNXH;gp?S5kV2-)$ga^gw`(f4Mm_Y(`RbgRkQTHF2@zL}dCiLk$RoZIc{xZL z_J*d5)Kb;#oKCFyfL*NGSs?y;e(QKvPJe1#G)h5*6E(?L9$nt?UaQJfP^$GDL0PU; z?r}C|);JQ4HES3w5VMlY7x6xfJAzDKlHE~>x;D`Fa=WygYot{pfFehH69o9pK|72W zwC6?t^AnATIJa=kewn=ep?Nk(aZ*pZo}51`S=^)jPRb`~l^VE}08>P3OJtQlXx1K8 z8Q}_u=F*fS;=k=?(fIv#+%811NTx8^}rHwvH%LbYmpFl9p1A{Idh@2x$ zuVp7)VD9}Uc(*(C**!QOdS(6B)$5^Tq5p3q*7un&_Z-NKEiEYg$D{Uq&sa>wj|za5 zJ6M~p)z+E6*X${8j6Ci+sqZ}zxeCAo0gZmZuhl+)Q%1U$Br_`NXcA-3yBdYMha+{o z{?q0Q(kaR2n`M29{!pwpgX6+CPQEgIO%x*0#!TC=c-ZPSkLO>OcmQUao5%-3w)U`F zRz?uGCEKQDh!TQPDmyd;iDX$TkMIe)%61q51Y2b-ie4r00!csilXgKL$txqj|6D(# z@(#!nQ}3R1JGeB3B5Tuqdvyg@*!-bq`9`pmasNGvy9^*+cd1Y*g>HK#rl7i79QQAG zl4SL_wW@WY1d+F?j0gFInGhsRrqvV3SKl{oqW+;9!fu|u@J)h4WM!0Cu02l@p60b#5M9c{dKh=_eRw~yl zWT0gw8RePzf%i8X&twiB|LF0bI@CYE{x1PI;Ylr4RJzU#Zc0j!c07g&q7=_eSd(sH z9VKChd?}^52IKcMqolAWiQH;HSp1Ploa$t zQhg|2sK;%Eb!By`)j9G1w?>`Wt6IK3gB}~uoue(MlRiIoZ#d{pgJZ8b{^{HO8)@%= zX)og3`*D5v1g;*Lz8@Sm(Q|&}PUytlb@Q_dzKFOzKK!Z_&?GO4+JO-)iPH=fs{(`& zZ9{oNn~LUZaeN!>i9p*0N^sHye8nw4xSi!REaP@@^Jy66|)Y9_AFoLlrlkg(42 zVq2J??I(+1*BcSKsTyO7LCho{8tVQm1b>*GQ*H~Mn71Lhy`alw%;D@CU^0)5Ng{cHz@LS7QZ o8uGHYt7)tmZjae5ge5$b`e_;HIklOseoIbqeod19BU-8d00{dbSpWb4 literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html index a80a19b..15361d3 100644 --- a/docs/index.html +++ b/docs/index.html @@ -8,6 +8,9 @@ + + + @@ -19,18 +22,24 @@ BigInt Docs - (100% documented) + (92% documented) +

    + +

    +

    + +

    - + View on GitHub

    - + Install in Dash @@ -49,38 +58,31 @@

    - - @@ -91,7 +93,7 @@
    -

    BigInt

    +

    BigInt

    -

    Swift 3 -Documented +

    Swift 3 License Platform

    -

    Build Status -Code Coverage +

    Build Status +Code Coverage Carthage compatible Version

    -

    Overview

    +

    Overview

    This repository provides integer types of arbitrary width implemented in 100% pure Swift. The underlying representation is in base 2^64, using Array<UInt64>.

    @@ -131,7 +132,7 @@ you don’t want to add The GNU Multiple Precision Arithmetic Library as a dependency.

    -

    Two big integer types are included: BigUInt and BigInt, +

    Two big integer types are included: BigUInt and BigInt, the latter being the signed variant. Both of these are Swift structs with copy-on-write value semantics, and they can be used much like any other integer type.

    @@ -140,43 +141,43 @@ big integers, including

    The implementations are intended to be reasonably efficient, but they are unlikely to be @@ -185,16 +186,16 @@

    The library has 100% unit test coverage. Sadly this does not imply that there are no bugs in it.

    -

    API Documentation

    +

    API Documentation

    -

    Generated API docs are available at http://lorentey.github.io/BigInt/.

    -

    License

    +

    Generated API docs are available at http://attaswift.github.io/BigInt/.

    +

    License

    -

    BigInt can be used, distributed and modified under the MIT license.

    -

    Requirements and Integration

    +

    BigInt can be used, distributed and modified under the MIT license.

    +

    Requirements and Integration

    -

    BigInt 2.1.0 requires Swift 3.0.1. (The last version with support for Swift 3.0.0 was BigInt 2.0.1. -The last version with support for Swift 2.2 was BigInt 1.3.0.)

    +

    BigInt 3.0.0 requires Swift 4. (The last version with support for Swift 3.x was BigInt 2.1.0. +The last version with support for Swift 2 was BigInt 1.3.0.)

    BigInt deploys to macOS 10.10, iOS 9, watchOS 2 and tvOS 9. It has been tested on the latest OS releases only—however, as the module uses very few platform-provided APIs, @@ -209,37 +210,37 @@

  • Swift Package Manager: Although the Package Manager is still in its infancy, BigInt provides experimental support for it. Add this to the dependency section of your Package.swift manifest:

    -
    .Package(url: "https://github.com/lorentey/BigInt.git", majorVersion: 2, minorVersion: 1)
    +
    .Package(url: "https://github.com/attaswift/BigInt.git", from: "3.0.0")
     
  • CocoaPods: Put this in your Podfile:

    -
    pod 'BigInt', '~> 2.1'
    +
    pod 'BigInt', '~> 3.0'
     
  • Carthage: Put this in your Cartfile:

    -
    github "lorentey/BigInt" ~> 2.1
    +
    github "attaswift/BigInt" ~> 3.0
     
  • -

    Implementation notes

    +

    Implementation notes

    -

    BigUInt is a MutableCollectionType of its 64-bit digits, with the least significant -digit at index 0. As a convenience, BigUInt allows you to subscript it with indexes at -or above its count. The subscript operator returns 0 for out-of-bound gets and +

    BigUInt is a MutableCollectionType of its 64-bit digits, with the least significant +digit at index 0. As a convenience, BigUInt allows you to subscript it with indexes at +or above its count. The subscript operator returns 0 for out-of-bound gets and automatically extends the array on out-of-bound sets. This makes memory management simpler.

    -

    BigInt is just a tiny wrapper around a BigUInt absolute value and a -sign bit, both of which are accessible as public read-write properties.

    -

    Full-width multiplication and division primitives

    +

    BigInt is just a tiny wrapper around a BigUInt absolute value and a +sign bit, both of which are accessible as public read-write properties.

    +

    Full-width multiplication and division primitives

    I haven’t found (64,64)->128 multiplication or (128,64)->64 division operations -in Swift, so the module has generic implementations for them in terms of the standard +in Swift, so the module has generic implementations for them in terms of the standard single-width * and / operators. I suspect there are LLVM intrinsics for full-width arithmetics that are probably accessible somehow, though. (Let me know if you know how!)

    This sounds slow, but 64-bit digits are still considerably faster than 32-bit, even though the latter can use direct 64-bit arithmetic to implement these primitives.

    -

    Why is there no generic BigInt<Digit> type?

    +

    Why is there no generic BigInt<Digit> type?

    -

    The types provided by BigInt are not parametric—this is very much intentional, as +

    The types provided by BigInt are not parametric—this is very much intentional, as Swift generics cost us dearly at runtime in this use case. In every approach I tried, making arbitrary-precision arithmetic operations work with a generic Digit type parameter resulted in code that was literally ten times slower. If you can make the algorithms generic @@ -249,14 +250,14 @@ implementations for arbitrary-width arithmetic operations. (Polynomial division and decimal bases are two examples.) The library already implements double-digit multiplication and division as extension methods on a protocol with an associated type requirement; this has not measurably affected -performance. Unfortunately, the same is not true for BigUInt’s methods.

    +performance. Unfortunately, the same is not true for BigUInt‘s methods.

    Of course, as a last resort, we could just duplicate the code to create a separate generic variant that was slower but more flexible.

    -

    Calculation Samples

    -

    Obligatory Factorial Demo

    +

    Calculation Samples

    +

    Obligatory Factorial Demo

    -

    It is easy to use BigInt to calculate the factorial function for any integer:

    +

    It is easy to use BigInt to calculate the factorial function for any integer:

    import BigInt
     
     func factorial(_ n: Int) -> BigInt {
    @@ -307,9 +308,9 @@
     

    Well, I guess that’s all right, but it’s not very interesting. Let’s try something more useful.

    -

    RSA Cryptography

    +

    RSA Cryptography

    -

    The BigInt module provides all necessary parts to implement an (overly) +

    The BigInt module provides all necessary parts to implement an (overly) simple RSA cryptography system.

    Let’s start with a simple function that generates a random n-bit prime. The module @@ -376,7 +377,7 @@

    Let’s try out our new keypair by converting a string into UTF-8, interpreting the resulting binary representation as a big integer, and encrypting it with the -public key. BigUInt has an initializer that takes an NSData, so this is pretty +public key. BigUInt has an initializer that takes an NSData, so this is pretty easy to do:

    let secret: BigUInt = BigUInt("Arbitrary precision arithmetic is fun!".dataUsingEncoding(NSUTF8StringEncoding)!)
     ==> 83323446846105976078466731524728681905293067701804838925389198929123912971229457
    @@ -407,9 +408,9 @@
     

    Yay! This is truly terrific, but please don’t use this example code in an actual cryptography system. RSA has lots of subtle (and some not so subtle) complications that we ignored to keep this example short.

    -

    Calculating the Digits of π

    +

    Calculating the Digits of π

    -

    Another fun activity to try with BigInts is to generate the digits of π. +

    Another fun activity to try with BigInts is to generate the digits of π. Let’s try implementing Jeremy Gibbon’s spigot algorithm. This is a rather slow algorithm as π-generators go, but it makes up for it with its grooviness factor: it’s remarkably short, it only uses (big) integer arithmetic, and every iteration @@ -469,8 +470,8 @@

    diff --git a/docs/js/jazzy.js b/docs/js/jazzy.js index e2b491d..009c80d 100755 --- a/docs/js/jazzy.js +++ b/docs/js/jazzy.js @@ -35,3 +35,9 @@ $(".token").click(function(event) { } event.preventDefault(); }); + +// Dumb down quotes within code blocks that delimit strings instead of quotations +// https://github.com/realm/jazzy/issues/714 +$("code q").replaceWith(function () { + return ["\"", $(this).contents(), "\""]; +}); diff --git a/docs/js/jazzy.search.js b/docs/js/jazzy.search.js new file mode 100644 index 0000000..54be83c --- /dev/null +++ b/docs/js/jazzy.search.js @@ -0,0 +1,62 @@ +$(function(){ + var searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + }); + + var $typeahead = $('[data-typeahead]'); + var $form = $typeahead.parents('form'); + var searchURL = $form.attr('action'); + + function displayTemplate(result) { + return result.name; + } + + function suggestionTemplate(result) { + var t = '
    '; + t += '' + result.name + ''; + if (result.parent_name) { + t += '' + result.parent_name + ''; + } + t += '
    '; + return t; + } + + $typeahead.one('focus', function() { + $form.addClass('loading'); + + $.getJSON(searchURL).then(function(searchData) { + $.each(searchData, function (url, doc) { + searchIndex.add({url: url, name: doc.name}); + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3 + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + var results = searchIndex.search(query).map(function(result) { + var doc = searchData[result.ref]; + doc.url = result.ref; + return doc; + }); + sync(results); + } + } + ); + $form.removeClass('loading'); + $typeahead.trigger('focus'); + }); + }); + + var baseURL = searchURL.slice(0, -"search.json".length); + + $typeahead.on('typeahead:select', function(e, result) { + window.location = baseURL + result.url; + }); +}); diff --git a/docs/js/lunr.min.js b/docs/js/lunr.min.js new file mode 100755 index 0000000..22776bb --- /dev/null +++ b/docs/js/lunr.min.js @@ -0,0 +1,6 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.7.2 + * Copyright (C) 2016 Oliver Nightingale + * @license MIT + */ +!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.7.2",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){if(!arguments.length||null==e||void 0==e)return[];if(Array.isArray(e))return e.map(function(e){return t.utils.asString(e).toLowerCase()});var n=t.tokenizer.seperator||t.tokenizer.separator;return e.toString().trim().toLowerCase().split(n)},t.tokenizer.seperator=!1,t.tokenizer.separator=/[\s\-]+/,t.tokenizer.load=function(t){var e=this.registeredFunctions[t];if(!e)throw new Error("Cannot load un-registered function: "+t);return e},t.tokenizer.label="default",t.tokenizer.registeredFunctions={"default":t.tokenizer},t.tokenizer.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing tokenizer: "+n),e.label=n,this.registeredFunctions[n]=e},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone();for(var r=0,o=n.toArray();rp;p++)c[p]===a&&d++;h+=d/f*l.boost}}this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(this.tokenizerFn(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),d=Object.keys(f),p=d.length,v=0;p>v;v++)l.add(f[d[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,z=/^(.+?)e$/,O=/ll$/,P=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=g,a=m,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,u=k,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=F,a=_,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=z,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=P,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=O,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n', + menu: '
    ' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e; + $e = $.Event(namespace + type); + (args = args || []).unshift($e); + this.$el.trigger.apply(this.$el, args); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function getRegex(patterns, caseSensitive, wordsOnly) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + escapedPatterns.push(_.escapeRegExChars(patterns[i])); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
    "); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = o.name || nameGenerator(); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", this.name, suggestions, false); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", this.name, suggestions, true); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + rendered += suggestions.length; + that._append(query, suggestions.slice(0, that.limit - rendered)); + that.async && that.trigger("asyncReceived", query); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
    "); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion || suggestionTemplate + }; + function suggestionTemplate(context) { + return $("
    ").text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
    ").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, isDatasetEmpty); + function isDatasetEmpty(dataset) { + return dataset.isEmpty(); + } + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
    "); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
    "); + $menu = this.menu.$node || $("
    "); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) { + this._updateHint(); + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, payload, cancelMove; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + payload = data ? data.obj : null; + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", payload)) { + this.menu.setCursor($candidate); + if (data) { + this.input.setInputValue(data.val); + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", payload); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(newVal); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop("readonly", true).removeAttr("id name placeholder required").attr({ + autocomplete: "off", + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + autocomplete: "off", + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file diff --git a/docs/search.json b/docs/search.json new file mode 100644 index 0000000..3f6d5e8 --- /dev/null +++ b/docs/search.json @@ -0,0 +1 @@ +{"Structs/BigInt/Words.html#/s:s10CollectionP5count13IndexDistanceQzv":{"name":"count","parent_name":"Words"},"Structs/BigInt/Words.html#/s:s22RandomAccessCollectionP7indices7IndicesQzv":{"name":"indices","parent_name":"Words"},"Structs/BigInt/Words.html#/s:s14_IndexableBaseP10startIndex0D0Qzv":{"name":"startIndex","parent_name":"Words"},"Structs/BigInt/Words.html#/s:s14_IndexableBaseP8endIndex0D0Qzv":{"name":"endIndex","parent_name":"Words"},"Structs/BigInt/Sign.html#/s:6BigIntAAV4SignO4plusA2DmF":{"name":"plus","abstract":"

    Undocumented

    ","parent_name":"Sign"},"Structs/BigInt/Sign.html#/s:6BigIntAAV4SignO5minusA2DmF":{"name":"minus","abstract":"

    Undocumented

    ","parent_name":"Sign"},"Structs/BigInt/Sign.html":{"name":"Sign","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV4Worda":{"name":"Word","abstract":"

    The type representing a digit in BigInt‘s underlying number system.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP8isSignedSbvZ":{"name":"isSigned","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV9magnitudeAA0A4UIntVv":{"name":"magnitude","abstract":"

    The absolute value of this integer.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV4signAB4SignOv":{"name":"sign","abstract":"

    True iff the value of this integer is negative.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVA2B4SignO4sign_AA0A4UIntV9magnitudetcfc":{"name":"init(sign:magnitude:)","abstract":"

    Initializes a new big integer with the provided absolute number and sign flag.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV6isZeroSbv":{"name":"isZero","abstract":"

    Return true iff this integer is zero.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV6signumAByF":{"name":"signum()","abstract":"

    Returns -1 if this value is negative and 1 if it’s positive; otherwise, 0.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP1topxxFZ":{"name":"~(_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1aoiA2Bz_ABtFZ":{"name":"&(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1ooiA2Bz_ABtFZ":{"name":"|(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1xoiA2Bz_ABtFZ":{"name":"^(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP2aeoiyxz_xtFZ":{"name":"&=(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP2oeoiyxz_xtFZ":{"name":"|=(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP2xeoiyxz_xtFZ":{"name":"^=(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV21isStrongProbablePrimeSbABF":{"name":"isStrongProbablePrime(_:)","abstract":"

    Returns true iff this integer passes the strong probable prime test for the specified base.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV7isPrimeSbSi6rounds_tF":{"name":"isPrime(rounds:)","abstract":"

    Returns true if this integer is probably prime. Returns false if this integer is definitely not prime.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP8bitWidthSiv":{"name":"bitWidth","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP20trailingZeroBitCountSiv":{"name":"trailingZeroBitCount","parent_name":"BigInt"},"Structs/BigInt/Words.html":{"name":"Words","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP5words5WordsQzv":{"name":"words","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABx5words_tcs8SequenceRzSu7ElementRtzlufc":{"name":"init(words:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV12appendHashesy7SipHash0E6HasherVz2to_tF":{"name":"appendHashes(to:)","abstract":"

    Append this BigInt to the specified hasher.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerPxSgqd__7exactly_tcs0A13FloatingPointRd__lufc":{"name":"init(exactly:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerPxqd__cs0A13FloatingPointRd__lufc":{"name":"init(_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13SignedNumericP6negateyyF":{"name":"negate()","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1soiA2B_ABtFZ":{"name":"-(_:_:)","abstract":"

    Subtract b from a and return the result.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV2seoiyABz_ABtFZ":{"name":"-=(_:_:)","abstract":"

    Subtract b from a in place.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV20quotientAndRemainderAB0C0_AB9remaindertAB10dividingBy_tF":{"name":"quotientAndRemainder(dividingBy:)","abstract":"

    Divide this integer by y and return the resulting quotient and remainder.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1doiA2B_ABtFZ":{"name":"/(_:_:)","abstract":"

    Divide a by b and return the quotient. Traps if b is zero.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1roiA2B_ABtFZ":{"name":"%(_:_:)","abstract":"

    Divide a by b and return the remainder. The result has the same sign as a.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV7modulusA2BF":{"name":"modulus(_:)","abstract":"

    Return the result of a mod b. The result is always a nonnegative integer that is less than the absolute value of b.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV2deoiyABz_ABtFZ":{"name":"/=(_:_:)","abstract":"

    Divide a by b storing the quotient in a.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV2reoiyABz_ABtFZ":{"name":"%=(_:_:)","abstract":"

    Divide a by b storing the remainder in a.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABycfc":{"name":"init()","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVAbA0A4UIntVcfc":{"name":"init(_:)","abstract":"

    Initializes a new signed big integer with the same value as the specified unsigned big integer.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerPxqd__csAARd__lufc":{"name":"init(_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s7NumericPxSgqd__7exactly_tcs13BinaryIntegerRd__lufc":{"name":"init(exactly:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerPxqd__8clamping_tcsAARd__lufc":{"name":"init(clamping:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerPxqd__18truncatingIfNeeded_tcsAARd__lufc":{"name":"init(truncatingIfNeeded:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABs5Int64V14integerLiteral_tcfc":{"name":"init(integerLiteral:)","abstract":"

    Initialize a new big integer from an integer literal.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV2eeoiSbAB_ABtFZ":{"name":"==(_:_:)","abstract":"

    Return true iff a is equal to b.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1loiSbAB_ABtFZ":{"name":"<(_:_:)","abstract":"

    Return true iff a is less than b.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABSgx_Si5radixtcs14StringProtocolRzlufc":{"name":"init(_:radix:)","abstract":"

    Initialize a big integer from an ASCII representation in a given radix. Numerals above 9 are represented by","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABs7UnicodeO6ScalarV07unicodeD7Literal_tcfc":{"name":"init(unicodeScalarLiteral:)","abstract":"

    Initialize a new big integer from a Unicode scalar.","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABSS30extendedGraphemeClusterLiteral_tcfc":{"name":"init(extendedGraphemeClusterLiteral:)","abstract":"

    Initialize a new big integer from an extended grapheme cluster.","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAVABSS13stringLiteral_tcfc":{"name":"init(stringLiteral:)","abstract":"

    Initialize a new big integer from a decimal number represented by a string literal of arbitrary length.","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV11descriptionSSv":{"name":"description","abstract":"

    Return the decimal representation of this integer.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV25customPlaygroundQuickLooks0deF0Ov":{"name":"customPlaygroundQuickLook","abstract":"

    Return the playground quick look representation of this integer.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1moiA2B_ABtFZ":{"name":"*(_:_:)","abstract":"

    Multiply a with b and return the result.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV2meoiyABz_ABtFZ":{"name":"*=(_:_:)","abstract":"

    Multiply a with b in place.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV8advancedA2B2by_tF":{"name":"advanced(by:)","abstract":"

    Returns self + n.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV8distanceA2B2to_tF":{"name":"distance(to:)","abstract":"

    Returns other - self.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV3alloiA2B_ABtFZ":{"name":"&<<(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV4alleoiyABz_ABtFZ":{"name":"&<<=(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV3aggoiA2B_ABtFZ":{"name":"&>>(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV4aggeoiyABz_ABtFZ":{"name":"&>>=(_:_:)","abstract":"

    Undocumented

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP2lloixx_qd__tsAARd__lFZ":{"name":"<<(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP3lleoiyxz_qd__tsAARd__lFZ":{"name":"<<=(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP2ggoixx_qd__tsAARd__lFZ":{"name":">>(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s13BinaryIntegerP3ggeoiyxz_qd__tsAARd__lFZ":{"name":">>=(_:_:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV21greatestCommonDivisorA2B4with_tF":{"name":"greatestCommonDivisor(with:)","abstract":"

    Returns the greatest common divisor of a and b.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV7inverseABSgABF":{"name":"inverse(_:)","abstract":"

    Returns the multiplicative inverse of this integer in modulo modulus arithmetic,","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV10squareRootAByF":{"name":"squareRoot()","abstract":"

    Returns the integer square root of a big integer; i.e., the largest integer whose square isn’t greater than value.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:s9DecodablePxs7Decoder_p4from_tKcfc":{"name":"init(from:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:s9EncodableP6encodeys7Encoder_p2to_tKF":{"name":"encode(to:)","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV5powerABSiF":{"name":"power(_:)","abstract":"

    Returns this integer raised to the power exponent.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV5powerA2B_AB7modulustF":{"name":"power(_:modulus:)","abstract":"

    Returns the remainder of this integer raised to the power exponent in modulo arithmetic under modulus.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV1poiA2B_ABtFZ":{"name":"+(_:_:)","abstract":"

    Add a to b and return the result.

    ","parent_name":"BigInt"},"Structs/BigInt.html#/s:6BigIntAAV2peoiyABz_ABtFZ":{"name":"+=(_:_:)","abstract":"

    Add b to a in place.

    ","parent_name":"BigInt"},"Structs/BigUInt/Words.html#/s:s14_IndexableBaseP10startIndex0D0Qzv":{"name":"startIndex","parent_name":"Words"},"Structs/BigUInt/Words.html#/s:s14_IndexableBaseP8endIndex0D0Qzv":{"name":"endIndex","parent_name":"Words"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV4Worda":{"name":"Word","abstract":"

    The type representing a digit in BigUInt‘s underlying number system.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACycfc":{"name":"init()","abstract":"

    Initializes a new BigUInt with value 0.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACSaySuG5words_tcfc":{"name":"init(words:)","abstract":"

    Initializes a new BigUInt with the specified digits. The digits are ordered from least to most significant.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1topA2CFZ":{"name":"~(_:)","abstract":"

    Return the ones’ complement of a.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2oeoiyACz_ACtFZ":{"name":"|=(_:_:)","abstract":"

    Calculate the bitwise OR of a and b, and store the result in a.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2aeoiyACz_ACtFZ":{"name":"&=(_:_:)","abstract":"

    Calculate the bitwise AND of a and b and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2xeoiyACz_ACtFZ":{"name":"^=(_:_:)","abstract":"

    Calculate the bitwise XOR of a and b and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV13randomIntegerACSi16withMaximumWidth_tFZ":{"name":"randomInteger(withMaximumWidth:)","abstract":"

    Create a big integer consisting of width uniformly distributed random bits.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV13randomIntegerACSi14withExactWidth_tFZ":{"name":"randomInteger(withExactWidth:)","abstract":"

    Create a big integer consisting of width-1 uniformly distributed random bits followed by a one bit.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV13randomIntegerA2C8lessThan_tFZ":{"name":"randomInteger(lessThan:)","abstract":"

    Create a uniformly distributed random integer that’s less than the specified limit.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV21isStrongProbablePrimeSbACF":{"name":"isStrongProbablePrime(_:)","abstract":"

    Returns true iff this integer passes the strong probable prime test for the specified base.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV7isPrimeSbSi6rounds_tF":{"name":"isPrime(rounds:)","abstract":"

    Returns true if this integer is probably prime. Returns false if this integer is definitely not prime.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV8bitWidthSiv":{"name":"bitWidth","abstract":"

    The minimum number of bits required to represent this integer in binary.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV19leadingZeroBitCountSiv":{"name":"leadingZeroBitCount","abstract":"

    The number of leading zero bits in the binary representation of this integer in base 2^(Word.bitWidth).","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV20trailingZeroBitCountSiv":{"name":"trailingZeroBitCount","abstract":"

    The number of trailing zero bits in the binary representation of this integer.

    ","parent_name":"BigUInt"},"Structs/BigUInt/Words.html":{"name":"Words","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerP5words5WordsQzv":{"name":"words","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACx5words_tcs8SequenceRzSu7ElementRtzlufc":{"name":"init(words:)","abstract":"

    Undocumented

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV12appendHashesy7SipHash0F6HasherVz2to_tF":{"name":"appendHashes(to:)","abstract":"

    Append this BigUInt to the specified hasher.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerPxSgqd__7exactly_tcs0A13FloatingPointRd__lufc":{"name":"init(exactly:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerPxqd__cs0A13FloatingPointRd__lufc":{"name":"init(_:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV25subtractReportingOverflowSbAC_Si9shiftedBytF":{"name":"subtractReportingOverflow(_:shiftedBy:)","abstract":"

    Subtract other from this integer in place, and return a flag indicating if the operation caused an","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV28subtractingReportingOverflowAC12partialValue_Sb8overflowtAC_Si9shiftedBytF":{"name":"subtractingReportingOverflow(_:shiftedBy:)","abstract":"

    Subtract other from this integer, returning the difference and a flag indicating arithmetic overflow.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV28subtractingReportingOverflowAC12partialValue_Sb8overflowtACF":{"name":"subtractingReportingOverflow(_:)","abstract":"

    Subtracts other from self, returning the result and a flag indicating arithmetic overflow.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV8subtractyAC_Si9shiftedBytF":{"name":"subtract(_:shiftedBy:)","abstract":"

    Subtract other from this integer in place.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV11subtractingA2C_Si9shiftedBytF":{"name":"subtracting(_:shiftedBy:)","abstract":"

    Subtract b from this integer, and return the difference.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV9decrementySi9shiftedBy_tF":{"name":"decrement(shiftedBy:)","abstract":"

    Decrement this integer by one.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1soiA2C_ACtFZ":{"name":"-(_:_:)","abstract":"

    Subtract b from a and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2seoiyACz_ACtFZ":{"name":"-=(_:_:)","abstract":"

    Subtract b from a and store the result in a.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV20quotientAndRemainderAC0D0_AC9remaindertAC10dividingBy_tF":{"name":"quotientAndRemainder(dividingBy:)","abstract":"

    Divide this integer by y and return the resulting quotient and remainder.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1doiA2C_ACtFZ":{"name":"/(_:_:)","abstract":"

    Divide x by y and return the quotient.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1roiA2C_ACtFZ":{"name":"%(_:_:)","abstract":"

    Divide x by y and return the remainder.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2deoiyACz_ACtFZ":{"name":"/=(_:_:)","abstract":"

    Divide x by y and store the quotient in x.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2reoiyACz_ACtFZ":{"name":"%=(_:_:)","abstract":"

    Divide x by y and store the remainder in x.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s7NumericPxSgqd__7exactly_tcs13BinaryIntegerRd__lufc":{"name":"init(exactly:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerPxqd__csAARd__lufc":{"name":"init(_:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerPxqd__18truncatingIfNeeded_tcsAARd__lufc":{"name":"init(truncatingIfNeeded:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerPxqd__8clamping_tcsAARd__lufc":{"name":"init(clamping:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACs6UInt64V14integerLiteral_tcfc":{"name":"init(integerLiteral:)","abstract":"

    Initialize a new big integer from an integer literal.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerP8isSignedSbvZ":{"name":"isSigned","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV6signumACyF":{"name":"signum()","abstract":"

    Returns -1 if this value is negative and 1 if it’s positive; otherwise, 0.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV9subscriptSuSici":{"name":"subscript(_:)","abstract":"

    Get or set a digit at a given index.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV7compareSC16ComparisonResultOAC_ACtFZ":{"name":"compare(_:_:)","abstract":"

    Compare a to b and return an NSComparisonResult indicating their order.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2eeoiSbAC_ACtFZ":{"name":"==(_:_:)","abstract":"

    Return true iff a is equal to b.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1loiSbAC_ACtFZ":{"name":"<(_:_:)","abstract":"

    Return true iff a is less than b.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACSgSS_Si5radixtcfc":{"name":"init(_:radix:)","abstract":"

    Initialize a big integer from an ASCII representation in a given radix. Numerals above 9 are represented by","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACSgs9SubstringV_Si5radixtcfc":{"name":"init(_:radix:)","abstract":"

    Undocumented

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACs7UnicodeO6ScalarV07unicodeE7Literal_tcfc":{"name":"init(unicodeScalarLiteral:)","abstract":"

    Initialize a new big integer from a Unicode scalar.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACSS30extendedGraphemeClusterLiteral_tcfc":{"name":"init(extendedGraphemeClusterLiteral:)","abstract":"

    Initialize a new big integer from an extended grapheme cluster.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACSS13stringLiteral_tcfc":{"name":"init(stringLiteral:)","abstract":"

    Initialize a new big integer from a decimal number represented by a string literal of arbitrary length.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV11descriptionSSv":{"name":"description","abstract":"

    Return the decimal representation of this integer.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV25customPlaygroundQuickLooks0efG0Ov":{"name":"customPlaygroundQuickLook","abstract":"

    Return the playground quick look representation of this integer.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVACs22UnsafeRawBufferPointerVcfc":{"name":"init(_:)","abstract":"

    Undocumented

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntVAC10Foundation4DataVcfc":{"name":"init(_:)","abstract":"

    Initializes an integer from the bits stored inside a piece of Data.","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV9serialize10Foundation4DataVyF":{"name":"serialize()","abstract":"

    Return a Data value that contains the base-256 representation of this integer, in network (big-endian) byte order.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV8multiplyySu6byWord_tF":{"name":"multiply(byWord:)","abstract":"

    Multiply this big integer by a single word, and store the result in place of the original big integer.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV10multipliedACSu6byWord_tF":{"name":"multiplied(byWord:)","abstract":"

    Multiply this big integer by a single Word, and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV14multiplyAndAddyAC_SuSi9shiftedBytF":{"name":"multiplyAndAdd(_:_:shiftedBy:)","abstract":"

    Multiply x by y, and add the result to this integer, optionally shifted shift words to the left.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV10multipliedA2C2by_tF":{"name":"multiplied(by:)","abstract":"

    Multiply this integer by y and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV25directMultiplicationLimitSivZ":{"name":"directMultiplicationLimit","abstract":"

    Multiplication switches to an asymptotically better recursive algorithm when arguments have more words than this limit.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1moiA2C_ACtFZ":{"name":"*(_:_:)","abstract":"

    Multiply a by b and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2meoiyACz_ACtFZ":{"name":"*=(_:_:)","abstract":"

    Multiply a by b and store the result in a.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV6Stridea":{"name":"Stride","abstract":"

    A type that can represent the distance between two values ofa BigUInt.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV8advancedAc2AV2by_tF":{"name":"advanced(by:)","abstract":"

    Adds n to self and returns the result. Traps if the result would be less than zero.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV8distanceA2AVAC2to_tF":{"name":"distance(to:)","abstract":"

    Returns the (potentially negative) difference between self and other as a BigInt. Never traps.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerP3ggeoiyxz_qd__tsAARd__lFZ":{"name":">>=(_:_:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerP3lleoiyxz_qd__tsAARd__lFZ":{"name":"<<=(_:_:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerP2ggoixx_qd__tsAARd__lFZ":{"name":">>(_:_:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s13BinaryIntegerP2lloixx_qd__tsAARd__lFZ":{"name":"<<(_:_:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV21greatestCommonDivisorA2C4with_tF":{"name":"greatestCommonDivisor(with:)","abstract":"

    Returns the greatest common divisor of self and b.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV7inverseACSgACF":{"name":"inverse(_:)","abstract":"

    Returns the multiplicative inverse of this integer in modulo modulus arithmetic,","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV10squareRootACyF":{"name":"squareRoot()","abstract":"

    Returns the integer square root of a big integer; i.e., the largest integer whose square isn’t greater than value.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s9DecodablePxs7Decoder_p4from_tKcfc":{"name":"init(from:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:s9EncodableP6encodeys7Encoder_p2to_tKF":{"name":"encode(to:)","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV5powerACSiF":{"name":"power(_:)","abstract":"

    Returns this integer raised to the power exponent.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV5powerA2C_AC7modulustF":{"name":"power(_:modulus:)","abstract":"

    Returns the remainder of this integer raised to the power exponent in modulo arithmetic under modulus.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV1poiA2C_ACtFZ":{"name":"+(_:_:)","abstract":"

    Add a and b together and return the result.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html#/s:6BigInt0A4UIntV2peoiyACz_ACtFZ":{"name":"+=(_:_:)","abstract":"

    Add a and b together, and store the sum in a.

    ","parent_name":"BigUInt"},"Structs/BigUInt.html":{"name":"BigUInt","abstract":"

    An arbitary precision unsigned integer type, also known as a big integer.

    "},"Structs/BigInt.html":{"name":"BigInt","abstract":"

    An arbitary precision signed integer type, also known as a big integer.

    "},"Extensions/String.html#/s:SS6BigIntESSAA0A4UIntVcfc":{"name":"init(_:)","abstract":"

    Initialize a new string with the base-10 representation of an unsigned big integer.

    ","parent_name":"String"},"Extensions/String.html#/s:SS6BigIntESSAA0A4UIntV_Si5radixSb9uppercasetcfc":{"name":"init(_:radix:uppercase:)","abstract":"

    Initialize a new string representing an unsigned big integer in the given radix (base).

    ","parent_name":"String"},"Extensions/String.html#/s:SS6BigIntESSA2AV_Si5radixSb9uppercasetcfc":{"name":"init(_:radix:uppercase:)","abstract":"

    Initialize a new string representing a signed big integer in the given radix (base).

    ","parent_name":"String"},"Extensions/BinaryFloatingPoint.html#/s:s19BinaryFloatingPointP6BigIntsAARzs17FixedWidthInteger11RawExponentRpzsAD0I11SignificandRpzlExA2CVcfc":{"name":"init(_:)","abstract":"

    Undocumented

    ","parent_name":"BinaryFloatingPoint"},"Extensions/BinaryFloatingPoint.html#/s:s19BinaryFloatingPointP6BigIntsAARzs17FixedWidthInteger11RawExponentRpzsAD0I11SignificandRpzlExAC0D4UIntVcfc":{"name":"init(_:)","abstract":"

    Undocumented

    ","parent_name":"BinaryFloatingPoint"},"Extensions/BinaryFloatingPoint.html":{"name":"BinaryFloatingPoint"},"Extensions/String.html":{"name":"String"},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json index 5874735..f44920a 100644 --- a/docs/undocumented.json +++ b/docs/undocumented.json @@ -1,6 +1,124 @@ { "warnings": [ - + { + "file": "/Users/andrew/work/BigInt/sources/BigInt.swift", + "line": 32, + "symbol": "BigInt.Sign", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/BigInt.swift", + "line": 33, + "symbol": "BigInt.Sign.plus", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/BigInt.swift", + "line": 34, + "symbol": "BigInt.Sign.minus", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Bitwise Ops.swift", + "line": 59, + "symbol": "BigInt.&(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Bitwise Ops.swift", + "line": 76, + "symbol": "BigInt.|(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Bitwise Ops.swift", + "line": 93, + "symbol": "BigInt.^(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Data Conversion.swift", + "line": 14, + "symbol": "BigUInt.init(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Floating Point Conversion.swift", + "line": 45, + "symbol": "BinaryFloatingPoint.init(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Floating Point Conversion.swift", + "line": 70, + "symbol": "BinaryFloatingPoint.init(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Integer Conversion.swift", + "line": 42, + "symbol": "BigInt.init()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Shifts.swift", + "line": 168, + "symbol": "BigInt.&<<(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Shifts.swift", + "line": 172, + "symbol": "BigInt.&<<=(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Shifts.swift", + "line": 176, + "symbol": "BigInt.&>>(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Shifts.swift", + "line": 180, + "symbol": "BigInt.&>>=(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/String Conversion.swift", + "line": 44, + "symbol": "BigUInt.init(_:radix:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Words and Bits.swift", + "line": 105, + "symbol": "BigUInt.init(words:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/andrew/work/BigInt/sources/Words and Bits.swift", + "line": 192, + "symbol": "BigInt.init(words:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + } ], - "source_directory": "/Users/lorentey/Git/BigInt" + "source_directory": "/Users/andrew/work/BigInt" } \ No newline at end of file From 6e0dca72a212907719cb1f0db28bbf3924ab2866 Mon Sep 17 00:00:00 2001 From: Andrew Hannon Date: Tue, 10 Oct 2017 10:48:24 -0400 Subject: [PATCH 2/2] Bumped build and version numbers --- BigInt.podspec | 2 +- CHANGELOG.md | 7 +++++++ version.xcconfig | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/BigInt.podspec b/BigInt.podspec index f907a03..6518b15 100644 --- a/BigInt.podspec +++ b/BigInt.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |spec| spec.name = 'BigInt' - spec.version = '3.0.0' + spec.version = '3.0.1' spec.ios.deployment_target = "8.0" spec.osx.deployment_target = "10.9" spec.tvos.deployment_target = "9.0" diff --git a/CHANGELOG.md b/CHANGELOG.md index 9581d98..7a5de4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# 3.0.1 (2017-10-10) + +This release contains the following bug fixes: + +- Issue #27 — changing scope of `BigUInt` methods `kind` and `storage` to be `fileprivate` +- Making `subscript` method of `BigUInt` public + # 3.0.0 (2017-09-07) This is a major release upgrading BigInt to the new integer protocols introduced in Swift 4 as part of [SE-0104, Protocol-oriented integers][se-0104]. diff --git a/version.xcconfig b/version.xcconfig index 82cc4b5..3bf2c7c 100644 --- a/version.xcconfig +++ b/version.xcconfig @@ -1,6 +1,6 @@ // Increment the build number whenever you modify the version string. -VERSION_STRING = 3.0.0 -BUILD_NUMBER = 8 +VERSION_STRING = 3.0.1 +BUILD_NUMBER = 9 PROJECT_NAME = BigInt BUNDLE_IDENTIFIER_BASE = org.attaswift.$(PROJECT_NAME)