1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* string.c (scan_once): wrong condition to use mbclen2().

[ruby-dev:27535]

* time.c (time_sunday): added predicate methods for the days of the
  week.  [ruby-list:41340]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9472 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2005-10-27 08:18:38 +00:00
parent 563742204d
commit c6b9f16231
8 changed files with 591 additions and 79 deletions

View file

@ -1,3 +1,8 @@
Thu Oct 27 16:45:31 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
* string.c (scan_once): wrong condition to use mbclen2().
[ruby-dev:27535]
Thu Oct 27 11:53:17 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
* missing.h, missing/memcmp.c, missing/memmove.c:
@ -27,6 +32,14 @@ Tue Oct 25 20:06:59 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
and received by 64bit integer (VALUE), upper bits may have garbage value.
[ruby-dev:27513]
Tue Oct 25 15:32:00 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
* lib/rational.rb: applied documentation patch from Gavin Sinclair
<gsinclair@gmail.com>. [ruby-core:06364]
* lib/irb.rb (IRB::Irb::eval_input): handle prompts with newlines
in irb auto-indentation mode. [ruby-core:06358]
Tue Oct 25 14:21:46 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
* gc.c (garbage_collect): sorry, previous commit was incorrect.
@ -65,9 +78,26 @@ Mon Oct 24 11:01:11 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tk/menu.rb (TkMenuEntryConfig::__item_val2ruby_optkeys):
ditto. [ruby-core:06359]
Mon Oct 24 07:57:56 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
* ext/tk/lib/tk/canvas.rb (TkCanvasItemConfig::__item_val2ruby_optkeys):
typo fixed. [ruby-talk:162187]
* ext/tk/lib/tk/menu.rb (TkMenuEntryConfig::__item_val2ruby_optkeys):
ditto. [ruby-core:06359]
* lib/matrix.rb (Matrix::initialize): use funcall instead of send
to allow private methods to be called. A report from
Jean-Claude Arbaut <jcarbaut@laposte.net>. [ruby-core:06359]
Mon Oct 24 00:41:18 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
* time.c (time_sunday): added predicate methods for the days of the
week. [ruby-list:41340]
Sun Oct 23 07:11:11 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/extconf.rb: improbe messages [ruby-core:06325].
* ext/tk/extconf.rb: improve messages [ruby-core:06325].
* ext/tk/lib/tk.rb, ext/tk/lib/tk/canvas.rb, ext/tk/lib/tk/entry.rb,
ext/tk/lib/tk/frame.rb, ext/tk/lib/tk/image.rb,
@ -102,7 +132,7 @@ Sat Oct 22 14:25:43 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
scan_{oct,hex})
* util.c: almostly ANSI styled. (except for functions depending on
macro and K&R tecknique)
macro and K&R technique)
Sat Oct 22 13:26:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>

View file

@ -26,6 +26,8 @@ net
observer.rb
optionparser.rb
pathname.rb
pstore.rb
rational.rb
resolv.rb
set.rb
shellwords.rb

View file

@ -119,7 +119,7 @@ module IRB
end
if @context.auto_indent_mode
unless ltype
ind = prompt(@context.prompt_i, ltype, indent, line_no).size +
ind = prompt(@context.prompt_i, ltype, indent, line_no)[/.*\z/].size +
indent * 2 - p.size
ind += 2 if continue
@context.io.prompt = p + " " * ind if ind > 0

View file

@ -246,7 +246,7 @@ class Matrix
# use to general users.
#
def initialize(init_method, *argv)
self.send(init_method, *argv)
self.funcall(init_method, *argv)
end
def init_rows(rows, copy)

View file

