Class Index [+]

Quicksearch

When::Coordinates::Residue

剰余類

Attributes

remainder[R]

剰余

  type :  Numeric
divisor[R]

  type :  Integer (>0)
carry[R]

繰り上がり

  type :  Integer
units[R]

単位

  type : {String=>Numeric}

  Example : {'DAY'=>11, 'YEAR'=4}
    通日に適用するときは、11 ずらして計算 - 甲子日 = ユリウス日 11 + 60n
    通年に適用するときは、 4 ずらして計算 - 甲子年 = 西暦 4 + 60n

Public Class Methods

day_of_week(day) click to toggle source

曜日の番号

  day     : Numeric or String
    Numeric - day をそのまま返します
    String  - 最初の2文字から決定した曜日の番号を返します

  returns : Integer
    月曜を 0 とする曜日番号
    # File when/coordinates.rb, line 62
62:       def day_of_week(day)
63:         case day
64:         when Numeric ; return day
65:         when nil     ; return 0
66:         end
67: 
68:         week = When.IRI('_co:CommonResidue::Week').child
69:         7.times do |i|
70:           return i if week[i].label =~ /#{day[/^../]}/
71:         end
72:         return nil
73:       end
mod(nn, &dd) click to toggle source

汎用の mod

  nn を dd で「割った」商(quot), 余り(rem)および除数(div)を返します。

  nn  : Numeric
    被除数
  dd  : Block
    nn  = rem + dd(quot)
    div = dd(quot+1)-dd(quot)
    となるように rem, div, quot を決めたい手続き

  returns : quot, rem, div
    remは非負、quotは Integer
    # File when/coordinates.rb, line 88
88:       def mod(nn, &dd)
89:         u = dd.call(0)
90:         y = ((nn-u)*256).divmod(dd.call(256)-u)[0] - 1
91:         w1, w2 = dd.call(y), dd.call(y+1)
92:         until  w1 <= nn && nn < w2
93:           if w2 <= nn then  y, w1, w2 = y+1, w2, dd.call(y+2)
94:           else              y, w1, w2 = y-1, dd.call(y-1), w1
95:           end
96:         end
97:         return y, nn-w1, w2-w1
98:       end
new(*args) click to toggle source

オブジェクトの生成

  remainder : Numeric
    剰余
  divisor   : Integer
    法(>0)
  carry     : Integer
    繰り上がり(デフォルト : 0)
  label     : String (include When::BasicTypes::M17n)
    名前(デフォルト : nil)
  units     : Hash
    単位(デフォルト : {})
    'DAY'  => Numeric - 通日に対して使用する場合のオフセット
    'YEAR' => Numeric - 通年に対して使用する場合のオフセット
     # File when/coordinates.rb, line 323
323:     def initialize(*args)
324:       # units の取得
325:       options =_get_options(args).dup
326:       units   = {}
327:       list    = []
328:       options.each_pair do |key, value|
329:         if (PRECISION[key.upcase])
330:           list << key
331:           units[key.upcase] = self.class._to_num(value)
332:         end
333:       end
334:       list.each do |key|
335:         options.delete(key)
336:       end
337:       options['units'] ||= {}
338:       options['units'].update(units)
339:       _set_variables(options)
340:       @units ||= {}
341: 
342:       # その他の変数
343:       remainder, divisor, carry, label = args
344:       @label     = label || @label
345:       @label     = m17n(@label, options) if (@label)
346:       _sequence
347:       @remainder = self.class._to_num(remainder || @remainder)
348:       @divisor   = self.class._to_num(divisor   || @divisor  )
349:       @carry     = self.class._to_num(carry     || @carry    )
350:       raise RangeError, "Divisor shoud be Positive Numeric" if (@divisor <= 0)
351:       carry, @remainder = @remainder.divmod(@divisor)
352:       @carry += carry
353:     end

Public Instance Methods

%(other) click to toggle source

