Advertisement
YellowAfterlife

Different small module extensions for Killa

May 10th, 2012
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     Different small module extensions for Killa
  3.     by YellowAfterlife
  4. */
  5. // 'shortcut' functions:
  6. global.typeof = global.type
  7. // Returns [nvalue] if [value] is null, [value] otherwise.
  8. global.ifnull = function(value, nvalue) {
  9.     if (value == null) { return nvalue }
  10.     return value
  11. }
  12. /*
  13.     math module:
  14. */
  15. // returns sign of value (-1/0/+1)
  16. global.math.sign = function(n) {
  17.     if (n > 0) {
  18.         return 1
  19.     } else if (n < 0) {
  20.         return -1
  21.     } else {
  22.         return 0
  23.     }
  24. }
  25. // adds value to number. returns null if type coercion fails
  26. global.math.add = function(a, b) {
  27.     if (typeof(b) == 'number') {
  28.         return a + b
  29.     } else if (typeof(b) == 'table') {
  30.         // number + table : add i.indexed values to number
  31.         var c
  32.         for each (var i, v in ipairs(b)) {
  33.             c = tonumber(v)
  34.             if (c == null) { return null }
  35.             a = a + c
  36.         }
  37.         return a
  38.     } else {
  39.         b = tonumber(b)
  40.         if (b == null) { return null }
  41.         return a + b
  42.     }
  43. }
  44. /*
  45.     string module:
  46. */
  47. // string.indexof(string, substring, from)
  48. global.string.indexof = function(s, o, f) {
  49.     return ifnull(string.match(s, o, f), -1)
  50. }
  51. //
  52. global.string.substr = global.string.sub
  53. global.string.add = function(a, b) {
  54.     if (typeof(b) == 'string') {
  55.         return a .. b
  56.     } else if (typeof(b) == 'table') {
  57.         return a .. table.tostring(b)
  58.     } else {
  59.         return a .. tostring(b)
  60.     }
  61. }
  62. /*
  63.     metatable module:
  64. */
  65. // creates a copy of a metatable:
  66. global.table.clone = function(a) {
  67.     var r = { }
  68.     for each (var i, v in pairs(a)) {
  69.         r[i] = v
  70.     }
  71.     return r
  72. }
  73. // creates a copy of metatable, containing only integer indexes:
  74. global.table.iclone = function(a) {
  75.     var r = { }
  76.     for each (var i, v in ipairs(a)) {
  77.         r[i] = v
  78.     }
  79.     return r
  80. }
  81. // adds data to end of metatable:
  82. global.table.add = function(a, b) {
  83.     if (typeof(b) == 'table') {
  84.         for each (var i, v in ipairs(b)) {
  85.             table.insert(a, v)
  86.         }
  87.     } else {
  88.         table.insert(a, b)
  89.     }
  90. }
  91. global.table.tostring = function(t) {
  92.     if (t.tostring) { return t.tostring(t) }
  93.     var r = '{'
  94.     var n = 0
  95.     for each (var i, v in pairs(t)) {
  96.         r = r .. ((n == 0) ? ' ' : ', ') .. tostring(i) .. ': ' .. tostring(v)
  97.         n += 1
  98.     }
  99.     return r .. ' }'
  100. }
  101. // adds values together with type coercion. resulting type is determined by left-most argument.
  102. global.add = function(a, ...) {
  103.     var b = { ... }
  104.     var r = a
  105.     if (typeof(a) == 'string') {
  106.         for each (var i, v in ipairs(b)) {
  107.             r = string.add(r, v)
  108.         }
  109.     } else if (typeof(a) == 'number') {
  110.         for each (var i, v in ipairs(b)) {
  111.             r = math.add(r, v)
  112.         }
  113.     } else if (typeof(a) == 'boolean') {
  114.         // boolean + values : returns if at least one element is true
  115.         if (a) { return a }
  116.         for each (var i, v in ipairs(b)) {
  117.             if (v) { return true }
  118.         }
  119.         return a
  120.     } else if (typeof(a) == 'table') {
  121.         r = table.clone(a)
  122.         for each (var i, v in ipairs(b)) {
  123.             table.add(r, v)
  124.         }
  125.     }
  126.     return r
  127. }
  128. //
  129. print(add('String + Number: ', add('4', 5)))
  130. print(add('Number + String: ', add(5, '4')))
  131. print(add('String + Table: ', add('Text', { 7 })))
  132. print(add('Table + String: ', add({ 7 }, 'Text')))
  133. print(add('Table + Table: ', add({ 1 }, { 2 })))
  134. //
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement