* luci/core: util.lua: added parse_units() helper function
authorJo-Philipp Wich <jow@openwrt.org>
Mon, 2 Jun 2008 18:02:00 +0000 (18:02 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Mon, 2 Jun 2008 18:02:00 +0000 (18:02 +0000)
libs/core/luasrc/util.lua

index cc8e7a70bc5e5584d81d56a5d9e3c6ed30b63bb1..6b474f6f2dc9d2b35029acf96fa3805212f4a439 100644 (file)
@@ -287,4 +287,47 @@ function validate(value, cast_number, cast_int)
        end
        
        return value
-end
\ No newline at end of file
+end
+
+
+-- Parse units from a string and return integer value
+function parse_units(ustr)
+
+        local val = 0
+
+        -- unit map
+        local map = {
+                -- date stuff
+                y   = 60 * 60 * 24 * 366,
+                m   = 60 * 60 * 24 * 31,
+                w   = 60 * 60 * 24 * 7,
+                d   = 60 * 60 * 24,
+                h   = 60 * 60,
+
+                -- storage sizes
+                kb  = 1024,
+                mb  = 1024 * 1024,
+                gb  = 1024 * 1024 * 1024,
+
+                -- storage sizes (si)
+                kib = 1000,
+                mib = 1000 * 1000,
+                gib = 1000 * 1000 * 1000
+        }
+
+        -- parse input string
+        for spec in ustr:lower():gmatch("[0-9%.]+[a-zA-Z]*") do
+
+                local num = spec:gsub("[^0-9%.]+$","")
+                local spn = spec:gsub("^[0-9%.]+", "")
+
+                if map[spn] or map[spn:sub(1,1)] then
+                        val = val + num * ( map[spn] or map[spn:sub(1,1)] )
+                else
+                        val = val + num
+                end
+        end
+
+
+       return val
+end