[PATCH] add equality methods

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] add equality methods

Paolo Bonzini-2
It occurred to me that I had forgot equality methods.  This patch
adds them at the end.

There are a lot of features that can be implemented:
- renames, for example using one of:

    'src' asFile commit: [ :f | f extension: 'dest' ]
    'src' asFile extension: 'dest'; commit

- moves, again using things like

    '/tmp/blah' asFile commit: [ :f | f path: Directory working ]

- copies, like

    Directory working add: '/tmp/blah' asFile

More ideas can be found at http://wiki.squeak.org/squeak/5929.  I don't
agree with all of the ideas in that page, but for most of them I do.
I don't agree especially with "mode changes" -- I think that those
are best implemented using decorator objects in Smalltalk.  But for
example having transparent gzip/gunzip access if one loads the ZLib
package would be nice.

Adding testcases would also be great, even though a normal `make
distcheck' already stresses quite a lot the system.

---
 kernel/File.st |   14 ++++++++++++++
 kernel/VFS.st  |   29 +++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+), 0 deletions(-)

diff --git a/kernel/File.st b/kernel/File.st
index 1b77272..87a982c 100644
--- a/kernel/File.st
+++ b/kernel/File.st
@@ -186,6 +186,20 @@ FilePath subclass: File [
  ^self path: ImageFileName
     ]
 
+    = aFile [
+ "Answer whether the receiver represents the same file as the receiver."
+
+ <category: 'basic'>
+ ^self class == aFile class and: [ self asString = aFile asString ]
+    ]
+
+    hash [
+ "Answer a hash value for the receiver."
+
+ <category: 'basic'>
+ ^self asString hash
+    ]
+
     lstatOn: fileName into: statStruct [
  <category: 'private-C call-outs'>
  <cCall: 'lstat_obj' returning: #int args: #(#string #smalltalk)>
diff --git a/kernel/VFS.st b/kernel/VFS.st
index 342f47e..b1ee48b 100644
--- a/kernel/VFS.st
+++ b/kernel/VFS.st
@@ -61,6 +61,20 @@ virtual files that refer to a real file on disk.'>
  ^self new file: file
     ]
 
+    = aFile [
+ "Answer whether the receiver represents the same file as the receiver."
+
+ <category: 'basic'>
+ ^self class == aFile class and: [ self file = aFile file ]
+    ]
+
+    hash [
+ "Answer a hash value for the receiver."
+
+ <category: 'basic'>
+ ^self file hash
+    ]
+
     asString [
  "Answer the container file containing me."
  <category: 'accessing'>
@@ -464,6 +478,21 @@ FilePath subclass: ArchiveMember [
 class for members of archive files that creates temporary files when
 extracting files from an archive.'>
 
+    = aFile [
+ "Answer whether the receiver represents the same file as the receiver."
+
+ <category: 'basic'>
+ ^self class == aFile class and: [ self archive = aFile archive
+    and: [ self name = aFile name ] ]
+    ]
+
+    hash [
+ "Answer a hash value for the receiver."
+
+ <category: 'basic'>
+ ^self archive hash bitXor: self name hash
+    ]
+
     archive: anArchiveFile [
  "Set the archive of which the receiver is a member."
 
--
1.5.3.4.910.gc5122-dirty


_______________________________________________
help-smalltalk mailing list
[hidden email]
http://lists.gnu.org/mailman/listinfo/help-smalltalk