iter-list.go: implemntation of the ExtInterface and coperation reset
This commit is contained in:
		
							parent
							
								
									5cf0bfbad4
								
							
						
					
					
						commit
						6c604812ee
					
				
							
								
								
									
										38
									
								
								iter-list.go
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								iter-list.go
									
									
									
									
									
								
							| @ -4,7 +4,10 @@ | |||||||
| // iter-list.go
 | // iter-list.go
 | ||||||
| package expr | package expr | ||||||
| 
 | 
 | ||||||
| import "io" | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"io" | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| type ListIterator struct { | type ListIterator struct { | ||||||
| 	a     *ListType | 	a     *ListType | ||||||
| @ -34,12 +37,26 @@ func NewAnyIterator(value any) (it *ListIterator) { | |||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (it *ListIterator) HasOperation(name string) bool { | func (it *ListIterator) String() string { | ||||||
| 	return false | 	var l = 0 | ||||||
|  | 	if it.a != nil { | ||||||
|  | 		l = len(*it.a) | ||||||
|  | 	} | ||||||
|  | 	return fmt.Sprintf("$(#%d)", l) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (it *ListIterator) CallOperation(name string, args []any) (any, error) { | func (it *ListIterator) HasOperation(name string) bool { | ||||||
| 	return nil, errNoOperation(name) | 	yes := name == resetName | ||||||
|  | 	return yes | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (it *ListIterator) CallOperation(name string, args []any) (v any, err error) { | ||||||
|  | 	if name == resetName { | ||||||
|  | 		v, err = it.Reset() | ||||||
|  | 	} else { | ||||||
|  | 		err = errNoOperation(name) | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (it *ListIterator) Current() (item any, err error) { | func (it *ListIterator) Current() (item any, err error) { | ||||||
| @ -56,15 +73,14 @@ func (it *ListIterator) Next() (item any, err error) { | |||||||
| 	if item, err = it.Current(); err != io.EOF { | 	if item, err = it.Current(); err != io.EOF { | ||||||
| 		it.index++ | 		it.index++ | ||||||
| 	} | 	} | ||||||
| 	// if it.index < len(it.a) {
 |  | ||||||
| 	// 	item = it.a[it.index]
 |  | ||||||
| 	// 	it.index++
 |  | ||||||
| 	// } else {
 |  | ||||||
| 	// 	err = io.EOF
 |  | ||||||
| 	// }
 |  | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (it *ListIterator) Index() int { | func (it *ListIterator) Index() int { | ||||||
| 	return it.index - 1 | 	return it.index - 1 | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (it *ListIterator) Reset() (bool, error) { | ||||||
|  | 	it.index = 0 | ||||||
|  | 	return true, nil | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user