@ -1,24 +1,91 @@
# = PStore -- Transactional File Storage for Ruby Objects
#
# How to use:
# pstore.rb -
# by unknown
# documentation by Kev Jackson and James Edward Gray II
#
# db = PStore.new("/tmp/foo")
# db.transaction do
# p db.roots
# ary = db["root"] = [1,2,3,4]
# ary[0] = [1,1.5]
# end
# See PStore for documentation.
# db.transaction do
# p db["root"]
# end
require "fileutils"
require "digest/md5"
#
# PStore implements a file based persistance mechanism based on a Hash. User
# code can store hierarchies of Ruby objects (values) into the data store file
# by name (keys). An object hierarchy may be just a single object. User code
# may later read values back from the data store or even update data, as needed.
#
# The transactional behavior ensures that any changes succeed or fail together.
# This can be used to ensure that the data store is not left in a transitory
# state, where some values were upated but others were not.
#
# Behind the scenes, Ruby objects are stored to the data store file with
# Marshal. That carries the usual limitations. Proc objects cannot be
# marshalled, for example.
#
# == Usage example:
#
# require "pstore"
#
# # a mock wiki object...
# class WikiPage
# def initialize( page_name, author, contents )
# @page_name = page_name
# @revisions = Array.new
#
# add_revision(author, contents)
# end
#
# attr_reader :page_name
#
# def add_revision( author, contents )
# @revisions << { :created => Time.now,
# :author => author,
# :contents => contents }
# end
#
# def wiki_page_references
# [@page_name] + @revisions.last[:contents].scan(/\b(?:[A-Z]+[a-z]+){2,}/)
# end
#
# # ...
# end
#
# # create a new page...
# home_page = WikiPage.new( "HomePage", "James Edward Gray II",
# "A page about the JoysOfDocumentation..." )
#
# # then we want to update page data and the index together, or not at all...
# wiki = PStore.new("wiki_pages.pstore")
# wiki.transaction do # begin transaction; do all of this or none of it
# # store page...
# wiki[home_page.page_name] = home_page
# # ensure that an index has been created...
# wiki[:wiki_index] ||= Array.new
# # update wiki index...
# wiki[:wiki_index].push(*home_page.wiki_page_references)
# end # commit changes to wiki data store file
#
# ### Some time later... ###
#
# # read wiki data...
# wiki.transaction(true) do # begin read-only transaction, no changes allowed
# wiki.roots.each do |data_root_name|
# p data_root_name
# p wiki[data_root_name]
# end
# end
#
class PStore
# The error type thrown by all PStore methods.
class Error < StandardError
end
#
# To construct a PStore object, pass in the _file_ path where you would like
# the data to be stored.
#
def initialize(file)
dir = File::dirname(file)
unless File::directory? dir
@ -32,19 +99,41 @@ class PStore
@abort = false
end
# Raises PStore::Error if the calling code is not in a PStore#transaction.
def in_transaction
raise PStore::Error, "not in transaction" unless @transaction
end
#
# Raises PStore::Error if the calling code is not in a PStore#transaction or
# if the code is in a read-only PStore#transaction.
#
def in_transaction_wr()
in_transaction()
raise PStore::Error, "in read-only transaction" if @rdonly
end
private :in_transaction, :in_transaction_wr
#
# Retrieves a value from the PStore file data, by _name_. The hierarchy of
# Ruby objects stored under that root _name_ will be returned.
#
# *WARNING*: This method is only valid in a PStore#transaction. It will
# raise PStore::Error if called at any other time.
#
def [](name)
in_transaction
@table[name]
end
#
# This method is just like PStore#[], save that you may also provide a
# _default_ value for the object. In the event the specified _name_ is not
# found in the data store, your _default_ will be returned instead. If you do
# not specify a default, PStore::Error will be raised if the object is not
# found.
#
# *WARNING*: This method is only valid in a PStore#transaction. It will
# raise PStore::Error if called at any other time.
#
def fetch(name, default=PStore::Error)
unless @table.key? name
if default==PStore::Error
@ -55,39 +144,138 @@ class PStore
end
self[name]
end
#
# Stores an individual Ruby object or a hierarchy of Ruby objects in the data
# store file under the root _name_. Assigning to a _name_ already in the data
# store clobbers the old data.
#
# == Example:
#
# require "pstore"
#
# store = PStore.new("data_file.pstore")
# store.transaction do # begin transaction
# # load some data into the store...
# store[:single_object] = "My data..."
# store[:obj_heirarchy] = { "Kev Jackson" => ["rational.rb", "pstore.rb"],
# "James Gray" => ["erb.rb", "pstore.rb"] }
# end # commit changes to data store file
#
# *WARNING*: This method is only valid in a PStore#transaction and it cannot
# be read-only. It will raise PStore::Error if called at any other time.
#
def []=(name, value)
in_transaction_wr()
@table[name] = value
end
#
# Removes an object hierarchy from the data store, by _name_.
#
# *WARNING*: This method is only valid in a PStore#transaction and it cannot
# be read-only. It will raise PStore::Error if called at any other time.
#
def delete(name)
in_transaction_wr()
@table.delete name
end
#
# Returns the names of all object hierarchies currently in the store.
#
# *WARNING*: This method is only valid in a PStore#transaction. It will
# raise PStore::Error if called at any other time.
#
def roots
in_transaction
@table.keys
end
#
# Returns true if the supplied _name_ is currently in the data store.
#
# *WARNING*: This method is only valid in a PStore#transaction. It will
# raise PStore::Error if called at any other time.
#
def root?(name)
in_transaction
@table.key? name
end
# Returns the path to the data store file.
def path
@filename
end
#
# Ends the current PStore#transaction, committing any changes to the data
# store immediately.
#
# == Example:
#
# require "pstore"
#
# store = PStore.new("data_file.pstore")
# store.transaction do # begin transaction
# # load some data into the store...
# store[:one] = 1
# store[:two] = 2
#
# store.commit # end transaction here, committing changes
#
# store[:three] = 3 # this change is never reached
# end
#
# *WARNING*: This method is only valid in a PStore#transaction. It will
# raise PStore::Error if called at any other time.
#
def commit
in_transaction
@abort = false
throw :pstore_abort_transaction
end
#
# Ends the current PStore#transaction, discarding any changes to the data
# store.
#
# == Example:
#
# require "pstore"
#
# store = PStore.new("data_file.pstore")
# store.transaction do # begin transaction
# store[:one] = 1 # this change is not applied, see below...
# store[:two] = 2 # this change is not applied, see below...
#
# store.abort # end transaction here, discard all changes
#
# store[:three] = 3 # this change is never reached
# end
#
# *WARNING*: This method is only valid in a PStore#transaction. It will
# raise PStore::Error if called at any other time.
#
def abort
in_transaction
@abort = true
throw :pstore_abort_transaction
end
def transaction(read_only=false)
#
# Opens a new transaction for the data store. Code executed inside a block
# passed to this method may read and write data to and from the data store
# file.
#
# At the end of the block, changes are committed to the data store
# automatically. You may exit the transaction early with a call to either
# PStore#commit or PStore#abort. See those methods for details about how
# changes are handled. Raising an uncaught Exception in the block is
# equivalent to calling PStore#abort.
#
# If _read_only_ is set to +true+, you will only be allowed to read from the
# data store during the transaction and any attempts to change the data will
# raise a PStore::Error.
#
# Note that PStore does not support nested transactions.
#
def transaction(read_only=false) # :yields: pstore
raise PStore::Error, "nested transaction" if @transaction
begin
@rdonly = read_only
@ -155,19 +343,23 @@ class PStore
value
end
def dump(table)
# This method is just a wrapped around Marshal.dump.
def dump(table) # :nodoc:
Marshal::dump(table)
end
def load(content)
# This method is just a wrapped around Marshal.load.
def load(content) # :nodoc:
Marshal::load(content)
end
def load_file(file)
# This method is just a wrapped around Marshal.load.
def load_file(file) # :nodoc:
Marshal::load(file)
end
private
# Commits changes to the data store file.
def commit_new(f)
f.truncate(0)
f.rewind
@ -180,6 +372,8 @@ class PStore
end
end
# :enddoc:
if __FILE__ == $0
db = PStore.new("/tmp/foo")
db.transaction do

