X-Git-Url: http://nitlanguage.org diff --git a/lib/for_abuse.nit b/lib/for_abuse.nit index ab469a6..812fb02 100644 --- a/lib/for_abuse.nit +++ b/lib/for_abuse.nit @@ -34,35 +34,25 @@ module for_abuse interface ForAbuser[E] # Starts and control the service fun iterator: Iterator[E] is abstract - - # Starts and contol the service (for `nitc`) - fun iterate - !each(e: E) - do - var i = iterator - while i.is_ok do - each(i.item) - i.next - end - end end # Abuser to read a file, see `file_open` private class ReadFileForAbuser - super ForAbuser[IFStream] + super ForAbuser[FileReader] var path: String redef fun iterator do return new ReadFileForAbuserIterator(path) end # Abuser iterator to read a file, see `file_open` private class ReadFileForAbuserIterator - super Iterator[IFStream] - redef var item: IFStream + super Iterator[FileReader] + var path: String + redef var item: FileReader is noinit redef var is_ok = true - init(path: String) + init do # start of service is to open the file, and return in - item = new IFStream.open(path) + item = new FileReader.open(path) end redef fun next do @@ -90,7 +80,7 @@ class CompareQuery[E] # The second element to compare var b: E # The result of the comparison (according to the user) - var res writable = 0 + var res = 0 is writable end # Abuser for sorting array, see `sort_fa` @@ -105,21 +95,18 @@ end private class SortAbuserIterator[E] super Iterator[CompareQuery[E]] # The index of the big loop - var i: Int + var i: Int = 0 # The index of the small loop - var j: Int + var j: Int = 0 # The array to sort var array: Array[E] # The query used to communicate with the user. # For ecological concerns, a unique CompareQuery is instatiated. - var query: nullable CompareQuery[E] + var query: nullable CompareQuery[E] = null redef fun item do return query.as(not null) - init(array: Array[E]) + init do - self.array = array # Initialize the algorithm, see `next` for the rest - i = 0 - j = 0 if not is_ok then return query = new CompareQuery[E](array[i], array[j]) end @@ -152,8 +139,8 @@ redef class Array[E] # The user uses the provided query (item) to implements its own comparison # # var a = [1, 3, 2] - # for q in a do q.res = q.a <=> q.b - # assert print a == 123 + # for q in a.sort_fa do q.res = q.a <=> q.b + # assert a == [1, 2, 3] # # Implements a sort by permutation. fun sort_fa: ForAbuser[CompareQuery[E]] @@ -168,9 +155,11 @@ end # The abuse just ensures that the file is closed after the reading. # # for f in file_open("/etc/issue") do -# print f.read_line +# var l = f.read_line +# print l +# assert not l.is_empty # end # f is automatically closed here -fun file_open(path: String): ForAbuser[IFStream] +fun file_open(path: String): ForAbuser[FileReader] do return new ReadFileForAbuser(path) end