프로젝트

일반

사용자정보

통계
| 개정판:

root / HServer / 00.Server / 00.Program / node_modules / yeast / index.js

이력 | 보기 | 이력해설 | 다운로드 (1.32 KB)

1
'use strict';
2

    
3
var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')
4
  , length = 64
5
  , map = {}
6
  , seed = 0
7
  , i = 0
8
  , prev;
9

    
10
/**
11
 * Return a string representing the specified number.
12
 *
13
 * @param {Number} num The number to convert.
14
 * @returns {String} The string representation of the number.
15
 * @api public
16
 */
17
function encode(num) {
18
  var encoded = '';
19

    
20
  do {
21
    encoded = alphabet[num % length] + encoded;
22
    num = Math.floor(num / length);
23
  } while (num > 0);
24

    
25
  return encoded;
26
}
27

    
28
/**
29
 * Return the integer value specified by the given string.
30
 *
31
 * @param {String} str The string to convert.
32
 * @returns {Number} The integer value represented by the string.
33
 * @api public
34
 */
35
function decode(str) {
36
  var decoded = 0;
37

    
38
  for (i = 0; i < str.length; i++) {
39
    decoded = decoded * length + map[str.charAt(i)];
40
  }
41

    
42
  return decoded;
43
}
44

    
45
/**
46
 * Yeast: A tiny growing id generator.
47
 *
48
 * @returns {String} A unique id.
49
 * @api public
50
 */
51
function yeast() {
52
  var now = encode(+new Date());
53

    
54
  if (now !== prev) return seed = 0, prev = now;
55
  return now +'.'+ encode(seed++);
56
}
57

    
58
//
59
// Map each character to its index.
60
//
61
for (; i < length; i++) map[alphabet[i]] = i;
62

    
63
//
64
// Expose the `yeast`, `encode` and `decode` functions.
65
//
66
yeast.encode = encode;
67
yeast.decode = decode;
68
module.exports = yeast;