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, #to_i

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:



1249
1250
1251
1252
1253
# File 'lib/when_exe/coordinates.rb', line 1249

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

Instance Attribute Details

#fracFloat (readonly)

trunk の小数部

Returns:



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

def frac
  @frac
end

#intInteger (readonly)

trunk の整数部

Returns:

  • (Integer)


1169
1170
1171
# File 'lib/when_exe/coordinates.rb', line 1169

def int
  @int
end

#secondNumeric (readonly)

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

Returns:



1162
1163
1164
# File 'lib/when_exe/coordinates.rb', line 1162

def second
  @second
end

Instance Method Details

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

加算

Parameters:

Returns:



1185
1186
1187
1188
# File 'lib/when_exe/coordinates.rb', line 1185

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:



1197
1198
1199
1200
# File 'lib/when_exe/coordinates.rb', line 1197

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)


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

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

強制型変換



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

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

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

商と剰余

Parameters:

Returns:



1209
1210
1211
1212
# File 'lib/when_exe/coordinates.rb', line 1209

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:



1233
1234
1235
# File 'lib/when_exe/coordinates.rb', line 1233

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