This library provides a UInt256 struct that conforms nicely to Swift’s FixedWidthInteger and UnsignedInteger protocols. According to Apple, the two are the necessary top level protocols for an UInt member: here
It supports a complete set of arithmetic operations, as well as properties and functions that are common to other UInt family members such as UInt64, UInt32, UInt8, etc. The library leverages Karatsuba fast multiplication algorithm, Divide and Conquer division algorithm, Barrett Algorithm for division and other efficient algos for other operators. Other features include integer literal representation (ExpressibleByIntegerLiteral), default description (CustomStringConvertible) and Hashable.
The library is written entirely in Swift 4. It can be installed as a Swift Package, a Carthage package or a CocoaPod. And a playground is also included as a testbench.
Please feel free to submit new feature requests and report issues here on GitHub.
Please use the playground to try out all the features!
Swift Protocol Conformance
The main struct UInt256 conforms strictly to the following protocols:
FixedWidthInteger
UnsignedInteger
BinaryInteger
Numeric
Comparable
Equatable
CustomStringConvertible
Hashable
Requirements
iOS 8.0+ / macOS 10.10+
Xcode 8.0+
Swift 4
Communication
If you need any help or have a feature request, please open an issue here on GitHub;
if you found a bug or want to help with the development, please submit a pull request.
All contributions are welcome!
Installation
Carthage
First, make sure have Carthage installed:
brew update
brew install carthage
To integrate this library into your Xcode project, simply put the following line into
your carfile:
github "hyugit/UInt256"
Finally, run carthage update to build the framework, and drag the built framework
(either UInt256_iOS.framework or UInt256_macOS.framework) into your Xcode project
Swift Package Manager
This library supports Swift Package Manager as well. If you have your swift package
config set up already, please add the following line to your Package.swift:
Have Xcode open, go to your new UInt256 subdirectory in Finder, drag
UInt256.xcodeproj into the project navigator of your project. Remember to embed
the framework to your build target.
Next steps…
add documentation
look into leveraging GPU/Metal
benchmark
make UInt256 conform to FixedWidthInteger
add an example, preferably through a playground
add CocoaPods support
more tests, test coverage, corner cases, lint, code review
automate build and test runs
karatsuba multiplication
fast modulo, division, and other algos
License
This library is released under the MIT license. Please see LICENSE
UInt256
A UInt256 library written in Swift 4, inspired by CryptoCoinSwift/UInt256
Features
This library provides a UInt256 struct that conforms nicely to Swift’s FixedWidthInteger and UnsignedInteger protocols. According to Apple, the two are the necessary top level protocols for an UInt member: here
It supports a complete set of arithmetic operations, as well as properties and functions that are common to other UInt family members such as
UInt64
,UInt32
,UInt8
, etc. The library leverages Karatsuba fast multiplication algorithm, Divide and Conquer division algorithm, Barrett Algorithm for division and other efficient algos for other operators. Other features include integer literal representation (ExpressibleByIntegerLiteral
), default description (CustomStringConvertible
) andHashable
.The library is written entirely in Swift 4. It can be installed as a Swift Package, a Carthage package or a CocoaPod. And a playground is also included as a testbench.
Please feel free to submit new feature requests and report issues here on GitHub.
Please use the playground to try out all the features!
Swift Protocol Conformance
The main struct UInt256 conforms strictly to the following protocols:
Requirements
Communication
If you need any help or have a feature request, please open an issue here on GitHub; if you found a bug or want to help with the development, please submit a pull request. All contributions are welcome!
Installation
Carthage
First, make sure have Carthage installed:
To integrate this library into your Xcode project, simply put the following line into your
carfile
:Finally, run
carthage update
to build the framework, and drag the built framework (eitherUInt256_iOS.framework
orUInt256_macOS.framework
) into your Xcode projectSwift Package Manager
This library supports Swift Package Manager as well. If you have your swift package config set up already, please add the following line to your Package.swift:
CocoaPods
Install CocoaPods following its official guide
To integrate UInt256 into your Xcode project using CocoaPods, specify it in your
Podfile
:And run
pod install
afterwards.Manual installation
You can also add this library manually to your project.
In the terminal, under your top level project directory, add this library as a
git submodule
by running the following command:Have Xcode open, go to your new
UInt256
subdirectory in Finder, dragUInt256.xcodeproj
into the project navigator of your project. Remember to embed the framework to your build target.Next steps…
License
This library is released under the MIT license. Please see LICENSE