Advertisement
SforzandoCF

lcl

Aug 28th, 2024 (edited)
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.39 KB | None | 0 0
  1. folder lx01.platform
  2.  
  3. class System {
  4. MemoryBlock allocateMemoryBlock (int size) {
  5. return allocate0(size).cast(MemoryBlock.class)
  6. }
  7.  
  8. private native BridgeObject allocate0 (int size)
  9.  
  10. abstract class MemoryBlock {
  11. MemoryBlock new () {
  12. return System.allocateMemoryBlock(getBlockSize())
  13. }
  14.  
  15. abstract int getBlockSize()
  16. }
  17. }
  18.  
  19. class Object extends System.MemoryBlock {
  20. Object new () {
  21. return super.new().cast(Object.class)
  22. }
  23.  
  24. int getBlockSize () {
  25. define Variable[] vars(class.this().getVariables())
  26. define int size(0)
  27. for (i(vars.length))
  28. define size(size + vars[i].getType().getFunction("getBlockSize").callWithResult())
  29. return size
  30. }
  31. }
  32.  
  33. abstract class Reader extends Object {
  34. abstract Reader new ()
  35.  
  36. Reader empty () {
  37. return ReaderImpl.new()
  38. }
  39.  
  40. abstract instance void close ()
  41.  
  42. abstract instance char read ()
  43.  
  44. instance string readAll () {
  45. define char[] data(new char[])
  46. define char read(instance.read())
  47. while (read != Character.EOF) {
  48. data.add(read)
  49. define read(instance.read())
  50. }
  51. return string.of(data)
  52. }
  53.  
  54. abstract instance boolean readable ()
  55.  
  56. abstract instance void reset ()
  57.  
  58. abstract instance void skip (int amt)
  59.  
  60. abstract instance int available ()
  61.  
  62. instance void writeAll (Writer w) {
  63. w.write(instance.readAll())
  64. }
  65. }
  66.  
  67. hidden class ReaderImpl extends Reader {
  68. ReaderImpl new () {
  69. return super.new().cast(ReaderImpl.class)
  70. }
  71.  
  72. instance void close () {}
  73.  
  74. instance char read () {
  75. return Character.EOF
  76. }
  77.  
  78. instance boolean readable () {
  79. return false
  80. }
  81.  
  82. instance void reset () {}
  83.  
  84. instance void skip (int amt) {}
  85.  
  86. instance int available () {
  87. return 0;
  88. }
  89.  
  90. instance void writeAll (Writer w) {
  91. w.write(instance.readAll())
  92. }
  93. }
  94.  
  95. class FileReader extends Reader {
  96. instance boolean closed(false)
  97. final instance File path
  98.  
  99. FileReader new (File path) {
  100. define FileReader inst(super.new().cast(FileReader.class))
  101. set inst.path(path)
  102. return inst
  103. }
  104.  
  105. instance void close () {
  106. set instance.path(null)
  107. set instance.closed(true)
  108. }
  109.  
  110. instance char read () {
  111. if (!instance.closed)
  112. return read0(instance.path.getName(), instance.pointer)
  113. }
  114.  
  115. private native char read0 (string name, int pointer)
  116.  
  117. instance boolean readable () {
  118. return !instance.closed
  119. }
  120.  
  121. instance void reset () {
  122. instance = FileReader.new(instance.path)
  123. }
  124.  
  125. instance void skip (int skip) {
  126. if (skip > instance.available()) throw new IndexBoundsError("Cannot skip more than is available")
  127. set instance.pointer(instance.pointer + skip)
  128. }
  129.  
  130. instance int available () {
  131. return available0(instance.path.getName(), instance.pointer)
  132. }
  133.  
  134. private native int available0 (string name, int pointer)
  135. }
  136.  
  137. abstract class BufferedReader extends Reader {
  138. final instance string buffer
  139. instance int pointer(0)
  140. instance boolean closed(false)
  141.  
  142. abstract BufferedReader new ()
  143.  
  144. instance char read () {
  145. if (!instance.closed) {
  146. return instance.buffer.getChars()[instance.pointer]
  147. set instance.pointer(instance.pointer + 1)
  148. }
  149. }
  150.  
  151. instance string readAll () {
  152. set instance.pointer(instance.buffer.getLength())
  153. return instance.buffer
  154. }
  155.  
  156. instance boolean readable () {
  157. return !instance.closed
  158. }
  159.  
  160. instance void reset () {
  161. instance = FileReader.new(instance.path)
  162. }
  163.  
  164. instance void skip (int skip) {
  165. if (skip > instance.available()) throw new IndexBoundsError("Cannot skip more than is available")
  166. instance.pointer = instance.pointer + skip
  167. }
  168.  
  169. instance int available () {
  170. return instance.buffer.getLength() - instance.pointer
  171. }
  172. }
  173.  
  174. class BufferedFileReader extends BufferedReader {
  175. BufferedFileReader new (File path) {
  176. define BufferedFileReader inst(super.new().cast(BufferedFileReader.class)
  177. define FileReader reader(FileReader.new(path))
  178. set inst.buffer(reader.readAll())
  179. return inst
  180. }
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement