[squeak-dev] The Inbox: Kernel-cbc.870.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun Sep 14 05:10:49 UTC 2014
A new version of Kernel was added to project The Inbox:
http://source.squeak.org/inbox/Kernel-cbc.870.mcz
==================== Summary ====================
Name: Kernel-cbc.870
Author: cbc
Time: 13 September 2014, 10:08:06.608 pm
UUID: 046ea585-0bc2-0f4b-82e1-d1e2f465b71e
Ancestors: Kernel-eem.869
Changes to support adding months and years to a DateAndTime, such as:
DateAndTime now + 2 months
and
DateAndTimeNow - 5 years
This requires retro-fitting the + and - in DateAndTime to a double dispatch system, and requires changes in Collections as well (to support + and - with String representations).
=============== Diff against Kernel-eem.869 ===============
Item was changed:
----- Method: DateAndTime>>+ (in category 'ansi protocol') -----
+ operand
+ "operand conforms to protocol Duration, or a Generic Month/Year"
+ ^operand addToDateTime: self
- "operand conforms to protocol Duration"
-
- | ticks |
- ticks := self ticks + (operand asDuration ticks) .
-
- ^ self class basicNew
- ticks: ticks
- offset: self offset;
- yourself
!
Item was added:
+ ----- Method: DateAndTime>>addToDateTime: (in category 'ansi protocol') -----
+ addToDateTime: aDateAndTime
+ ^self asDuration addToDateTime: aDateAndTime
+ !
Item was added:
+ ----- Method: Duration>>addToDateTime: (in category 'ansi protocol') -----
+ addToDateTime: aDateAndTime
+ | ticks |
+ ticks := self ticks + (aDateAndTime ticks) .
+ ^ aDateAndTime class basicNew
+ ticks: ticks
+ offset: aDateAndTime offset;
+ yourself
+ !
Item was added:
+ Object subclass: #GenericMonth
+ instanceVariableNames: 'number'
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'Kernel-Chronology'!
Item was added:
+ ----- Method: GenericMonth class>>months: (in category 'as yet unclassified') -----
+ months: aNumber
+ ^self new number: aNumber!
Item was added:
+ ----- Method: GenericMonth>>addNegativeToDateTime: (in category 'ansiProtocol') -----
+ addNegativeToDateTime: aDateAndTime
+ | next |
+ next := (1 to: number abs) inject: aDateAndTime into: [:end :mnth|
+ end - end dayOfMonth days.
+ ].
+ ^next - (next dayOfMonth - aDateAndTime dayOfMonth max: 0) days!
Item was added:
+ ----- Method: GenericMonth>>addToDateTime: (in category 'ansiProtocol') -----
+ addToDateTime: aDateAndTime
+ | next |
+ number < 0 ifTrue: [^self addNegativeToDateTime: aDateAndTime].
+ next := (1 to: number) inject: aDateAndTime into: [:end :mnth|
+ next := end + end daysInMonth days.
+ next dayOfMonth < end dayOfMonth
+ ifTrue: [next := next - next dayOfMonth days].
+ next
+ ].
+ ^next + ((next daysInMonth min: aDateAndTime dayOfMonth) - next dayOfMonth) days!
Item was added:
+ ----- Method: GenericMonth>>negated (in category 'accessing') -----
+ negated
+ number := number negated!
Item was added:
+ ----- Method: GenericMonth>>number (in category 'accessing') -----
+ number
+
+ ^ number!
Item was added:
+ ----- Method: GenericMonth>>number: (in category 'accessing') -----
+ number: anObject
+
+ number := anObject!
Item was added:
+ Object subclass: #GenericYear
+ instanceVariableNames: 'number'
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'Kernel-Chronology'!
Item was added:
+ ----- Method: GenericYear class>>years: (in category 'as yet unclassified') -----
+ years: aNumber
+ ^self new number: aNumber!
Item was added:
+ ----- Method: GenericYear>>addNegativeToDateTime: (in category 'ansiProtocol') -----
+ addNegativeToDateTime: aDateAndTime
+ | next |
+ next := (1 to: number abs) inject: aDateAndTime into: [:end :mnth|
+ end - end dayOfYear days.
+ ].
+ next := next - (next month - aDateAndTime month) months.
+ ^next - (next dayOfMonth - aDateAndTime dayOfMonth max: 0) days!
Item was added:
+ ----- Method: GenericYear>>addToDateTime: (in category 'ansiProtocol') -----
+ addToDateTime: aDateAndTime
+ | next |
+ number < 0 ifTrue: [^self addNegativeToDateTime: aDateAndTime].
+ ^(1 to: number) inject: aDateAndTime into: [:end :mnth|
+ next := end + end daysInYear days.
+ next month = end month
+ ifFalse: [next := next - next dayOfMonth days].
+ next
+ ].
+ !
Item was added:
+ ----- Method: GenericYear>>negated (in category 'accessing') -----
+ negated
+ number := number negated!
Item was added:
+ ----- Method: GenericYear>>number (in category 'accessing') -----
+ number
+
+ ^ number!
Item was added:
+ ----- Method: GenericYear>>number: (in category 'accessing') -----
+ number: anObject
+
+ number := anObject!
Item was added:
+ ----- Method: Number>>addToDateTime: (in category 'converting') -----
+ addToDateTime: aDateAndTime
+ ^self asDuration addToDateTime: aDateAndTime
+ !
Item was added:
+ ----- Method: Number>>month (in category 'converting') -----
+ month
+
+ ^ self sign months!
Item was added:
+ ----- Method: Number>>months (in category 'converting') -----
+ months
+
+ ^ GenericMonth months: self!
Item was added:
+ ----- Method: Number>>year (in category 'converting') -----
+ year
+
+ ^ self sign years!
Item was added:
+ ----- Method: Number>>years (in category 'converting') -----
+ years
+
+ ^ GenericYear years: self!
Item was added:
+ ----- Method: Time>>addToDateTime: (in category 'squeak protocol') -----
+ addToDateTime: aDateAndTime
+ ^self asDuration addToDateTime: aDateAndTime
+ !
Item was added:
+ ----- Method: Timespan>>addToDateTime: (in category 'squeak protocol') -----
+ addToDateTime: aDateAndTime
+ ^duration addToDateTime: aDateAndTime
+ !
More information about the Squeak-dev
mailing list
|