Class: When::Coordinates::LeapSeconds

Inherits:
Pair show all
Defined in:
lib/when_exe/coordinates.rb

Overview

暦座標値

閏秒のある暦座標の値を表現する

Constant Summary

Constants inherited from Pair

Pair::DL0, Pair::DL1, Pair::DL2

Instance Attribute Summary collapse

Attributes inherited from Pair

#branch, #sum, #trunk

Instance Method Summary collapse

Methods inherited from Pair

#%, #*, #+@, #-@, _de_pair, _en_number, _en_pair, _en_pair_array, _en_pair_date_time, _force_pair, _format, #_to_hash_value, #inspect

Methods inherited from Numeric

#clock, #to_day_of_week, #to_month_name, #to_pair, #unit_duration, #unit_interval_length, #unit_period_duration

Methods included from TM::TemporalPosition::Conversion

#julian_date, #tm_pos

Constructor Details

#initialize(trunk, branch, second) ⇒ LeapSeconds

オブジェクトの生成

Parameters:



1239
1240
1241
1242
1243
# File 'lib/when_exe/coordinates.rb', line 1239

def initialize(trunk, branch, second)
  @second     = second
  @int, @frac = trunk.divmod(second)
  super(trunk, branch)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class When::Coordinates::Pair

Instance Attribute Details

#fracFloat (readonly)

trunk の小数部

Returns:



1166
1167
1168
# File 'lib/when_exe/coordinates.rb', line 1166

def frac
  @frac
end

#intInteger (readonly)

trunk の整数部

Returns:

  • (Integer)


1159
1160
1161
# File 'lib/when_exe/coordinates.rb', line 1159

def int
  @int
end

#secondNumeric (readonly)

閏秒の単位 / When::TM::Duration::SYSTEM

Returns:



1152
1153
1154
# File 'lib/when_exe/coordinates.rb', line 1152

def second
  @second
end

Instance Method Details

#+(other) ⇒ When::Coordinates::LeapSeconds

加算

Parameters:

Returns:



1175
1176
1177
1178
# File 'lib/when_exe/coordinates.rb', line 1175

def +(other)
  return self.class.new(@trunk + +other, @branch, @second) unless other.kind_of?(self.class)
  return self.class.new(@trunk + other.trunk, @branch + other.branch, @second)
end

#-(other) ⇒ When::Coordinates::LeapSeconds

減算

Parameters:

Returns:



1187
1188
1189
1190
# File 'lib/when_exe/coordinates.rb', line 1187

def -(other)
  return self.class.new(@trunk - +other, @branch, @second) unless other.kind_of?(self.class)
  return self.class.new(@trunk - other.trunk, @branch - other.branch, @second)
end

#<=>(other) ⇒ Integer

比較

Parameters:

Returns:

  • (Integer)

    (負,0,正) trunk の整数部, branch, trunk の小数部の順に比較する

Raises:

  • (ArgumentError)


1211
1212
1213
1214
1215
# File 'lib/when_exe/coordinates.rb', line 1211

def <=>(other)
  other = self.class.new(+other, 0, @second) unless other.kind_of?(self.class)
  raise ArgumentError, "length of unit 'second' mismatch" unless @second == other.second
  (@int <=> other.int).nonzero? || (@branch <=> other.branch).nonzero? || (@frac <=> other.frac)
end

#coerce(other) ⇒ Object

強制型変換



1229
1230
1231
# File 'lib/when_exe/coordinates.rb', line 1229

def coerce(other)
  [self.class.new(other, 0, @second), self]
end

#divmod(other) ⇒ When::Coordinates::LeapSeconds

商と剰余

Parameters:

Returns:



1199
1200
1201
1202
# File 'lib/when_exe/coordinates.rb', line 1199

def divmod(other)
  div, mod = @trunk.divmod(other)
  return div, self.class.new(mod, @branch, @second)
end

#to_s(zero = '') ⇒ String

文字列化

Parameters:

  • zero (String) (defaults to: '')

    @branch==0 を表現する文字列

Returns:



1223
1224
1225
# File 'lib/when_exe/coordinates.rb', line 1223

def to_s(zero='')
  return @trunk.to_s + (@branch==0 ? zero : DL2[(@branch/@second).floor])
end