A UInt256 library written in Swift 4, heavily influenced by CryptoCoinSwift/UInt256
This library provides a UInt256 struct that conforms nicely to Swift's FixedWidthInteger and UnsignedInteger protocols. According to Apple, these two should be the top level protocol: see 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 and other efficient/fast algos for other operators. Other features include integer literal representation (ExpressibleByIntegerLiteral
), default description (CustomStringConvertible
) and Hashable
.
The library is written 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. ๐
The main struct UInt256 conforms strictly to the following protocols:
- FixedWidthInteger
- UnsignedInteger
- BinaryInteger
- Numeric
- Comparable
- Equatable
- CustomStringConvertible
- Hashable
- iOS 8.0+ / macOS 10.10+
- Xcode 8.0+
- Swift 4
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!
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 "mryu87/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
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:
dependencies: [
.package(url: "https://github.com/mryu87/UInt256.git", from: "4.0.0")
]
Install CocoaPods following its official guide
To integrate UInt256 into your Xcode project using CocoaPods, specify it in your Podfile
:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!
target '<Your Target Name>' do
pod 'UInt256', :git => 'https://github.com/mryu87/UInt256.git'
end
And run pod install
afterwards.
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:
git submodule add https://github.com/mryu87/UInt256.git
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.
- add documentation
- 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
This library is released under the MIT license. Please see LICENSE