View file

@ -1,41 +1,32 @@
#
# rational.rb -
# $Release Version: 0.5 $
# $Revision: 1.7 $
# $Date: 1999/08/24 12:49:28 $
# by Keiju ISHITSUKA(SHL Japan Inc.)
# rational.rb -
# $Release Version: 0.5 $
# $Revision: 1.7 $
# $Date: 1999/08/24 12:49:28 $
# by Keiju ISHITSUKA(SHL Japan Inc.)
#
# --
# Usage:
# class Rational < Numeric
# (include Comparable)
# Documentation by Kevin Jackson and Gavin Sinclair.
#
# When you <tt>require 'rational'</tt>, all interactions between numbers
# potentially return a rational result. For example:
#
# Rational(a, b) --> a/b
#
# Rational::+
# Rational::-
# Rational::*
# Rational::/
# Rational::**
# Rational::%
# Rational::divmod
# Rational::abs
# Rational::<=>
# Rational::to_i
# Rational::to_f
# Rational::to_s
#
# Integer::gcd
# Integer::lcm
# Integer::gcdlcm
# Integer::to_r
#
# Fixnum::**
# Fixnum::quo
# Bignum::**
# Bignum::quo
# 1.quo(2) # -> 0.5
# require 'rational'
# 1.quo(2) # -> Rational(1,2)
#
# See Rational for full documentation.
#
#
# Creates a Rational number (i.e. a fraction). +a+ and +b+ should be Integers:
#
# Rational(1,3) # -> 1/3
#
# Note: trying to construct a Rational with floating point or real values
# produces errors:
#
# Rational(1.1, 2.3) # -> NoMethodError
#
def Rational(a, b = 1)
if a.kind_of?(Rational) && b == 1
a
@ -43,10 +34,39 @@ def Rational(a, b = 1)
Rational.reduce(a, b)
end
end
#
# Rational implements a rational class for numbers.
#
# <em>A rational number is a number that can be expressed as a fraction p/q
# where p and q are integers and q != 0. A rational number p/q is said to have
# numerator p and denominator q. Numbers that are not rational are called
# irrational numbers.</em> (http://mathworld.wolfram.com/RationalNumber.html)
#
# To create a Rational Number:
# Rational(a,b) # -> a/b
# Rational.new!(a,b) # -> a/b
#
# Examples:
# Rational(5,6) # -> 5/6
# Rational(5) # -> 5/1
#
# Rational numbers are reduced to their lowest terms:
# Rational(6,10) # -> 3/5
#
# But not if you use the unusual method "new!":
# Rational.new!(6,10) # -> 6/10
#
# Division by zero is obviously not allowed:
# Rational(3,0) # -> ZeroDivisionError
#
class Rational < Numeric
@RCS_ID='-$Id: rational.rb,v 1.7 1999/08/24 12:49:28 keiju Exp keiju $-'
#
# Reduces the given numerator and denominator to their lowest terms. Use
# Rational() instead.
#
def Rational.reduce(num, den = 1)
raise ZeroDivisionError, "denominator is zero" if den == 0
@ -63,13 +83,21 @@ class Rational < Numeric
new!(num, den)
end
end
#
# Implements the constructor. This method does not reduce to lowest terms or
# check for division by zero. Therefore #Rational() should be preferred in
# normal use.
#
def Rational.new!(num, den = 1)
new(num, den)
end
private_class_method :new
#
# This method is actually private.
#
def initialize(num, den)
if den < 0
num = -num
@ -83,7 +111,15 @@ class Rational < Numeric
@denominator = den.to_i
end
end
#
# Returns the addition of this value and +a+.
#
# Examples:
# r = Rational(3,4) # -> Rational(3,4)
# r + 1 # -> Rational(7,4)
# r + 0.5 # -> 1.25
#
def + (a)
if a.kind_of?(Rational)
num = @numerator * a.denominator
@ -98,7 +134,16 @@ class Rational < Numeric
x + y
end
end
#
# Returns the difference of this value and +a+.
# subtracted.
#
# Examples:
# r = Rational(3,4) # -> Rational(3,4)
# r - 1 # -> Rational(-1,4)
# r - 0.5 # -> 0.25
#
def - (a)
if a.kind_of?(Rational)
num = @numerator * a.denominator
@ -113,7 +158,17 @@ class Rational < Numeric
x - y
end
end
#
# Returns the product of this value and +a+.
#
# Examples:
# r = Rational(3,4) # -> Rational(3,4)
# r * 2 # -> Rational(3,2)
# r * 4 # -> Rational(3,1)
# r * 0.5 # -> 0.375
# r * Rational(1,2) # -> Rational(3,8)
#
def * (a)
if a.kind_of?(Rational)
num = @numerator * a.numerator
@ -128,7 +183,14 @@ class Rational < Numeric
x * y
end
end
#
# Returns the quotient of this value and +a+.
# r = Rational(3,4) # -> Rational(3,4)
# r / 2 # -> Rational(3,8)
# r / 2.0 # -> 0.375
# r / Rational(1,2) # -> Rational(3,2)
#
def / (a)
if a.kind_of?(Rational)
num = @numerator * a.denominator
@ -144,7 +206,16 @@ class Rational < Numeric
x / y
end
end
#
# Returns this value raised to the given power.
#
# Examples:
# r = Rational(3,4) # -> Rational(3,4)
# r ** 2 # -> Rational(9,16)
# r ** 2.0 # -> 0.5625
# r ** Rational(1,2) # -> 0.866025403784439
#
def ** (other)
if other.kind_of?(Rational)
Float(self) ** other
@ -167,17 +238,37 @@ class Rational < Numeric
x ** y
end
end
#
# Returns the remainder when this value is divided by +other+.
#
# Examples:
# r = Rational(7,4) # -> Rational(7,4)
# r % Rational(1,2) # -> Rational(1,4)
# r % 1 # -> Rational(3,4)
# r % Rational(1,7) # -> Rational(1,28)
# r % 0.26 # -> 0.19
#
def % (other)
value = (self / other).to_i
return self - other * value
end
#
# Returns the quotient _and_ remainder.
#
# Examples:
# r = Rational(7,4) # -> Rational(7,4)
# r.divmod Rational(1,2) # -> [3, Rational(1,4)]
#
def divmod(other)
value = (self / other).to_i
return value, self - other * value
end
#
# Returns the absolute value.
#
def abs
if @numerator > 0
Rational.new!(@numerator, @denominator)
@ -186,6 +277,15 @@ class Rational < Numeric
end
end
#
# Returns +true+ iff this value is numerically equal to +other+.
#
# But beware:
# Rational(1,2) == Rational(4,8) # -> true
# Rational(1,2) == Rational.new!(4,8) # -> false
#
# Don't use Rational.new!
#
def == (other)
if other.kind_of?(Rational)
@numerator == other.numerator and @denominator == other.denominator
@ -198,6 +298,9 @@ class Rational < Numeric
end
end
#
# Standard comparison operator.
#
def <=> (other)
if other.kind_of?(Rational)
num = @numerator * other.denominator
@ -232,14 +335,35 @@ class Rational < Numeric
end
end
#
# Converts the rational to an Integer. Not the _nearest_ integer, the
# truncated integer. Study the following example carefully:
# Rational(+7,4).to_i # -> 1
# Rational(-7,4).to_i # -> -2
# (-1.75).to_i # -> -1
#
# In other words:
# Rational(-7,4) == -1.75 # -> true
# Rational(-7,4).to_i == (-1.75).to_i # false
#
def to_i
Integer(@numerator.div(@denominator))
end
#
# Converts the rational to a Float.
#
def to_f
@numerator.to_f/@denominator.to_f
end
#
# Returns a string representation of the rational number.
#
# Example:
# Rational(3,4).to_s # "3/4"
# Rational(8).to_s # "8"
#
def to_s
if @denominator == 1
@numerator.to_s
@ -247,38 +371,69 @@ class Rational < Numeric
@numerator.to_s+"/"+@denominator.to_s
end
end
#
# Returns +self+.
#
def to_r
self
end
#
# Returns a reconstructable string representation:
#
# Rational(5,8).inspect # -> "Rational(5, 8)"
#
def inspect
sprintf("Rational(%s, %s)", @numerator.inspect, @denominator.inspect)
end
#
# Returns a hash code for the object.
#
def hash
@numerator.hash ^ @denominator.hash
end
attr :numerator
attr :denominator
private :initialize
end
class Integer
#
# In an integer, the value _is_ the numerator of its rational equivalent.
# Therefore, this method returns +self+.
#
def numerator
self
end
#
# In an integer, the denominator is 1. Therefore, this method returns 1.
#
def denominator
1
end
#
# Returns a Rational representation of this integer.
#
def to_r
Rational(self, 1)
end
#
# Returns the <em>greatest common denominator</em> of the two numbers (+self+
# and +n+).
#
# Examples:
# 72.gcd 168 # -> 24
# 19.gcd 36 # -> 1
#
# The result is positive, no matter the sign of the arguments.
#
def gcd(n)
m = self.abs
n = n.abs
@ -298,13 +453,13 @@ class Integer
end
m << b
end
def gcd2(int)
a = self.abs
b = int.abs
a, b = b, a if a < b
while b != 0
void, a = a.divmod(b)
a, b = b, a
@ -312,6 +467,14 @@ class Integer
return a
end
#
# Returns the <em>lowest common multiple</em> (LCM) of the two arguments
# (+self+ and +other+).
#
# Examples:
# 6.lcm 7 # -> 42
# 6.lcm 9 # -> 18
#
def lcm(other)
if self.zero? or other.zero?
0
@ -320,6 +483,14 @@ class Integer
end
end
#
# Returns the GCD _and_ the LCM (see #gcd and #lcm) of the two arguments
# (+self+ and +other+). This is more efficient than calculating them
# separately.
#
# Example:
# 6.gcdlcm 9 # -> [3, 18]
#
def gcdlcm(other)
gcd = self.gcd(other)
if self.zero? or other.zero?
@ -332,11 +503,13 @@ end
class Fixnum
undef quo
# If Rational is defined, returns a Rational number instead of a Fixnum.
def quo(other)
Rational.new!(self,1) / other
end
alias rdiv quo
# Returns a Rational number if the result is in fact rational (i.e. +other+ < 0).
def rpower (other)
if other >= 0
self.power!(other)
@ -346,7 +519,7 @@ class Fixnum
end
unless defined? 1.power!
alias power! **
alias power! **
alias ** rpower
end
end
@ -357,11 +530,13 @@ class Bignum
end
undef quo
# If Rational is defined, returns a Rational number instead of a Bignum.
def quo(other)
Rational.new!(self,1) / other
end
alias rdiv quo
# Returns a Rational number if the result is in fact rational (i.e. +other+ < 0).
def rpower (other)
if other >= 0
self.power!(other)
@ -369,7 +544,7 @@ class Bignum
Rational.new!(self, 1)**other
end
end
unless defined? Complex
alias ** rpower
end

