-
-
Notifications
You must be signed in to change notification settings - Fork 353
/
FileSystemHandle.class.st
137 lines (112 loc) · 2.88 KB
/
FileSystemHandle.class.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
"
I am an abstract superclass for file handle implementations. I provide a uniform interface that streams can use for read and write operations on a file regardless of the filesystem. I encapsulate the actual IO primitives.
"
Class {
#name : #FileSystemHandle,
#superclass : #Object,
#instVars : [
'reference',
'writable'
],
#category : #'FileSystem-Core-Kernel'
}
{ #category : #'instance creation' }
FileSystemHandle class >> on: aReference writable: aBoolean [
^ self new setReference: aReference writable: aBoolean
]
{ #category : #'instance creation' }
FileSystemHandle class >> open: aReference writable: aBoolean [
^ (self on: aReference writable: aBoolean) open
]
{ #category : #public }
FileSystemHandle >> at: index [
| buffer |
buffer := ByteArray new: 1.
self at: index read: buffer startingAt: 1 count: 1.
^ buffer at: 1
]
{ #category : #public }
FileSystemHandle >> at: index put: anObject [
| buffer |
buffer := ByteArray with: (anObject isCharacter
ifTrue: [ anObject codePoint ]
ifFalse: [ anObject ]).
self at: index write: buffer startingAt: 1 count: 1.
]
{ #category : #public }
FileSystemHandle >> at: offset read: buffer startingAt: start count: count [
self subclassResponsibility
]
{ #category : #public }
FileSystemHandle >> at: offset write: buffer startingAt: start count: count [
self subclassResponsibility
]
{ #category : #private }
FileSystemHandle >> basicOpen [
"get the raw stream description from the filesystem's store"
^ self fileSystem
openStreamDescription: reference path
writable: writable
]
{ #category : #streams }
FileSystemHandle >> binaryReadStream [
self subclassResponsibility
]
{ #category : #streams }
FileSystemHandle >> binaryWriteStream [
self subclassResponsibility
]
{ #category : #public }
FileSystemHandle >> close [
self subclassResponsibility
]
{ #category : #public }
FileSystemHandle >> ensureClosed [
reference exists ifTrue: [self close]
]
{ #category : #accessing }
FileSystemHandle >> fileSystem [
^ reference fileSystem
]
{ #category : #public }
FileSystemHandle >> flush [
self subclassResponsibility
]
{ #category : #accessing }
FileSystemHandle >> fullName [
^ reference fullName
]
{ #category : #testing }
FileSystemHandle >> isOpen [
self subclassResponsibility
]
{ #category : #testing }
FileSystemHandle >> isWritable [
^ writable
]
{ #category : #public }
FileSystemHandle >> open [
self subclassResponsibility
]
{ #category : #accessing }
FileSystemHandle >> reference [
^ reference
]
{ #category : #public }
FileSystemHandle >> reopen [
self close.
self open
]
{ #category : #initialization }
FileSystemHandle >> setReference: aReference writable: aBoolean [
reference := aReference resolve.
writable := aBoolean
]
{ #category : #public }
FileSystemHandle >> sync [
self subclassResponsibility
]
{ #category : #public }
FileSystemHandle >> truncateTo: anInteger [
self subclassResponsibility
]