b62 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ext/b62/b62.c +46 -0
- data/ext/b62/extconf.rb +3 -0
- data/lib/b62.rb +9 -0
- metadata +52 -0
data/ext/b62/b62.c
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
/*
|
2
|
+
* b62.c
|
3
|
+
*
|
4
|
+
* Original function by Jason Hullinger (2010)
|
5
|
+
* Original ruby extension by Teng Siong Ong (2011)
|
6
|
+
* Refactored by Adrià Planas (2013)
|
7
|
+
*
|
8
|
+
*/
|
9
|
+
|
10
|
+
#include <stdlib.h>
|
11
|
+
#include <ruby.h>
|
12
|
+
|
13
|
+
static const char b62_table[] = { "0123456789"
|
14
|
+
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
15
|
+
"abcdefghijklmnopqrstuvwxyz" };
|
16
|
+
|
17
|
+
int encode(u_int64_t input, char* ptr)
|
18
|
+
{
|
19
|
+
short i = 11;
|
20
|
+
u_int64_t r = 0;
|
21
|
+
|
22
|
+
ptr[i] = '\0';
|
23
|
+
|
24
|
+
do
|
25
|
+
{
|
26
|
+
i--;
|
27
|
+
r = input % 62;
|
28
|
+
input = (input - r) / 62;
|
29
|
+
ptr[i] = b62_table[r];
|
30
|
+
}while(input > 0);
|
31
|
+
|
32
|
+
return i;
|
33
|
+
}
|
34
|
+
|
35
|
+
static VALUE encode62(VALUE self, VALUE arg)
|
36
|
+
{
|
37
|
+
char output[12];
|
38
|
+
|
39
|
+
return rb_str_new2(&output[encode(NUM2ULL(arg), output)]);
|
40
|
+
}
|
41
|
+
|
42
|
+
void Init_b62(void)
|
43
|
+
{
|
44
|
+
VALUE klass = rb_define_class("B62", rb_cObject);
|
45
|
+
rb_define_singleton_method(klass, "to_b62", encode62, 1);
|
46
|
+
}
|
data/ext/b62/extconf.rb
ADDED
data/lib/b62.rb
ADDED
metadata
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: b62
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Adrià Planas
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-12 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: ! " Adds a to_b62 function to the Integer class that encodes \n any
|
15
|
+
integer between 0 and 18446744073709551615 to base 62.\n The encode function is
|
16
|
+
implemented as a C extension so it's\n much faster than a plain ruby implementation.\n"
|
17
|
+
email:
|
18
|
+
- adriaplanas@liquidcodeworks.com
|
19
|
+
executables: []
|
20
|
+
extensions:
|
21
|
+
- ext/b62/extconf.rb
|
22
|
+
extra_rdoc_files: []
|
23
|
+
files:
|
24
|
+
- lib/b62.rb
|
25
|
+
- ext/b62/b62.c
|
26
|
+
- ext/b62/extconf.rb
|
27
|
+
homepage: https://github.com/planas/b62
|
28
|
+
licenses: []
|
29
|
+
post_install_message:
|
30
|
+
rdoc_options: []
|
31
|
+
require_paths:
|
32
|
+
- lib
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
requirements: []
|
46
|
+
rubyforge_project:
|
47
|
+
rubygems_version: 1.8.24
|
48
|
+
signing_key:
|
49
|
+
specification_version: 3
|
50
|
+
summary: Dead simple lightning fast base 62 encoder.
|
51
|
+
test_files: []
|
52
|
+
has_rdoc:
|