webmcp
diff libraries/atom/atom.lua @ 107:6b435d3c0b14
Backed out changeset bbfbbddf13ad (support for intervals)
author | jbe |
---|---|
date | Sun Nov 04 17:14:49 2012 +0100 (2012-11-04) |
parents | bbfbbddf13ad |
children | ce8fd7767b38 |
line diff
1.1 --- a/libraries/atom/atom.lua Sun Nov 04 04:55:22 2012 +0100 1.2 +++ b/libraries/atom/atom.lua Sun Nov 04 17:14:49 2012 +0100 1.3 @@ -1015,7 +1015,7 @@ 1.4 error("Left operand of '-' operator has wrong type.") 1.5 end 1.6 if getmetatable(value2) == date then 1.7 - return value1.jd - value2.jd 1.8 + return value1.jd - value2.jd -- TODO: transform to interval 1.9 elseif type(value2) == "number" then 1.10 return date(value1.jd - value2) 1.11 else 1.12 @@ -1299,7 +1299,7 @@ 1.13 error("Left operand of '-' operator has wrong type.") 1.14 end 1.15 if getmetatable(value2) == timestamp then 1.16 - return value1.tsec - value2.tsec 1.17 + return value1.tsec - value2.tsec -- TODO: transform to interval 1.18 elseif type(value2) == "number" then 1.19 return timestamp(value1.tsec - value2) 1.20 else 1.21 @@ -1508,7 +1508,7 @@ 1.22 error("Left operand of '-' operator has wrong type.") 1.23 end 1.24 if getmetatable(value2) == time then 1.25 - return value1.dsec - value2.dsec 1.26 + return value1.dsec - value2.dsec -- TODO: transform to interval 1.27 elseif type(value2) == "number" then 1.28 return time((value1.dsec - value2) % 86400) 1.29 else 1.30 @@ -1539,154 +1539,4 @@ 1.31 1.32 1.33 1.34 --------------- 1.35 --- interval -- 1.36 --------------- 1.37 - 1.38 -interval = create_new_type("interval") 1.39 - 1.40 ---[[-- 1.41 -atom.interval.invalid 1.42 - 1.43 -Value representing an invalid interval. 1.44 - 1.45 ---]]-- 1.46 -interval.invalid = interval:_create{ 1.47 - years = not_a_number, months = not_a_number, days = not_a_number, 1.48 - hours = not_a_number, minutes = not_a_number, seconds = not_a_number, 1.49 - hms_seconds = not_a_number, 1.50 - invalid = true 1.51 -} 1.52 ---//-- 1.53 - 1.54 ---[[-- 1.55 -t = -- time based on given data 1.56 -atom.interval:new{ 1.57 - years = years, 1.58 - months = months, 1.59 - days = days, 1.60 - hours = hours, 1.61 - minutes = minutes, 1.62 - seconds = seconds 1.63 -} 1.64 - 1.65 -This method returns a new time value, based on given data. 1.66 - 1.67 ---]]-- 1.68 -function interval:new(args) 1.69 - local args = args 1.70 - if type(args) == "number" then args = { seconds = args } end 1.71 - if type(args) == "table" then 1.72 - if 1.73 - (type(args.years) == "number" or not args.years ) and 1.74 - (type(args.months) == "number" or not args.months ) and 1.75 - (type(args.days) == "number" or not args.days ) and 1.76 - (type(args.hours) == "number" or not args.hours ) and 1.77 - (type(args.minutes) == "number" or not args.minutes) and 1.78 - (type(args.seconds) == "number" or not args.seconds) 1.79 - then 1.80 - local years = args.years and tonumber(args.years) or 0 1.81 - local months = args.months and tonumber(args.months) or 0 1.82 - local days = args.days and tonumber(args.days) or 0 1.83 - local hours = args.hours and tonumber(args.hours) or 0 1.84 - local minutes = args.minutes and tonumber(args.minutes) or 0 1.85 - local seconds = args.seconds and tonumber(args.seconds) or 0 1.86 - if not ( 1.87 - is_integer(years) and is_integer(months) and is_integer(days) and 1.88 - is_integer(hours) and is_integer(minutes) and is_integer(seconds) 1.89 - ) then 1.90 - return interval.invalid 1.91 - end 1.92 - local hms_seconds = 3600 * hours + 60 * minutes + seconds 1.93 - if not is_integer(hms_seconds) then return interval.invalid end 1.94 - local hms_negative = false 1.95 - if hms_seconds < 0 then 1.96 - hms_negative = true 1.97 - hms_seconds = -hms_seconds 1.98 - if not is_integer(hms_seconds) then return interval.invalid end 1.99 - end 1.100 - hours = math.floor(hms_seconds / 3600) 1.101 - minutes = math.floor(hms_seconds / 60) % 60 1.102 - seconds = hms_seconds % 60 1.103 - if hms_negative then 1.104 - hours = -hours 1.105 - minutes = -minutes 1.106 - seconds = -seconds 1.107 - hms_seconds = -hms_seconds 1.108 - end 1.109 - return interval:_create{ 1.110 - years = years, months = months, days = days, 1.111 - hours = hours, minutes = minutes, seconds = seconds, 1.112 - hms_seconds = hms_seconds, 1.113 - } 1.114 - end 1.115 - end 1.116 - error("Invalid arguments passed to interval constructor.") 1.117 -end 1.118 ---//-- 1.119 - 1.120 ---[[-- 1.121 -t = -- interval represented by the string 1.122 -atom.interval:load( 1.123 - string -- string representing an interval 1.124 -) 1.125 - 1.126 -This method returns an interval represented by the given string. 1.127 - 1.128 ---]]-- 1.129 -function interval:load(str) 1.130 - if str == nil or str == "" then 1.131 - return nil 1.132 - elseif type(str) ~= "string" then 1.133 - error("String expected") 1.134 - else 1.135 - local years, months, days, hours, minutes, seconds = string.match( 1.136 - str, 1.137 - "^(%-?[0-9]+) years (%-?[0-9]+) months (%-?[0-9]+) days (%-?[0-9]+) hours (%-?[0-9]+) minutes (%-?[0-9]+) seconds$" 1.138 - ) 1.139 - return interval:new{ 1.140 - years = tonumber(years), 1.141 - months = tonumber(months), 1.142 - days = tonumber(days), 1.143 - hours = tonumber(hours), 1.144 - minutes = tonumber(minutes), 1.145 - seconds = tonumber(seconds) 1.146 - } 1.147 - end 1.148 -end 1.149 ---//-- 1.150 - 1.151 -function interval:__tostring() 1.152 - if self.invalid then 1.153 - return "invalid_interval" 1.154 - else 1.155 - return string.format( 1.156 - "%i years %i months %i days %i hours %i minutes %i seconds", 1.157 - self.years, self.months, self.days, self.hours, self.minutes, self.seconds 1.158 - ) 1.159 - end 1.160 -end 1.161 - 1.162 -function interval.__eq(value1, value2) 1.163 - if value1.invalid or value2.invalid then 1.164 - return false 1.165 - else 1.166 - return ( 1.167 - value1.years == value2.years and 1.168 - value1.months == value2.months and 1.169 - value1.days == value2.days and 1.170 - value1.hms_seconds == value2.hms_seconds 1.171 - ) 1.172 - end 1.173 -end 1.174 - 1.175 -function interval:__unm() 1.176 - return self.new{ 1.177 - years = -self.years, months = -self.months, days = -self.days, 1.178 - hours = -self.hours, minutes = -self.minutes, seconds = -self.seconds 1.179 - } 1.180 -end 1.181 - 1.182 - 1.183 - 1.184 return _M