@@ -6,8 +6,8 @@ from testing import assert_true
66
77# https://www.rfc-editor.org/rfc/rfc4180
88#
9- @value
10- struct CsvReader :
9+ @fieldwise_init
10+ struct CsvReader ( Copyable , Representable , Sized , Stringable , Writable ) :
1111 # var data: Dict[String,String]
1212 var headers : List[String]
1313 var elements : List[String]
@@ -20,13 +20,15 @@ struct CsvReader:
2020 var row_count : Int
2121 var col_count : Int
2222 var length : Int
23+ var index : Int
2324
2425 fn __init__ (
2526 out self ,
2627 owned in_csv : Path,
2728 owned delimiter : String = " ," ,
2829 owned quotation_mark : String = ' "' ,
2930 ) raises :
31+ self .index = 0
3032 self .raw = " "
3133 self .raw_length = 0
3234 self .length = 0
@@ -120,22 +122,35 @@ struct CsvReader:
120122 fn __len__ (self ) -> Int:
121123 return self .length
122124
123- # fn __iter__(self) -> collection:
124- # return self.elements.__iter__()
125-
126- # fn __repr__(self) -> String:
127- # var out: String = "["
128- # for el in self.elements:
129- # out.append(el)
130- # out.append("]")
131- # return out
132-
133- # fn __copyinit__(out self) -> CsvReader:
134- # self.raw = existing.raw
135- # self.delimiter = existing.delimiter
136- # self.QM = existing.QM
137- # self.elements = existing.elements
138- # self.col_count = existing.col_count
139- # self.row_count = existing.row_count
140- # return self
141- # ---------------------
125+ fn __repr__ (self ) -> String:
126+ var out : String = " ["
127+
128+ for el in self .elements:
129+ out += " '"
130+ out += String(el)
131+ out += " ', "
132+ out += " ]"
133+ return out
134+
135+ fn __str__ (self ) -> String:
136+ return String.write(self )
137+
138+ fn write_to [W : Writer](self , mut writer : W) -> None :
139+ writer.write(String(" CsvReader" + repr (self )))
140+
141+ @parameter
142+ fn __next_ref__ (mut self ) -> String:
143+ self .index += 1
144+ return self .elements[self .index - 1 ]
145+
146+ @always_inline
147+ fn __next__ (mut self ) -> String:
148+ return self .__next_ref__()
149+
150+ @always_inline
151+ fn __has_next__ (self ) -> Bool:
152+ return self .length > self .index
153+
154+ @always_inline
155+ fn __iter__ (self ) -> Self:
156+ return self
0 commit comments