剰余

  other   : When::TM::(Temporal)Position or Numeric(include When::Coordinates::Pair)

  returns : the class same as the 'other'
     # File when/coordinates.rb, line 280
280:     def %(other)
281:       case other
282:       when When::TM::TemporalPosition, When::TM::Position
283:         return self[other % self]
284:       when Pair
285:         return Pair.new(self % other.trunk, other.branch)
286:       when Numeric
287:         keys = @units.keys
288:         d    = (keys.size == 1) ? @units[keys[0]] : (@units['DAY']||0)
289:         return (other-d) % @divisor
290:       else
291:         raise TypeError, "The right operand shoud be Numeric or When::TM::(Temporal)Position"
292:       end
293:     end
&(other) click to toggle source

剰余類の共通集合

  other   : When::Coordinates::Residue

  returns : When::Coordinates::Residue
     # File when/coordinates.rb, line 255
255:     def &(other)
256:       case other
257:       when Residue
258:         m = self.class._china([@remainder, @divisor], [other.remainder, other.divisor])
259:         return nil unless (m)
260:         return self.class.new(*(m << @carry << @units))
261:       when Pair
262:         return Pair.new(self & other.trunk, other.branch)
263:       when Numeric
264:         keys = @units.keys
265:         d    = (keys.size == 1) ? @units[keys[0]] : (@units['DAY']||0)
266:         c, m = (other-d).divmod(@divisor)
267:         c += 1 if (m > @remainder)
268:         return (c + @carry) * @divisor + @remainder + d
269:       else
270:         return other & self
271:       end
272:     end
+(other) click to toggle source

remainderの加算

  other   : Numeric

  returns : When::Coordinates::Residue
     # File when/coordinates.rb, line 213
213:     def +(other)
214:       carry, remainder = (@remainder + other).divmod(@divisor)
215:       return self.class.new(remainder, @divisor, @carry+carry, @units)
216:     end
-(other) click to toggle source

remainderの減算

  other   : Numeric

  returns : When::Coordinates::Residue
     # File when/coordinates.rb, line 224
224:     def -(other)
225:       carry, remainder = (@remainder - other).divmod(@divisor)
226:       return self.class.new(remainder, @divisor, @carry+carry, @units)
227:     end
/(arg) click to toggle source
Alias for: to
<<(other) click to toggle source

carryの加算

  other   : Numeric

  returns : When::Coordinates::Residue
     # File when/coordinates.rb, line 235
235:     def <<(other)
236:       return self.class.new(@remainder, @divisor, @carry+other, @units)
237:     end
>>(other) click to toggle source

carryの減算

  other   : Numeric

  returns : When::Coordinates::Residue
     # File when/coordinates.rb, line 245
245:     def >>(other)
246:       return self.class.new(@remainder, @divisor, @carry-other, @units)
247:     end
[](remainder) click to toggle source

remainder の指定

  remainder : Numeric
    指定値を@remainderとする

  returns : When::Coordinates::Residue
     # File when/coordinates.rb, line 202
202:     def [](remainder)
203:       return super if !remainder.kind_of?(Numeric) || (child && child.length == @divisor)
204:       self.class.new(@remainder+remainder, @divisor, @carry, @units)
205:     end
to(arg) click to toggle source

units の指定

  arg     : String
    あらかじめ units に指定した単位を用いる

  returns : When::Coordinates::Residue
     # File when/coordinates.rb, line 179
179:     def to(arg)
180:       return nil unless @units[arg]
181:       self.class.new(@remainder, @divisor, @carry, {arg=>@units[arg]})
182:     end
Also aliased as: /
unit() click to toggle source

オブジェクトの単位

  returns : String
    現在使用中の単位を返す
     # File when/coordinates.rb, line 190
190:     def unit
191:       keys = @units.keys
192:       return (keys.size == 1) ? keys[0] : 'DAY'
193:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.