-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Class_ConEnumerator.xpp
89 lines (72 loc) · 2.25 KB
/
Class_ConEnumerator.xpp
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
//
// https://github.com/mazzy-ax/SysUtil
//
public class ConEnumerator implements Enumerator
{
container con;
int len;
int idx;
public container con()
{
return con;
}
public anytype current()
{
// никаких проверок:
// если индекс выходит за границы контейнера, то conPeek возвратит целый 0
return conPeek(con, idx);
}
public anytype currentIdx()
{
// никаких проверок:
// если индекс выходит за границы контейнера, то conPeek возвратит целый 0
return idx;
}
public str definitionString()
{
return 'container enumerator';
}
// метод публичный, чтобы объект данного класса можно было создавать из classFactory и инициализировать из всевозможных unpack
// не вызывайте этот метод напрямую
public void init(container _con)
{
con = _con;
len = conlen(con);
}
public int len()
{
return len;
}
public boolean moveNext()
{
if( idx < len )
{
idx++;
return true;
}
return false;
}
public void new(container _con)
{
this.init(_con);
}
public void reset()
{
idx = 0;
}
public str toString()
{
// поскольку этот метод может вызваться в отладчике еще до инициализации,
// то в этом методе нельзя использовать методы класса и нельзя бросать исключение
// и ни в коем случае не бросаем исключение на неинициализированные значения
return AnytypeUtil::toString(this.current());
}
public static server ConEnumerator construct(container con)
{
return new ConEnumerator(con);
}
public static ClassDescription description()
{
return "An enumerator to traverse a container.";
}
}