View file

@ -3993,7 +3993,7 @@ scan_once(VALUE str, VALUE pat, long *start)
/*
* Always consume at least one character of the input string
*/
if (RSTRING(str)->len < END(0))
if (RSTRING(str)->len > END(0))
*start = END(0)+mbclen2(RSTRING(str)->ptr[END(0)],pat);
else
*start = END(0)+1;

111
time.c
View file

@ -1487,6 +1487,109 @@ time_wday(VALUE time)
return INT2FIX(tobj->tm.tm_wday);
}
#define wday_p(n) {\
struct time_object *tobj;\
GetTimeval(time, tobj);\
if (tobj->tm_got == 0) {\
time_get_tm(time, tobj->gmt);\
}\
return (tobj->tm.tm_wday == (n)) ? Qtrue : Qfalse;\
}
/*
* call-seq:
* time.sunday? => true or false
*
* Returns <code>true</code> if <i>time</i> represents Sunday.
*
* t = Time.now #=> Sun Oct 23 00:14:54 UTC 2005
* t.sunday? #=> true
*/
static VALUE
time_sunday(VALUE time)
{
wday_p(0);
}
/*
* call-seq:
* time.monday? => true or false
*
* Returns <code>true</code> if <i>time</i> represents Monday.
*/
static VALUE
time_monday(VALUE time)
{
wday_p(1);
}
/*
* call-seq:
* time.tuesday? => true or false
*
* Returns <code>true</code> if <i>time</i> represents Tuesday.
*/
static VALUE
time_tuesday(VALUE time)
{
wday_p(2);
}
/*
* call-seq:
* time.wednesday? => true or false
*
* Returns <code>true</code> if <i>time</i> represents Wednesday.
*/
static VALUE
time_wednesday(VALUE time)
{
wday_p(3);
}
/*
* call-seq:
* time.thursday? => true or false
*
* Returns <code>true</code> if <i>time</i> represents Thursday.
*/
static VALUE
time_thursday(VALUE time)
{
wday_p(4);
}
/*
* call-seq:
* time.friday? => true or false
*
* Returns <code>true</code> if <i>time</i> represents Friday.
*/
static VALUE
time_friday(VALUE time)
{
wday_p(5);
}
/*
* call-seq:
* time.saturday? => true or false
*
* Returns <code>true</code> if <i>time</i> represents Saturday.
*/
static VALUE
time_saturday(VALUE time)
{
wday_p(6);
}
/*
* call-seq:
* time.yday => fixnum
@ -2018,6 +2121,14 @@ Init_Time(void)
rb_define_method(rb_cTime, "utc?", time_utc_p, 0);
rb_define_method(rb_cTime, "gmt?", time_utc_p, 0);
rb_define_method(rb_cTime, "sunday?", time_sunday, 0);
rb_define_method(rb_cTime, "monday?", time_monday, 0);
rb_define_method(rb_cTime, "tuesday?", time_tuesday, 0);
rb_define_method(rb_cTime, "wednesday?", time_wednesday, 0);
rb_define_method(rb_cTime, "thursday?", time_thursday, 0);
rb_define_method(rb_cTime, "friday?", time_friday, 0);
rb_define_method(rb_cTime, "saturday?", time_saturday, 0);
rb_define_method(rb_cTime, "tv_sec", time_to_i, 0);
rb_define_method(rb_cTime, "tv_usec", time_usec, 0);
rb_define_method(rb_cTime, "usec", time_usec, 0);