Various A++/T++ fixes, Alt+F10 in T++ invokes 'fix current topic' hidden function

git-svn-id: svn://ultimatepp.org/upp/trunk@473 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2008-09-22 16:38:35 +00:00
parent 7e974127ac
commit 169c97d10a
28 changed files with 3278 additions and 681 deletions

View file

@ -198,10 +198,10 @@ void LogStream::Flush()
void LogStream::Put0(int w)
{
if(w == LOG_BEGIN)
depth++;
depth = min(depth + 1, 20);
else
if(w == LOG_END)
depth--;
depth = max(depth - 1, 0);
else {
if(bol) {
bol = false;

View file

@ -22,6 +22,36 @@ String Format(const Uuid& id) {
return Sprintf("%08X%08X%08X%08X", id.a, id.b, id.c, id.d);
}
dword scanX(const char *s)
{
dword r = 0;
for(int i = 0; i < 8; i++) {
r = (r << 4) | (*s >= '0' && *s <= '9' ? *s - '0' :
*s >= 'A' && *s <= 'F' ? *s - 'A' :
*s >= 'a' && *s <= 'f' ? *s - 'a' : 0);
s++;
}
return r;
}
Uuid ScanUuid(const char *s)
{
Uuid id;
String xu;
while(*s) {
if(IsXDigit(*s))
xu.Cat(*s);
s++;
}
if(xu.GetCount() < 32)
return Null;
id.a = scanX(~xu);
id.b = scanX(~xu + 8);
id.c = scanX(~xu + 16);
id.d = scanX(~xu + 24);
return id;
}
String Uuid::ToString() const
{
return Format(*this);

View file

@ -19,6 +19,7 @@ struct Uuid : AssignValueTypeNo<Uuid, 50, Moveable<Uuid> > {
};
String Format(const Uuid& id);
Uuid ScanUuid(const char *s);
inline bool operator==(const Uuid& u, const Uuid& w) {
return ((u.a ^ w.a) | (u.b ^ w.b) | (u.c ^ w.c) | (u.d ^ w.d)) == 0;

View file

@ -1,288 +1,693 @@
TITLE("AMap")
COMPRESSED
120,156,237,93,109,115,218,72,18,254,43,83,181,187,41,59,
139,109,33,192,96,59,155,186,188,237,94,202,73,54,101,19,
239,7,23,54,50,26,140,206,66,210,105,132,109,238,246,246,
183,95,247,140,222,223,65,194,134,44,249,16,3,26,245,76,
119,63,221,211,211,211,26,93,202,228,199,31,165,134,244,131,
84,240,239,248,61,29,43,51,221,25,92,106,237,118,239,68,
145,59,39,119,167,191,31,157,188,252,199,206,97,123,23,136,
52,129,72,171,219,108,245,58,173,102,91,62,132,255,154,173,
166,220,145,91,237,102,79,62,106,247,90,173,158,116,60,210,
21,198,6,151,186,220,235,157,96,207,50,220,36,119,59,114,
179,219,238,181,123,205,86,183,39,195,189,178,36,201,82,87,
238,52,219,173,158,220,57,86,41,27,13,46,149,94,235,228,
229,217,33,220,212,194,158,128,184,212,60,148,219,221,182,44,
181,36,185,13,93,53,123,189,118,179,219,233,181,142,14,15,
143,71,138,229,104,166,225,246,165,53,155,114,243,228,166,217,
61,129,33,255,245,215,95,251,205,182,36,70,208,6,98,77,
169,13,67,109,194,111,82,91,238,54,59,71,210,81,167,215,
236,73,45,32,222,233,74,157,99,75,177,149,105,58,231,72,
163,83,200,122,87,58,214,28,10,36,94,254,220,108,118,225,
150,195,198,225,15,205,118,23,24,237,181,218,157,94,87,130,
206,101,89,110,181,228,102,75,62,58,146,59,135,157,238,241,
132,42,42,181,93,22,20,24,252,203,38,220,218,109,116,127,
128,27,165,118,167,37,183,143,80,88,45,232,73,150,15,59,
71,205,78,91,234,28,2,165,99,155,254,123,166,217,116,74,
13,208,216,127,175,255,247,211,135,47,123,223,206,201,37,235,
156,156,254,67,34,151,63,73,210,158,36,9,221,193,192,44,
93,113,232,245,171,129,255,187,180,47,237,203,157,206,46,113,
53,22,110,127,237,127,109,147,211,232,165,6,89,156,68,191,
58,137,139,234,36,254,169,176,201,175,70,244,250,235,235,235,
5,9,145,55,159,21,107,240,98,112,201,36,132,217,97,251,
196,151,46,121,197,111,36,151,47,185,216,26,36,244,181,31,
253,122,17,253,234,14,237,181,32,219,34,248,119,171,198,167,
82,35,113,255,92,190,124,199,5,181,247,103,127,110,81,98,
142,201,29,157,179,125,114,74,166,51,230,144,137,114,79,137,
74,169,69,70,166,53,135,255,12,230,216,179,145,99,218,13,
114,67,225,238,131,43,213,178,134,199,195,131,225,193,185,57,
179,71,244,189,57,26,30,188,51,13,71,209,12,106,179,225,
193,103,243,158,42,55,58,189,34,83,247,211,128,40,134,26,
162,15,99,32,166,69,109,5,200,14,127,25,254,50,128,30,
199,112,183,186,31,25,100,63,52,200,123,69,159,81,24,102,
95,144,97,138,163,177,241,156,132,252,3,35,99,211,198,1,
139,129,144,177,174,220,195,15,154,10,215,180,177,70,85,114,
51,39,220,3,82,7,46,95,68,251,186,8,245,117,163,48,
109,68,108,24,179,57,37,202,104,68,1,193,62,221,232,109,
174,158,246,254,196,15,154,113,43,212,177,79,62,135,100,201,
57,227,60,207,12,166,221,226,23,143,249,157,221,29,46,97,
114,58,124,65,30,119,7,4,198,54,49,85,96,203,153,217,
6,210,155,0,93,193,60,103,143,234,130,215,125,223,54,247,
219,205,195,19,174,104,162,49,162,184,6,231,76,20,7,198,
60,189,129,190,25,249,104,168,244,209,83,53,121,208,156,73,
62,143,129,192,27,216,235,20,7,50,133,14,132,72,129,189,
143,14,118,54,99,192,138,194,144,22,117,251,117,85,48,2,
6,104,248,150,6,240,79,46,40,226,8,33,201,191,190,177,
109,101,142,223,56,58,224,135,115,122,235,94,143,179,247,73,
187,163,208,106,78,76,103,2,195,251,210,255,20,12,182,225,
51,143,224,116,76,75,27,9,120,190,51,109,58,60,96,246,
72,69,132,122,168,28,254,72,141,225,222,140,133,208,9,247,
17,50,112,80,251,92,54,185,116,224,231,187,225,117,64,5,
191,115,6,76,62,81,43,122,96,61,3,226,128,128,217,24,
70,204,232,84,1,24,142,64,16,138,14,42,158,221,78,64,
71,20,228,54,166,10,232,26,148,164,216,32,49,232,138,104,
83,203,180,29,104,78,52,3,136,217,218,61,136,217,23,170,
198,117,233,105,194,5,227,103,58,189,1,219,139,121,86,146,
244,22,247,166,166,250,222,33,112,39,224,41,212,224,247,157,
52,55,131,48,13,238,4,188,6,119,183,200,157,127,37,221,
217,69,111,238,71,111,126,244,175,236,114,95,37,159,224,104,
16,203,0,87,46,90,129,127,75,209,108,226,152,40,55,174,
114,206,124,247,4,208,13,215,53,21,166,12,70,32,58,225,
134,197,176,225,27,142,123,175,89,191,200,193,21,211,203,232,
212,166,160,98,106,128,13,97,43,238,78,11,91,249,182,224,
121,54,188,163,45,220,10,202,115,239,207,83,58,143,254,248,
8,63,94,96,227,253,106,122,254,10,136,173,73,215,194,24,
106,83,40,225,236,161,41,123,134,227,122,109,180,177,144,166,
208,48,116,243,65,252,132,134,226,104,83,10,243,211,204,225,
180,24,159,151,220,78,128,24,4,222,142,109,206,221,233,37,
6,133,56,237,77,64,65,1,14,72,68,31,245,217,118,154,
54,67,234,227,154,21,51,23,94,245,57,245,218,140,76,27,
252,156,101,26,42,206,39,170,88,135,5,162,167,46,44,210,
237,53,214,120,189,245,116,64,206,184,24,68,107,184,122,22,
150,197,125,73,27,214,12,39,213,132,127,133,41,96,65,149,
166,133,200,164,80,205,192,132,173,209,123,20,1,168,207,50,
153,134,51,28,6,7,99,205,6,213,184,193,136,152,52,185,
225,89,116,36,66,45,132,6,24,41,234,160,1,113,2,42,
92,33,150,77,33,36,177,102,168,234,32,174,129,152,14,169,
167,94,19,16,128,184,147,83,135,200,13,195,13,252,28,106,
194,67,157,7,115,166,171,94,67,64,25,130,5,198,41,194,
51,136,87,198,64,73,119,180,225,30,14,204,180,113,86,133,
33,129,111,48,76,160,111,155,119,212,16,49,42,78,192,64,
17,184,52,104,10,131,56,4,209,45,125,212,24,196,156,62,
147,120,25,124,18,184,154,64,82,26,226,72,200,80,229,131,
192,70,30,81,213,164,162,123,78,41,32,164,16,131,222,66,
120,11,176,55,102,56,173,187,100,0,79,72,229,155,161,107,
198,29,72,201,11,5,121,224,0,97,37,140,92,77,186,138,
83,97,163,16,131,198,46,78,224,226,215,116,133,100,227,248,
107,8,3,30,31,224,142,67,67,118,157,110,112,217,149,177,
203,94,28,246,33,200,122,240,11,193,62,190,46,18,216,143,
94,245,209,31,197,188,123,107,150,47,19,151,119,175,99,55,
215,10,252,45,236,98,176,251,222,225,20,196,190,254,74,47,
171,107,180,191,138,80,52,232,99,26,18,17,42,60,204,98,
254,69,197,137,129,212,35,83,23,66,161,131,242,232,188,181,
97,197,3,240,226,196,130,49,33,217,48,112,201,14,51,5,
105,239,78,70,110,113,76,115,194,102,55,12,214,253,56,128,
145,162,235,124,134,70,77,126,65,137,112,88,194,152,217,136,
138,64,131,51,181,187,79,254,152,0,43,184,124,164,188,141,
97,10,158,124,60,115,94,220,124,2,183,227,70,109,22,161,
165,99,189,164,101,36,21,29,248,131,58,12,224,147,18,199,
249,250,26,65,216,0,116,101,27,131,36,205,77,152,87,238,
116,176,6,83,193,102,71,32,245,90,204,226,174,127,1,228,
175,26,119,60,197,178,166,200,251,224,246,182,33,129,8,216,
194,125,22,170,114,110,198,233,165,34,158,192,241,221,107,230,
140,109,66,56,145,68,25,6,24,171,14,39,112,239,182,122,
60,81,31,188,171,69,20,233,250,206,142,42,190,223,228,196,
147,76,203,245,172,207,48,231,102,208,135,212,196,89,204,52,
41,110,71,140,147,73,57,205,97,33,99,45,134,219,38,102,
225,150,244,246,59,84,227,91,75,99,115,134,194,179,81,222,
84,221,93,99,75,40,179,211,146,182,175,29,35,168,25,154,
179,209,214,85,156,1,201,7,250,194,6,232,54,108,164,237,
34,65,39,99,219,156,114,212,113,201,54,22,178,201,205,221,
170,74,15,241,185,8,220,221,10,108,1,50,196,24,138,67,
36,18,63,145,57,45,59,121,173,214,98,191,206,156,69,247,
199,22,180,90,119,207,108,107,154,171,52,205,232,174,94,253,
86,185,254,187,134,155,100,144,153,187,213,2,30,185,198,152,
110,204,161,69,81,96,57,130,90,169,133,140,143,75,44,119,
36,204,81,230,62,172,249,54,51,8,203,5,41,174,32,176,
50,5,157,135,91,215,227,97,166,40,90,71,5,204,120,71,
21,156,22,56,172,117,15,49,82,234,1,132,97,187,75,39,
20,223,44,225,8,124,235,70,175,99,242,246,83,225,61,44,
93,25,9,193,39,220,219,65,80,89,176,31,116,162,9,183,
146,232,67,120,168,232,109,188,49,2,215,219,182,246,92,132,
40,162,18,121,68,172,94,130,208,46,189,96,65,52,201,157,
183,151,154,224,83,188,245,250,185,157,229,75,86,114,0,190,
54,51,242,58,32,217,64,42,241,78,242,145,28,155,236,22,
68,114,214,92,183,232,124,248,93,226,55,11,43,171,117,204,
73,244,161,174,83,192,23,96,79,115,10,33,231,70,64,177,
178,29,191,140,42,72,84,149,128,163,27,81,148,196,31,25,
96,215,177,154,161,226,122,161,139,196,208,150,207,90,108,24,
58,243,75,140,146,229,86,117,228,245,158,4,209,117,45,111,
234,89,89,88,51,167,56,235,6,50,19,88,8,48,141,162,
202,73,189,109,147,107,245,44,213,215,61,242,93,237,10,190,
102,136,151,203,107,121,11,232,74,80,223,166,180,182,41,173,
13,50,136,172,108,210,214,22,214,198,22,226,53,239,191,209,
133,38,135,226,154,247,0,163,41,165,237,101,96,250,108,25,
215,80,197,66,249,204,235,89,104,227,218,175,128,10,22,178,
168,154,7,141,81,119,89,161,155,183,218,136,80,219,6,61,
237,40,140,81,27,173,132,239,155,223,204,110,129,31,149,238,
46,27,80,156,101,175,9,202,150,192,165,213,228,100,227,229,
41,42,122,148,224,217,149,16,152,38,116,139,166,45,154,114,
42,42,11,187,110,17,181,22,40,10,60,136,92,213,119,136,
71,55,18,8,87,231,132,102,44,239,129,166,70,170,145,154,
49,230,19,249,17,32,193,28,170,168,11,76,164,106,120,22,
189,161,33,82,145,217,148,207,133,101,193,45,38,206,80,53,
27,155,89,150,238,143,120,137,140,22,160,250,137,75,123,254,
166,216,44,196,101,29,197,64,177,48,70,115,190,231,146,159,
69,221,254,243,91,195,234,246,222,138,162,144,239,53,164,93,
200,176,74,38,67,30,7,13,248,159,12,234,177,181,13,94,
10,62,150,90,7,62,135,133,174,77,238,99,107,138,21,77,
49,51,13,83,167,21,110,106,101,207,154,26,224,19,239,25,
109,3,198,116,99,42,191,143,229,221,147,147,212,220,70,142,
107,109,22,207,22,57,174,167,157,61,189,141,45,24,59,214,
108,118,219,32,114,5,198,186,193,65,228,214,42,23,8,35,
235,157,3,183,177,228,162,118,88,162,38,252,156,58,48,240,
92,99,44,174,9,47,51,71,150,217,19,228,213,116,140,11,
39,180,119,153,93,88,30,221,62,45,122,136,211,83,212,23,
128,47,118,145,43,59,210,191,30,190,140,111,253,59,246,234,
118,65,45,19,228,76,109,255,72,171,13,125,4,165,100,85,
192,151,111,159,62,249,44,47,251,216,238,34,101,84,113,225,
218,177,33,84,120,20,61,117,27,41,23,61,79,188,39,186,
133,214,70,64,107,129,66,36,193,73,145,227,174,116,202,104,
252,184,153,244,147,102,146,143,3,41,186,30,123,106,63,137,
43,183,18,62,118,90,201,112,79,120,228,20,61,225,35,67,
193,1,25,252,153,161,144,234,210,31,26,98,79,113,12,77,
22,104,66,15,34,85,59,161,229,139,56,217,32,152,207,152,
95,30,190,54,248,89,6,3,245,105,185,172,10,170,136,54,
197,235,223,152,166,30,115,217,33,1,127,100,30,123,89,62,
191,142,51,72,250,20,93,232,195,132,242,218,174,194,120,137,
159,50,29,230,48,53,118,202,145,24,4,222,241,83,91,138,
192,24,175,36,251,104,96,1,202,90,196,155,98,40,248,164,
71,209,60,136,51,91,230,9,171,121,15,62,246,39,248,104,
35,78,198,12,79,216,245,81,219,32,148,55,7,67,153,163,
254,12,239,116,113,85,12,1,113,206,168,98,143,38,113,164,
119,79,188,242,31,6,139,35,128,249,6,164,7,17,93,66,
216,25,161,123,200,106,53,222,174,202,138,230,249,17,86,207,
169,221,139,193,83,64,49,251,248,132,199,193,122,224,116,189,
243,105,75,34,53,125,169,95,29,202,103,20,79,213,175,8,
229,208,106,19,169,177,72,16,253,212,152,88,19,29,103,60,
62,110,115,9,173,88,99,89,185,205,12,157,134,214,145,45,
208,68,190,147,201,66,131,145,141,6,35,25,5,113,167,33,
22,126,125,109,202,151,139,190,38,97,93,7,106,103,186,118,
59,113,224,131,74,45,106,168,12,126,229,56,10,136,9,81,
6,193,221,223,29,79,126,115,80,97,100,209,168,224,123,59,
188,132,114,112,154,154,127,119,35,229,252,213,40,69,35,61,
150,13,250,39,207,2,232,171,225,241,240,88,136,238,202,21,
161,223,200,127,25,209,21,200,225,42,2,219,215,209,137,49,
132,248,5,161,123,238,174,234,68,235,29,102,98,221,243,240,
90,215,152,211,32,225,111,251,191,81,231,157,57,51,156,157,
221,221,53,194,21,7,202,57,31,167,219,146,31,54,151,68,
72,133,117,160,144,205,130,235,192,133,118,99,18,74,43,90,
27,222,123,39,200,214,237,45,210,230,240,116,1,46,87,165,
238,191,130,233,114,56,88,229,162,239,204,223,51,201,174,113,
170,144,58,207,89,254,189,171,216,95,137,229,97,154,16,171,
199,61,153,47,209,88,123,57,45,122,242,169,231,202,98,0,
44,194,82,116,238,142,31,181,145,195,234,155,145,51,83,244,
148,123,107,200,160,124,152,90,206,188,36,35,209,76,136,247,
10,43,138,20,130,153,32,240,243,4,223,147,70,164,18,169,
142,8,169,6,25,43,58,163,193,35,54,85,66,197,119,58,
184,169,0,227,249,142,50,152,215,170,236,245,77,236,200,249,
79,126,151,159,53,67,155,106,255,193,115,27,160,115,91,172,
206,102,83,203,11,105,196,65,77,24,237,141,108,170,240,228,
45,63,19,65,177,148,145,230,248,175,173,41,70,193,98,145,
7,44,159,150,92,253,60,58,182,146,230,8,56,69,230,15,
60,249,232,138,207,18,168,60,114,180,254,104,102,219,226,76,
91,209,160,17,105,170,25,92,48,193,49,71,62,193,88,126,
215,139,215,206,226,29,214,96,248,111,116,221,28,45,97,248,
113,214,184,198,49,42,205,115,113,169,109,151,212,244,123,219,
180,150,82,115,176,172,185,30,254,18,190,208,76,42,31,59,
97,49,175,155,226,242,162,69,175,94,233,66,153,128,187,236,
20,215,15,51,91,102,146,138,148,156,68,14,43,119,77,179,
108,233,64,46,177,186,134,159,29,148,60,15,31,37,131,185,
211,4,151,161,168,184,164,49,229,49,239,214,52,212,193,122,
6,169,76,5,158,70,206,81,138,48,22,210,96,96,31,105,
227,139,84,235,196,6,161,194,157,86,176,212,207,97,229,52,
184,201,223,197,117,111,78,22,155,215,163,200,223,34,245,45,
207,21,143,87,175,104,89,42,220,188,163,149,252,242,57,181,
97,157,5,113,65,210,57,243,197,253,185,3,147,222,244,138,
136,191,25,75,65,150,116,197,62,93,119,254,49,13,39,12,
53,199,60,224,225,142,32,187,79,254,48,237,59,38,242,78,
16,144,225,219,74,67,111,75,181,20,155,223,249,237,235,87,
151,213,180,188,51,115,123,116,83,88,238,34,35,242,158,220,
96,221,141,239,174,85,236,91,234,28,184,175,62,100,98,32,
203,225,49,34,49,190,177,121,37,174,240,207,209,198,65,90,
228,212,109,148,249,10,230,43,177,3,237,54,75,125,193,113,
194,16,82,122,172,228,211,120,14,11,223,209,26,121,35,238,
82,72,77,82,72,193,108,72,132,81,233,69,4,23,74,74,
36,197,21,147,20,121,29,241,141,218,232,46,74,23,196,35,
138,73,227,98,137,142,151,188,23,239,196,100,126,164,140,119,
121,103,158,165,203,34,151,227,101,176,229,166,218,196,165,104,
190,173,36,186,146,136,1,215,201,106,4,76,144,198,90,26,
40,41,36,178,144,82,152,123,140,96,37,129,132,48,239,217,
64,136,141,103,25,36,228,179,84,18,10,23,9,221,241,125,
168,58,181,87,242,37,215,97,25,184,133,28,101,164,144,173,
242,178,253,102,197,63,23,113,205,70,37,147,173,219,213,50,
252,118,9,182,164,147,99,68,54,98,203,255,187,51,220,61,
230,7,63,194,151,193,206,174,203,195,187,208,254,106,240,69,
236,38,99,42,35,25,98,165,210,230,104,240,191,190,24,54,
192,231,71,250,227,13,252,175,195,23,240,145,207,161,188,246,
219,27,204,239,137,151,121,167,237,255,150,221,47,198,10,187,
228,235,193,19,20,197,132,206,167,243,115,49,143,151,99,217,
125,37,185,55,213,12,95,157,14,27,98,214,24,190,70,9,
136,235,4,12,46,34,8,247,103,126,207,171,211,215,158,36,
12,21,235,224,131,123,196,175,160,218,129,39,28,158,233,198,
247,194,163,206,67,76,0,26,196,203,121,226,174,36,246,2,
122,140,204,75,35,245,173,233,76,130,43,44,84,93,207,139,
224,50,50,56,193,202,87,117,223,65,22,251,29,249,113,119,
190,75,0,54,144,176,112,125,40,226,18,162,21,141,87,44,
219,168,51,94,111,225,226,236,32,145,136,131,119,230,176,152,
162,227,235,96,205,71,128,96,31,126,245,51,165,162,5,14,
227,20,69,131,145,52,127,198,3,220,130,174,224,102,147,162,
223,154,182,230,76,166,165,123,195,191,6,176,248,156,193,238,
241,49,247,114,31,221,205,186,8,255,145,43,158,32,112,49,
234,109,237,113,78,138,103,222,171,48,150,227,116,61,38,226,
221,101,166,236,160,229,91,122,171,25,203,79,209,193,240,195,
143,182,135,43,183,75,204,183,119,33,57,60,131,8,62,36,
222,25,91,65,0,200,203,191,68,101,239,220,4,211,245,211,
25,155,37,19,92,171,65,187,165,178,22,150,25,139,249,42,
138,51,167,66,200,219,87,1,71,237,97,25,183,86,126,38,
218,64,212,94,223,80,3,86,216,142,200,249,104,184,187,224,
76,76,149,31,139,142,181,213,112,31,142,150,23,233,43,198,
45,37,163,9,29,221,197,15,39,139,21,89,107,225,236,121,
50,111,178,164,78,51,28,91,63,144,29,247,191,25,142,180,
191,58,71,122,129,152,74,3,212,69,220,227,101,64,130,164,
58,63,95,42,34,143,154,239,7,23,27,108,202,56,139,134,
24,31,221,69,241,160,82,109,207,239,154,196,123,140,88,88,
196,235,166,37,177,141,12,207,234,10,171,208,143,68,199,95,
231,208,67,222,50,63,251,30,103,64,12,189,130,111,92,29,
79,49,111,183,208,14,80,200,219,165,108,248,39,245,88,88,
177,29,242,105,43,115,104,149,252,89,190,30,10,38,167,52,
71,82,114,90,90,73,168,82,214,160,50,220,213,211,113,95,
107,148,146,99,139,27,35,144,117,9,81,42,24,244,219,84,
99,102,190,53,71,140,54,211,182,171,89,115,190,30,221,37,
52,25,219,26,110,140,225,70,13,142,227,252,1,87,197,34,
35,35,214,188,10,172,131,195,223,111,252,21,240,185,40,150,
243,183,62,196,238,219,45,176,110,195,162,214,35,198,227,23,
183,108,18,190,51,183,42,21,36,192,52,136,102,104,32,127,
135,23,4,167,191,152,75,1,134,126,229,118,237,238,227,16,
246,16,223,59,191,193,116,12,29,33,232,35,141,6,255,7,
77,177,185,80,
topic "AMap";
[2 $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9;*@(64)2 $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,0#27521748481378242620020725143825:desc]
[a83;*R6 $$3,0#31310162474203024125188417583966:caption]
[l288;i1121;b17;O9;~~~.1408;2 $$4,0#10431211400427159095818037425705:param]
[i448;a25;kKO9;*@(64)2 $$5,0#37138531426314131252341829483370:item]
[*+117 $$6,6#14700283458701402223321329925657:header]
[l288;a17;*1 $$7,7#70004532496200323422659154056402:requirement]
[{_}%EN-US
[s5;K%- template_<[@(0.0.255) class]_[@4 K], [@(0.0.255) class]_[@4 T], [@(0.0.255) class]_[@4 V],
[@(0.0.255) class]_[@4 HashFn]>__[@(0.0.255) class]_[@0 AMap]&]
[s0;~~~64; template <class [*@4 K], class [*@4 T], class [*@4 V], class
[*@4 HashFn]>&]
[s0;3 &]
[s5;K%- template_<[@(0.0.255) class]_[@4 K], [@(0.0.255) class]_[@4 T], [@(0.0.255) class]_[@4 V],
[@(0.0.255) class]_[@4 HashFn]>__[@(0.0.255) class]_[@0 AMap]&]
[s0; &]
[s0; [*C@4 K]-|Type of keys. K must have deep copy constructor, be [*/^dpp`:`/`/SourceDoc`/Containers`/Moveable^ m
oveable] and must have [*C operator`=`=] defined.&]
[s0; [*C@4 T]-|Type of values. T must satisfy requirements for container
flavor identified by parameter V.&]
[s0; [*C@4 V]-|Type of basic random access container.&]
[s0; [*C@4 HashFn]-|Hashing class. Must have defined [*C unsigned operator()(const
K`& x)] method returning hash value for elements.&]
[s0;~~~.416; AMap is a class that combines Index of keys with basic
random access container of values, forming map flavors. It is
used as base class for concrete map flavors, [* VectorMap], [* ArrayMap]
and [* SegtorMap].&]
[s0;~~~.416; Like any other NTL container, AMap is [*/^topic`:`/`/Core`/srcdoc`/Moveable`$en`-us^ m
oveable][*/ ]type with [*/^topic`:`/`/Core`/srcdoc`/pick`_`$en`-us^ pick
and optional deep copy] transfer semantics, although these features
are more important in derived concrete index flavors.&]
[s0; Members&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 Add]([@(0.0.255) const]_K`&_[@3 k], [@(0.0.255) const]_T`&_[@3 x])&]
[s2; Adds a key and value pair to the AMap.&]
[s7; Invalidates iterators to AIndex.&]
[s7; T must have deep copy constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key.&]
[s4; [*C@3 x]-|Value.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 AddPick]([@(0.0.255) const]_K`&_[@3 k], pick`__T`&_[@3 x])&]
[s2; Adds a key and value pair to the AMap. Value is transfered by
pick constructor in low constant time, but the source value is
destroyed.&]
[s7; T must have pick constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key.&]
[s4; [*C@3 x]-|-|Value.&]
[s0;3 &]
[s5;K%- T`&_[@0 Add]([@(0.0.255) const]_K`&_[@3 k])&]
[s2; Adds a key to the AMap and returns a reference to the corresponding
default constructed value.&]
[s7; T must have default constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key.&]
[s4; [*/ Return value]-|Reference to value.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 FindAdd]([@(0.0.255) const]_[@4 K]`&_[@3 k])&]
[s2; Retrieves the position of first element with the specified key
in AMap, using a precomputed hash value. The precomputed hash
value must be the same as the hash value that would be the result
of HashFn. If multi`-key ordering is not broken and more than
one element with the same value exists in AMap, the lowest position
is retrieved. If the element does not exist in AMap, a negative
number is returned. Unlinked elements are ignored.&]
[s4; [*C@3 x]-|Key to find.&]
[s4; [*C@3 h]-|Precomputed hash value.&]
[s4; [*/ Return value]-|Position of element or a negative value if element
is not in AMap.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 Find]([@(0.0.255) const]_K`&_[@3 k])_[@(0.0.255) const]&]
[s2; Retrieves the position of first element with the specified key
in AMap. If multi`-key ordering is not broken and more than one
element with the same value exists in AMap, the lowest position
is retrieved. If the element does not exist in AMap, a negative
number is returned. Unlinked elements are ignored.&]
[s4; [*C@3 x]-|Key to find.&]
[s4; [*/ Return value]-|Position of element or a negative value if element
is not in AMap.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 Find]([@(0.0.255) const]_K`&_[@3 k], [@(0.0.255) unsigned]_[@3 h])_[@(0.0.255) c
onst]&]
[s2; Retrieves the position of next element with the same key as
element at the specified position. If multi`-key ordering is
not broken and more than one element with that value exists in
AMap, the lowest position greater than specified one is retrieved
(so that positions got by subsequent calls to FindNext are in
ascending order). When there are no more elements with required
key, negative number is returned. Unlinked elements are ignored.&]
[s4; [*C@3 i]-|Position of element.&]
[s4; [*/ Return value]-|Position of next element with same value.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 FindLast]([@(0.0.255) const]_K`&_[@3 k], [@(0.0.255) unsigned]_[@3 h
])_[@(0.0.255) const]&]
[s2; Retrieves position of last element with the specified key in
AMap, using a precomputed hash value. The precomputed hash value
must be the same as the hash value that would be the result of
HashFn. If multi`-key ordering is not broken and more than one
element with the same value exists in AMap, the greatest position
is retrieved. If element does not exist in AMap, a negative number
is returned. Unlinked elements are ignored.&]
[s4; [*C@3 x]-|Key to find.&]
[s4; [*C@3 h]-|Precomputed hash value.&]
[s4; [*/ Return value]-|Position of element or a negative value if element
is not in AMap.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 FindLast]([@(0.0.255) const]_K`&_[@3 k])_[@(0.0.255) const]&]
[s2; Retrieves the position of last element with the specified key
in AMap. If multi`-key ordering is not broken and more than one
element with the same value exists in AIndex, the greatest position
is retrieved. If element does not exist in AMap, a negative number
is returned. Unlinked elements are ignored.&]
[s4; [*C@3 x]-|Element to find.&]
[s4; [*/ Return value]-|Position of element or a negative value if element
is not in AMap.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 FindPrev]([@(0.0.255) int]_[@3 i])_[@(0.0.255) const]&]
[s2; Retrieves the position of previous element with the same key
as element at the specified position. If multi`-key ordering
is not broken and more than one element with that value exists
in AMap, the greatest position lower than specified one is retrieved
(so that positions got by subsequent calls to FindNext are in
descending order). When there are no more elements with required
key, a negative number is returned. Unlinked elements are ignored.&]
[s4; [*C@3 i]-|Position of element.&]
[s4; [*/ Return value]-|Position of previous element with same value.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 FindAdd]([@(0.0.255) const]_[@4 K]`&_[@3 k])&]
[s2; Retrieves the position of first element with the specified key
in AMap. If multi`-key ordering is not broken and more than one
element with the same value exists in AMap, lowest position is
retrieved. If the element does not exist in AMap, adds new default
constructed element at the end of AMap and returns its position.
Unlinked elements are ignored.&]
[s7; T must have default constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*/ Return value]-|Position of element (either found or added).&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 FindAdd]([@(0.0.255) const]_[@4 K]`&_[@3 k], [@(0.0.255) const]_[@4 T]`&
_[@3 init])&]
[s2; Retrieves the position of first element with the specified key
in AMap. If multi`-key ordering is not broken and more than one
element with the same value exists in AMap, the lowest position
is retrieved. Unlinked elements are ignored. If the element does
not exist in AMap, adds new element, deep copy constructed from
[*/ init], at the end of AMap and returns its position.&]
[s7; T must have deep copy constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*C@3 init]-|Value to add if key is not in AMap yet.&]
[s4; [*/ Return value]-|Position of element (either found or added).&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 FindPutPick]([@(0.0.255) const]_[@4 K]`&_[@3 k],
pick`__[@4 T]`&_[@3 init])&]
[s2; Retrieves the position of first element with the specified key
in AMap. If multi`-key ordering is not broken and more than one
element with the same value exists in AMap, the lowest position
is retrieved. Unlinked elements are ignored. If the element does
not exist in AMap, adds new element, pick constructed from [*/ init],
at the end of AMap and returns its position.&]
[s7; T must have pick constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*C@3 init]-|Value to add if key is not in AMap yet.&]
[s4; [*/ Return value]-|Position of element (either found or added).&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 Unlink]([@(0.0.255) int]_[@3 i])&]
[s2; Unlinks element at the specified position. Unlinked item stays
in AMap but is ignored by any Find operation.&]
[s4; [*C@3 i]-|Position of element to unlink.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 Put]([@(0.0.255) const]_[@4 K]`&_[@3 k], [@(0.0.255) const]_[@4 T]`&_[@3 x
])&]
[s2; If there are any unlinked elements in AMap, one of them is replaced
by the specified key/value pair. If there is are unlinked elements,
the key/value pair is added to the end of AIndex using [* Add].
Value is transfered using deep copy constructor.&]
[s7; T must have deep copy constructor.&]
[s7; Invalidates multi`-key ordering.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key.&]
[s4; [*C@3 x]-|Value.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 PutPick]([@(0.0.255) const]_[@4 K]`&_[@3 k], pick`__[@4 T]`&_[@3 x])&]
[s2; If there are any unlinked elements in AMap, one of them is replaced
by the specified key/value pair. If there is none unlinked element,
the key/value pair is added at the end of AIndex using [* Add].
Value is transfered using pick constructor.&]
[s7; T must have pick constructor.&]
[s7; Invalidates multi`-key ordering.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key.&]
[s4; [*C@3 x]-|Value.&]
[s0;3 &]
[s5;K%- [@4 T]`&_[@0 Put]([@(0.0.255) const]_[@4 K]`&_[@3 k])&]
[s2; If there is any unlinked element in AMap, it is replaced by
the specified key and reference to the value is returned. If
there is none unlinked element, key is added at the end of AIndex
using [* Add ]and a reference to corresponding default constructed
Value is returned.&]
[s7; T must have default constructor.&]
[s7; Invalidates multi`-key ordering.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key.&]
[s4; [*/ Return value]-|Reference to the corresponding value.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 FindPut]([@(0.0.255) const]_[@4 K]`&_[@3 k])&]
[s2; Retrieves the position of first element with the specified key
in AMap. Unlinked elements are ignored. If the element does not
exist in AMap, puts new default constructed element into AMap
using [* Put] and returns its position. &]
[s7; T must have default constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*/ Return value]-|Position of element (either found or added).&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 FindPut]([@(0.0.255) const]_[@4 K]`&_[@3 k], [@(0.0.255) const]_[@4 T]`&
_[@3 init])&]
[s2; Retrieves the position of first element with the specified key
in AMap. Unlinked elements are ignored. If the element does not
exist in AMap, puts new element, deep copy constructed from [* init],
using [* Put] and returns its position. &]
[s7; T must have deep copy constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*C@3 init]-|Value to add if key is not in AMap yet.&]
[s4; [*/ Return value]-|Position of element (either found or added).&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 FindPutPick]([@(0.0.255) const]_[@4 K]`&_[@3 k],
pick`__[@4 T]`&_[@3 init])&]
[s2; Retrieves the position of first element with the specified key
in AMap. Unlinked elements are ignored. If the element does not
exist in AMap, puts new element, pick constructed from [* init],
using [* Put] and returns its position. &]
[s7; T must have deep copy constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*C@3 init]-|Value to add if key is not in AMap yet.&]
[s4; [*/ Return value]-|Position of element (either found or added).&]
[s0;3 &]
[s5;K%- T`&_[@0 Get]([@(0.0.255) const]_K`&_[@3 k])&]
[s2; Retrieves a reference to the first element with the specified
key. If multi`-key ordering is not broken and more than one element
with the same value exists in AMap, the lowest position element
is retrieved. Unlinked elements are ignored. Required key must
be in AMap, otherwise it is logic error (asserted in debug mode).&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*/ Return value]-|Reference to corresponding value.&]
[s0;3 &]
[s5;K%- [@(0.0.255) const]_T`&_[@0 Get]([@(0.0.255) const]_K`&_[@3 k])_[@(0.0.255) const]&]
[s2; Retrieves a constant reference the the first element with the
specified key. If multi`-key ordering is not broken and more
than one element with the same value exists in AMap, the lowest
position element is retrieved. Unlinked elements are ignored.
Required key must be in AMap, otherwise it is logic error (asserted
in debug mode).&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*/ Return value]-|Reference to corresponding value.&]
[s0;3 &]
[s5;K%- [@(0.0.255) const]_T`&_[@0 Get]([@(0.0.255) const]_K`&_[@3 k], [@(0.0.255) const]_T`&_[@3 d
])_[@(0.0.255) const]&]
[s2; Retrieves a constant reference value of the first element with
the specified key. If multi`-key ordering is not broken and more
than one element with the same value exists in AMap, the lowest
position element is retrieved. Unlinked elements are ignored.
If the required key is not in the AMap, constant reference to
the specified value is returned instead.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*C@3 d]-|Value to be returned if key is not found.&]
[s4; [*/ Return value]-|Reference to found element or supplied value.&]
[s0;3 &]
[s5;K%- [@4 T]`&_[@0 GetAdd]([@(0.0.255) const]_[@4 K]`&_[@3 k])&]
[s2; Retrieves a constant reference value of the first element with
the specified key. If multi`-key ordering is not broken and more
than one element with the same value exists in AMap, the lowest
position element is retrieved. Unlinked elements are ignored.
If required key is not in the AMap, adds new default constructed
element at the end of AMap and returns a reference to it.&]
[s7; T must have default constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*/ Return value]-|Reference to corresponding value.&]
[s0;3 &]
[s5;K%- [@4 T]`&_[@0 GetAdd]([@(0.0.255) const]_[@4 K]`&_[@3 k], [@(0.0.255) const]_[@4 T]`&_[@3 x])&]
[s2; Retrieves a constant reference to the first element with the
specified key. If multi`-key ordering is not broken and more
than one element with the same value exists in AMap, the lowest
position element is retrieved. Unlinked elements are ignored.
If required key is not in the AMap, adds new element, deep copy
constructed from [* x],[* ]at the end of AMap and returns a reference
to it.&]
[s7; T must have deep copy constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*C@3 x]-|Value to add if key is not in AMap.&]
[s4; [*/ Return value]-|Reference to corresponding value.&]
[s0;3 &]
[s5;K%- [@4 T]`&_[@0 GetAddPick]([@(0.0.255) const]_[@4 K]`&_[@3 k], pick`__[@4 T]`&_[@3 x])&]
[s2; Retrieves a constant reference to the first element with the
specified key. If multi`-key ordering is not broken and more
than one element with the same value exists in AMap, the lowest
position element is retrieved. Unlinked elements are ignored.
If required key is not in the AMap, adds new element, pick constructed
from [* x],[* ]at the end of AMap and returns a reference to it.&]
[s7; T must have pick constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*C@3 x]-|Value to add if key is not in AMap.&]
[s4; [*/ Return value]-|Reference to corresponding value.&]
[s0;3 &]
[s5;K%- [@4 T]`&_[@0 GetPut]([@(0.0.255) const]_[@4 K]`&_[@3 k])&]
[s2; Retrieves a constant reference value of the first element with
the specified key. If multi`-key ordering is not broken and more
than one element with the same value exists in AMap, the lowest
position element is retrieved. Unlinked elements are ignored.
If required key is not in the AMap, puts new default constructed
element into the AMap using [* Put] and returns a reference to
it.&]
[s7; T must have default constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*/ Return value]-|Reference to corresponding value.&]
[s0;3 &]
[s5;K%- [@4 T]`&_[@0 GetPut]([@(0.0.255) const]_[@4 K]`&_[@3 k], [@(0.0.255) const]_[@4 T]`&_[@3 x])&]
[s2; Retrieves a constant reference value of the first element with
the specified key. If multi`-key ordering is not broken and more
than one element with the same value exists in AMap, lowest position
element is retrieved. Unlinked elements are ignored. If required
key is not in the AMap, puts new element, deep copy constructed
from [* x],[* ]into the AMap using [* Put] and returns a reference
to it.&]
[s7; T must have deep copy constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*C@3 x]-|Value to add if key is not in AMap.&]
[s4; [*/ Return value]-|Reference to corresponding value.&]
[s0;3 &]
[s5;K%- [@4 T]`&_[@0 GetPutPick]([@(0.0.255) const]_[@4 K]`&_[@3 k], pick`__[@4 T]`&_[@3 x])&]
[s2; Retrieves a constant reference value of the first element with
the specified key. If multi`-key ordering is not broken and more
than one element with the same value exists in AMap, lowest position
element is retrieved. Unlinked elements are ignored. If required
key is not in the AMap, puts new element, pick constructed from
[* x], into the AMap using [* Put] and returns a reference to it.&]
[s7; T must have pick constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*C@3 x]-|Value to add if key is not in AMap.&]
[s4; [*/ Return value]-|Reference to corresponding value.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 SetKey]([@(0.0.255) int]_[@3 i], [@(0.0.255) const]_K`&_[@3 k])&]
[s2; Replaces key of element at the specified position.&]
[s4; [*C@3 i]-|Position of element.&]
[s4; [*C@3 k]-|New key value.&]
[s0;3 &]
[s5;K%- T_`*[@0 FindPtr]([@(0.0.255) const]_K`&_[@3 k])&]
[s2; Retrieves a pointer to value of first element with the specified
key in AMap. If multi`-key ordering is not broken and more than
one element with the same value exists in AMap, the lowest position
is retrieved. If the element does not exist in AMap, NULL pointer
is returned. Unlinked elements are ignored.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*/ Return value]-|Pointer to value or NULL pointer if element
is not in AMap.&]
[s0;3 &]
[s5;K%- [@(0.0.255) const]_T_`*[@0 FindPtr]([@(0.0.255) const]_K`&_[@3 k])_[@(0.0.255) const]&]
[s2; Retrieves a constant pointer to value of first element with
the specified key in AMap. If multi`-key ordering is not broken
and more than one element with the same value exists in AMap,
the lowest position is retrieved. If the element does not exist
in AMap, NULL pointer is returned. Unlinked elements are ignored.&]
[s4; [*C@3 k]-|Key to find.&]
[s4; [*/ Return value]-|Pointer to value or NULL pointer if element
is not in AMap.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 UnlinkKey]([@(0.0.255) const]_K`&_[@3 k], [@(0.0.255) unsigned]_[@3 h
])&]
[s2; Unlinks all elements with the specified key using precomputed
hash`-value. Unlinked elements stay in AIndex but are ignored
by any Find operations. The precomputed hash value must be the
same as the hash value that would be the result of HashFn. &]
[s4; [*C@3 k]-|Key to unlink.&]
[s4; [*C@3 h]-|Precomputed hash value.&]
[s4; [*/ Return value]-|Number of elements unlinked.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 UnlinkKey]([@(0.0.255) const]_K`&_[@3 k])&]
[s2; Unlinks all elements with the specified key. Unlinked elements
stay in AIndex but are ignored by any Find operations.&]
[s4; [*C@3 k]-|Key to unlink.&]
[s4; [*/ Return value]-|Number of elements unlinked.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 IsUnlinked]([@(0.0.255) int]_[@3 i])_[@(0.0.255) const]&]
[s2; Tests whether element at the specified position is unlinked.&]
[s4; [*C@3 i]-|Position.&]
[s4; [*/ Return value]-|true if element is unlinked.&]
[s0;3 &]
[s5;K%- T`&_[@0 Insert]([@(0.0.255) int]_[@3 i], [@(0.0.255) const]_K`&_[@3 k])&]
[s2; Inserts an element with the specified key and default constructed
value at the specified position. This is a slow operation, especially
when combined with any search operations.&]
[s7; Requires T to have default constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 i]-|Insert position.&]
[s4; [*C@3 k]-|Key to insert.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 Insert]([@(0.0.255) int]_[@3 i], [@(0.0.255) const]_K`&_[@3 k],
[@(0.0.255) const]_T`&_[@3 x])&]
[s2; Inserts an element with the specified key and value copy constructed
from [*/ x] at the specified position. This is a slow operation,
especially when combined with any search operations.&]
[s7; Requires T to have deep copy constructor.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 i]-|Insert position.&]
[s4; [*C@3 k]-|Key to insert.&]
[s4; [*C@3 x]-|Value to insert.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 Remove]([@(0.0.255) int]_[@3 i])&]
[s2; Removes the element at the specified position. This is a slow
operation, especially when combined with any search operations.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 i]-|Position of element to remove.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 Remove]([@(0.0.255) const]_[@(0.0.255) int]_`*[@3 sl],
[@(0.0.255) int]_[@3 n])&]
[s2; Removes number of elements from AMap. Time of operation only
slightly depends on the number of removed elements. This is a
slow operation, especially when combined with any search operations.&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 i]-|Position of element to remove.&]
[s4; [*C@3 sl]-|Pointer to array of the positions to remove, in ascending
order.&]
[s4; [*C@3 n]-|Number of elements to remove. &]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 Remove]([@(0.0.255) const]_[^`:`:Vector^ Vector]<[^int^ int]>`&_[@3 s
l])&]
[s2; Removes number of elements from AMap. Same as Remove(sorted`_list,
sorted`_list.GetCount()).&]
[s7; Invalidates iterators to AMap.&]
[s7; Invalidates references to keys.&]
[s7; Invalidates references to VectorMap values.&]
[s4; [*C@3 sl]-|Sorted Vector of positions to remove.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 RemoveKey]([@(0.0.255) const]_[@4 K]`&_[@3 k])&]
[s2; Removes all elements with the specified value. This is a slow
operation, especially when combined with any search operations.&]
[s4; [*C@3 k]-|Key to remove.&]
[s0;3 &]
[s5;K%- [@(0.0.255) const]_T`&_[@0 operator`[`]]([@(0.0.255) int]_[@3 i])_[@(0.0.255) const]&]
[s2; Returns a constant reference to the element at the specified
position.&]
[s4; [*C@3 i]-|Position.&]
[s4; [*/ Return value]-|Constant reference to the element at the specified
position.&]
[s0;3 &]
[s5;K%- T`&_[@0 operator`[`]]([@(0.0.255) int]_[@3 i])&]
[s2; Returns a reference to the element at the specified position.&]
[s4; [*C@3 i]-|Position.&]
[s4; [*/ Return value]-|Constant reference to the element at the specified
position.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 GetCount]()_[@(0.0.255) const]&]
[s2; Returns the number of elements in AMap.&]
[s4; [*/ Return value]-|Actual number of elements.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 IsEmpty]()_[@(0.0.255) const]&]
[s2; Tests whether AMap is empty. Same as GetCount() `=`= 0.&]
[s4; [*/ Return value]-|true if AMap is empty, false otherwise.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 Clear]()&]
[s2; Removes all elements from AMap.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 Shrink]()&]
[s2; Minimizes memory consumption of AMap by decreasing the capacity
to the number of elements.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 Reserve]([@(0.0.255) int]_[@3 xtra])&]
[s2; Reserves capacity. If the required capacity is greater than
current capacity, capacity is increased to the required value.&]
[s4; [*C@3 n]-|Required capacity.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 GetAlloc]()_[@(0.0.255) const]&]
[s2; Returns the current capacity of Array.&]
[s4; [*/ Return value]-|Capacity of Array.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 Drop]([@(0.0.255) int]_[@3 n]_`=_[@3 1])&]
[s2; Drops the specified number of elements at the end of the AMap.&]
[s4; [*C@3 n]-|Number of elements.&]
[s0;3 &]
[s5;K%- T`&_[@0 Top]()&]
[s2; Returns a reference to the value of the last element of AMap.&]
[s4; [*/ Return value]-|Reference to the value of the last element.&]
[s0;3 &]
[s5;K%- T`&_[@0 Top]()&]
[s2; Returns a constant reference to the value of the last element
of AMap.&]
[s4; [*/ Return value]-|Reference to the value of the last element.&]
[s0;3 &]
[s5;K%- [@(0.0.255) const]_K`&_[@0 TopKey]()_[@(0.0.255) const]&]
[s2; Returns a constant reference to the key of the last element
of AMap.&]
[s4; [*/ Return value]-|Reference to the key of the last element.&]
[s0;3 &]
[s5;K%- K_[@0 PopKey]()&]
[s2; Drops the last element of AMap and returns the key of the dropped
element.&]
[s4; [*/ Return value]-|Key of the element dropped at the end of AMap.&]
[s0;3 &]
[s5;K%- [@(0.0.255) const]_K`&_[@0 GetKey]([@(0.0.255) int]_[@3 i])_[@(0.0.255) const]&]
[s2; Returns a constant reference to the key of element at the specified
position.&]
[s4; [*C@3 i]-|Position.&]
[s4; [*/ Return value]-|Constant reference to the key.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 Serialize]([^`:`:Stream^ Stream]`&_[@3 s])&]
[s2; Serializes the content of AMap to/from Stream. Works only if
NTL is used as part of UPP.&]
[s0; Requires T to have serialization operator defined.&]
[s4; [*C@3 s]-|Target/source stream.&]
[s0;3 &]
[s5;K%- [@(0.0.255) const]_[^`:`:Index^ Index]<[^K^ K], [^HashFn^ HashFn]>`&_[@0 GetIndex]()_[@(0.0.255) c
onst]&]
[s2; Returns a constant reference to the internal Index of keys.&]
[s4; [*/ Return value]-|Constant reference to the Index of keys.&]
[s0;3 &]
[s5;K%- [^`:`:Index^ Index]<[^K^ K], [^HashFn^ HashFn]>_[@0 PickIndex]()_pick`_&]
[s2; Returns Index of keys. Destroys AMap by picking.&]
[s4; [*/ Return value]-|Index of keys.&]
[s0;3 &]
[s5;K%- [@(0.0.255) const]_[^`:`:Vector^ Vector]<[^K^ K]>`&_[@0 GetKeys]()_[@(0.0.255) const]&]
[s2; Returns a constant reference to the Vector of keys.&]
[s4; [*/ Return value]-|Constant reference to the Vector of keys.&]
[s0;3 &]
[s5;K%- [^`:`:Vector^ Vector]<[^K^ K]>_[@0 PickKeys]()_pick`_&]
[s2; Returns Vector of keys. Destroys AMap by picking.&]
[s4; [*/ Return value]-|Vector of keys.&]
[s0;3 &]
[s5;K%- [@(0.0.255) const]_V`&_[@0 GetValues]()_[@(0.0.255) const]&]
[s2; Returns a constant reference to the basic random access container
of values. Destroys AIndex by picking.&]
[s4; [*/ Return value]-|Constant reference to the basic random access
container of values.&]
[s0;3 &]
[s5;K%- V_[@0 PickValues]()_pick`_&]
[s2; Returns basic random access container of values. Destroys AIndex
by picking.&]
[s4; [*/ Return value]-|Basic random access container of values.&]
[s0;3 &]
[s0;:`:`:AMap`:`:AMap`(`): [* AMap]()&]
[s2; Constructor. Constructs an empty AMap.&]
[s0;3 &]
[s0;:`:`:AMap`:`:AMap`(const`:`:AMap`&`,int`): [* AMap](const [* AMap]`&
[*@3 s], int)&]
[s2; Optional deep copy constructor.&]
[s7; Requires T to have deep copy constructor or optional deep copy
constructor.&]
[s4; [*C s]-|Source AMap.&]
[s0;3 &]
[s0;:`:`:AMap`:`:AMap`(pick`_`:`:Index`<K`,HashFn`>`&`,pick`_ V`&`): [* AMap](pick`_
Index<K>`& [*@3 ndx], pick`_ V`& [*@3 val])&]
[s2; This form of constructors creates AMap by picking Index of keys
and basic random access container of values. Both containers
must have same number of elements.&]
[s4; [*C@3 ndx]-|Keys.&]
[s4; [*C@3 val]-|Values.&]
[s0;3 &]
[s0;:`:`:AMap`:`:AMap`(pick`_`:`:Vector`<K`>`&`,pick`_ V`&`): [* AMap](pick`_
Vector<K>`& [*@3 ndx], pick`_ V`& [*@3 val])&]
[s2; This form of constructors creates AMap by picking Vector of
keys and basic random access container of values. Both containers
must have same number of elements.&]
[s4; [*C@3 ndx]-|Keys.&]
[s4; [*C@3 val]-|Values.&]
[s0;3 &]
[s5;K%- typedef_K_[@0 KeyType]&]
[s2; Typedef of K for use in templated algorithms.&]
[s0;3 &]
[s5;K%- typedef_typename_[^`:`:Index^ Index]<[^K^ K], [^HashFn^ HashFn]>`::ConstIterator_[@0 K
eyConstIterator]&]
[s2; Key iterator type.&]
[s0;3 &]
[s5;K%- [^`:`:AMap`:`:KeyConstIterator^ KeyConstIterator]_[@0 KeyBegin]()_[@(0.0.255) const
]&]
[s2; Returns a constant iterator to the first key in AMap.&]
[s4; [*/ Return value]-|Constant key iterator.&]
[s0;3 &]
[s5;K%- [^`:`:AMap`:`:KeyConstIterator^ KeyConstIterator]_[@0 KeyEnd]()_[@(0.0.255) const]&]
[s2; Returns a constant iterator to the key just beyond the last
key in AMap.&]
[s4; [*/ Return value]-|Constant key iterator.&]
[s0;3 &]
[s5;K%- [^`:`:AMap`:`:KeyConstIterator^ KeyConstIterator]_[@0 KeyGetIter]([@(0.0.255) int]_
[@3 pos])_[@(0.0.255) const]&]
[s2; Returns a constant iterator to the key at the specified position.
Same as [* KeyBegin() `+ i]. The benefit of this method is that
[* pos] is range checked in debug mode. &]
[s4; [*C@3 i]-|Required position.&]
[s4; [*/ Return value]-|Constant key iterator.&]
[s0;3 &]
[s5;K%- typedef_T_[@0 ValueType]&]
[s2; Typedef of T for use in templated algorithms.&]
[s0;3 &]
[s5;K%- typedef_typename_[^V`:`:ConstIterator^ V`::ConstIterator]_[@0 ConstIterator]&]
[s2; Constant value iterator type.&]
[s0;3 &]
[s5;K%- typedef_typename_[^V`:`:Iterator^ V`::Iterator]_[@0 Iterator]&]
[s2; Value iterator type.&]
[s0;3 &]
[s5;K%- [^`:`:AMap`:`:Iterator^ Iterator]_[@0 Begin]()&]
[s2; Returns an iterator to the first value in AMap.&]
[s4; [*/ Return value]-|Value iterator.&]
[s0;3 &]
[s5;K%- [^`:`:AMap`:`:Iterator^ Iterator]_[@0 End]()&]
[s2; Returns a constant iterator to the value just beyond the last
key in AMap.&]
[s4; [*/ Return value]-|Value iterator.&]
[s0;3 &]
[s5;K%- [^`:`:AMap`:`:Iterator^ Iterator]_[@0 GetIter]([@(0.0.255) int]_[@3 pos])&]
[s2; Returns an iterator to the value at the specified position.
Same as [* Begin() `+ i]. The benefit of this method is that [* pos]
is range checked in debug mode.&]
[s4; [*C@3 i]-|Required position.&]
[s4; [*/ Return value]-|Value iterator.&]
[s0;3 &]
[s5;K%- [^`:`:AMap`:`:ConstIterator^ ConstIterator]_[@0 Begin]()_[@(0.0.255) const]&]
[s2; Returns a constant iterator to the first value in AMap.&]
[s4; [*/ Return value]-|Constant value iterator.&]
[s0;3 &]
[s5;K%- [^`:`:AMap`:`:ConstIterator^ ConstIterator]_[@0 End]()_[@(0.0.255) const]&]
[s2; Returns a constant iterator to the value just beyond the last
value in AMap.&]
[s4; [*/ Return value]-|Constant value iterator.&]
[s0;3 &]
[s5;K%- [^`:`:AMap`:`:ConstIterator^ ConstIterator]_[@0 GetIter]([@(0.0.255) int]_[@3 pos])_[@(0.0.255) c
onst]&]
[s2; Returns a constant iterator to the value at the specified position.
Same as [* Begin() `+ i]. Benefit of this methods is that in debug
mode [* pos] is range checked.&]
[s4; [*C@3 i]-|Required position.&]
[s4; [*/ Return value]-|Constant value iterator.&]
[s0; &]
[s0; friend void [* Swap](AMap`& [*@3 a], AMap`& [*@3 b])&]
[s2; Specialization of the generic [* Swap] for AMap. Swaps array in
simple constant time operation.&]
[s4; [*C@3 a]-|First AMap to swap.&]
[s0; [*C@3 b]-|Second AMap to swap.]

View file

@ -1,18 +1,352 @@
TITLE("CParser")
COMPRESSED
120,156,237,92,9,115,219,54,22,254,43,216,94,150,28,73,229,33,89,178,60,59,147,212,73,59,158,166,110,166,78,103,119,214,181,45,136,132,100,212,20,201,37,72,31,93,111,127,251,190,7,144,34,72,145,162,36,59,219,244,200,97,73,20,240,240,206,15,15,192,131,207,45,242,217,103,70,199,248,212,104,248,51,126,205,102,52,241,226,139,115,222,239,143,142,168,53,56,186,249,246,251,195,163,253,151,173,131,126,27,169,152,64,197,30,154,246,104,96,155,125,235,0,126,152,182,105,13,44,187,111,142,172,195,254,200,182,71,198,216,241,168,16,23,231,158,53,26,29,97,39,11,58,89,195,129,101,14,251,163,254,200,180,135,35,11,250,90,134,97,25,67,107,96,246,237,145,53,24,187,76,56,23,231,116,100,31,237,255,112,0,157,108,28,9,136,27,230,129,213,31,246,45,195,54,172,62,12,101,142,70,125,115,56,24,217,135,7,7,99,135,134,49,15,252,116,44,110,154,150,121,52,53,135,71,192,243,175,191,254,218,51,251,134,226,160,15,196,76,163,15,172,154,240,204,232,
91,67,115,112,104,28,14,70,230,200,176,129,248,96,104,12,198,33,141,232,162,94,244,65,163,232,67,99,204,99,6,36,246,95,152,230,16,186,28,116,14,62,53,251,67,16,116,100,247,7,163,161,1,131,91,150,101,219,150,105,91,135,135,214,224,96,48,28,95,51,234,178,40,21,129,2,243,251,38,116,29,118,134,159,66,71,163,63,176,173,254,33,42,203,134,145,44,235,96,112,104,14,250,198,224,0,40,141,35,246,239,132,71,108,193,124,48,217,127,174,254,251,249,155,211,238,143,103,228,92,12,142,190,29,79,224,239,241,59,26,9,22,225,91,105,148,241,75,131,156,127,110,24,93,195,120,217,50,122,70,207,26,12,218,36,181,87,246,28,228,37,87,217,71,146,146,184,248,226,226,92,24,71,4,95,172,163,236,41,225,130,8,190,8,61,70,30,88,76,110,89,244,64,18,193,102,137,71,60,118,207,29,234,17,234,83,239,225,23,104,42,18,30,211,41,180,156,5,17,153,38,220,115,185,63,39,104,118,96,159,132,146,158,32,193,140,120,212,159,39,116,206,4,185,227,241,
53,57,158,116,61,126,195,136,120,240,99,122,223,43,49,112,23,68,55,208,203,39,147,189,201,79,198,100,143,196,44,90,112,159,198,204,133,183,247,49,225,62,89,176,69,0,140,181,252,32,38,103,113,196,232,162,221,33,34,32,113,160,134,37,241,53,112,197,81,136,32,33,215,244,150,225,87,94,64,93,194,145,0,124,192,22,41,153,25,143,68,220,35,239,145,248,53,21,216,20,68,21,49,113,147,8,37,194,166,49,95,48,217,87,144,48,10,28,38,4,176,51,125,88,114,13,172,16,39,8,31,176,193,2,204,223,206,196,250,142,250,121,171,5,139,175,3,87,16,135,250,64,53,10,238,200,210,158,227,55,81,4,106,100,247,14,147,17,128,92,112,223,5,141,199,169,56,148,123,73,196,114,25,83,95,113,65,143,139,105,224,245,200,63,174,153,15,198,66,150,179,1,161,177,52,12,240,230,59,17,3,82,202,44,157,84,22,39,88,44,212,88,137,212,26,60,202,57,104,133,17,155,177,8,76,252,64,110,57,37,239,145,99,197,166,18,164,93,96,146,225,55,130,128,2,239,
152,231,149,205,26,76,127,102,78,44,69,71,171,77,97,180,136,250,2,232,131,4,45,80,29,103,238,82,105,202,53,109,249,90,225,249,146,7,124,35,226,40,113,226,241,165,124,120,239,92,102,161,112,121,169,5,131,106,116,177,252,42,15,5,104,102,16,73,76,255,118,172,127,159,147,9,147,169,199,157,42,50,4,134,78,163,105,63,11,167,247,15,33,67,157,186,168,143,76,7,75,213,246,200,113,0,190,207,125,12,54,127,14,126,10,94,140,118,147,241,33,21,41,227,40,226,170,121,65,45,18,86,52,145,191,4,94,94,179,136,223,194,96,179,40,0,180,130,7,164,130,57,91,39,80,171,83,245,6,44,226,67,4,56,215,52,154,236,79,218,227,76,179,251,69,125,17,213,238,10,219,93,77,246,179,199,251,47,109,178,196,31,210,190,80,252,123,136,195,40,185,178,72,16,73,185,250,233,243,172,235,177,236,219,125,204,28,77,8,64,142,13,29,227,93,32,52,183,168,132,198,162,55,148,177,17,8,92,104,67,193,11,60,225,50,26,0,118,100,236,40,20,234,109,160,210,
148,27,124,41,170,179,3,8,52,233,224,119,202,236,5,253,34,11,205,218,13,227,220,6,87,147,191,95,157,254,248,246,109,7,145,237,74,111,229,113,159,21,154,45,229,182,137,185,252,162,147,122,95,161,235,204,47,210,79,60,47,183,227,200,168,182,35,62,215,237,136,92,118,31,223,5,192,151,2,35,4,178,80,211,40,126,230,126,152,196,10,218,235,232,72,57,186,143,111,225,133,248,201,98,202,234,135,4,190,187,143,95,3,244,251,116,193,122,69,127,145,86,170,115,26,224,181,102,50,69,65,107,28,70,111,6,70,42,181,202,77,38,53,161,107,111,59,157,108,40,2,170,169,90,6,238,215,186,188,212,173,206,90,89,203,27,14,62,243,181,161,47,115,231,190,84,3,170,15,117,76,128,213,116,22,10,246,43,133,189,177,18,103,217,219,122,204,202,82,158,237,226,42,243,247,220,213,133,52,78,74,45,117,193,102,135,207,141,217,219,69,144,206,42,118,60,93,182,14,169,109,166,69,254,174,136,210,160,185,142,154,231,168,235,74,167,135,156,146,251,144,67,46,168,12,1,
204,38,101,202,133,10,131,164,131,149,27,202,244,105,154,78,175,119,152,244,68,44,12,162,24,39,80,57,119,238,106,153,126,5,148,224,248,232,138,152,199,202,140,178,5,33,58,163,78,220,201,216,128,4,15,18,39,127,222,33,183,212,75,24,166,85,63,39,96,48,1,200,152,229,52,253,74,60,251,26,19,79,249,161,42,222,214,248,199,122,7,104,242,91,114,146,163,75,154,239,162,24,66,240,185,15,26,85,25,36,118,56,99,49,4,119,154,236,149,176,224,219,10,148,185,13,184,155,59,199,210,51,12,45,115,204,185,172,130,80,29,105,27,65,86,199,215,202,124,67,13,43,202,57,118,149,65,170,19,142,29,165,61,13,206,110,120,120,22,82,88,38,84,88,5,180,42,244,4,93,174,68,2,151,161,43,71,248,19,150,156,147,174,144,221,9,133,39,152,47,211,36,14,48,62,96,1,6,217,184,0,250,33,115,59,144,220,199,203,229,13,216,48,125,142,11,19,53,252,51,216,238,121,101,169,148,163,71,84,36,224,71,185,194,98,17,194,65,22,221,250,228,168,77,140,92,
228,62,139,203,19,39,79,72,8,252,83,206,219,65,150,212,156,186,74,157,206,16,11,112,129,150,46,161,154,213,52,13,2,175,90,77,181,42,130,97,69,81,19,75,15,220,255,146,252,192,226,36,242,21,116,128,19,130,0,128,32,51,100,24,245,87,86,34,234,24,229,216,128,211,98,168,104,156,190,99,236,230,88,255,50,231,85,49,163,208,194,73,162,8,215,241,233,2,5,201,1,234,105,211,222,42,243,199,105,151,98,219,29,217,252,134,197,53,92,190,114,111,169,143,14,213,144,57,65,20,4,254,134,156,103,109,8,141,115,146,83,6,142,130,211,15,142,135,160,200,227,167,184,200,137,40,10,212,136,111,26,186,57,21,232,198,68,140,142,197,208,87,82,135,193,152,32,34,100,14,159,113,39,151,28,165,210,109,154,73,88,5,133,78,65,29,24,211,48,78,147,199,130,178,32,170,157,235,167,171,199,218,81,63,250,114,102,171,142,214,211,52,27,82,190,157,122,205,229,196,159,19,129,220,2,233,84,182,183,160,253,25,3,112,115,215,116,248,224,102,177,127,59,179,108,217,
209,174,182,167,76,43,43,45,8,11,147,208,99,241,115,24,49,37,181,149,29,215,245,177,101,2,202,163,134,46,31,208,250,31,0,177,82,67,148,166,149,90,245,147,147,89,30,130,82,158,142,6,250,34,69,103,230,126,84,88,246,113,33,153,210,248,134,152,181,169,190,113,122,141,239,130,156,172,248,67,192,221,31,2,236,86,77,222,4,114,91,89,253,58,98,108,71,187,127,212,8,169,169,124,135,133,210,59,88,141,60,11,92,94,201,163,161,150,92,143,230,107,121,88,48,9,233,157,45,167,45,205,197,99,18,165,249,250,140,122,130,117,212,145,146,168,223,3,169,135,195,29,215,134,153,200,191,37,212,53,104,203,106,57,102,7,58,236,172,179,103,7,176,39,234,250,119,9,78,27,26,9,254,219,13,134,66,244,170,221,198,249,136,80,167,126,23,239,196,173,221,169,150,211,82,190,223,74,78,114,87,216,230,160,77,155,3,230,252,150,249,203,19,119,238,2,232,67,250,43,55,1,87,1,159,102,11,235,124,5,252,128,7,102,30,243,91,162,221,128,248,184,133,118,146,211,
127,190,169,122,109,68,232,26,250,128,59,138,149,254,123,226,223,6,55,233,54,196,137,155,110,181,169,173,109,121,12,46,203,79,88,156,42,123,55,143,174,208,234,206,235,56,93,87,141,107,93,172,90,88,241,154,198,53,82,211,134,22,80,230,141,210,232,135,71,165,115,163,130,68,63,48,234,22,100,170,180,18,182,18,85,178,224,89,249,6,201,144,31,248,96,43,234,43,27,225,19,57,202,58,153,155,13,182,157,136,113,147,140,103,184,170,165,30,48,16,113,10,146,0,22,169,158,192,43,152,12,163,0,4,143,4,113,249,12,43,46,160,9,136,53,233,82,47,188,166,126,178,96,145,190,34,206,78,4,228,246,26,141,36,57,221,7,4,241,2,127,142,175,208,226,1,97,102,1,250,125,49,121,1,68,163,5,176,129,7,56,108,17,122,88,21,50,165,242,200,252,33,100,79,82,216,134,30,238,199,53,46,46,193,16,207,126,230,202,139,203,54,39,147,110,106,114,198,101,36,44,240,8,7,148,224,242,57,143,59,40,210,100,15,100,220,75,223,117,225,29,238,61,3,93,207,
11,238,84,98,140,65,163,14,114,80,101,217,174,55,76,44,146,200,86,65,162,56,221,64,27,218,201,238,170,231,248,141,158,163,162,67,109,156,42,229,172,15,11,169,99,228,176,136,97,89,120,172,179,241,198,34,173,49,240,169,212,110,45,140,161,145,209,42,16,236,76,136,204,22,107,205,93,176,115,85,211,109,204,86,121,106,254,68,17,43,230,172,106,155,219,50,214,214,37,3,171,170,145,147,149,202,17,176,115,157,90,160,47,228,53,152,229,76,246,94,129,231,67,179,201,222,191,178,96,160,217,147,95,38,123,157,244,228,39,162,254,92,170,196,227,11,46,183,226,169,147,196,128,13,114,152,22,235,205,123,170,108,16,63,154,86,74,94,100,212,212,40,123,83,249,243,43,248,41,207,142,84,164,85,158,168,74,209,187,143,167,41,150,225,199,237,13,167,171,195,47,83,170,67,241,4,172,97,91,151,68,189,214,198,226,115,153,181,124,230,110,52,36,41,42,192,105,65,66,140,238,10,41,85,124,43,70,91,248,164,189,65,160,239,108,131,211,103,136,149,215,65,50,245,216,58,
200,159,121,1,149,133,1,33,158,252,111,132,8,31,197,4,32,43,62,171,120,223,64,97,110,81,43,101,79,92,81,218,90,191,169,86,160,170,227,77,39,247,172,48,56,74,188,181,103,155,95,239,40,207,26,7,40,165,78,85,243,193,178,218,88,85,88,122,28,112,6,171,152,235,54,194,206,176,216,3,114,27,117,238,209,194,42,228,201,39,147,189,246,81,131,245,238,210,115,102,101,191,226,104,207,145,6,126,239,179,178,180,21,24,82,163,43,88,179,94,223,48,223,45,192,136,140,236,77,146,230,146,234,100,134,176,18,63,45,21,8,224,21,5,127,192,18,34,199,75,100,105,56,19,14,13,65,231,129,203,4,44,243,223,42,122,178,216,59,79,76,177,28,38,175,123,192,186,101,72,35,85,249,119,43,241,37,63,199,149,83,64,42,97,247,81,214,65,167,176,85,208,156,92,234,226,137,110,136,37,229,66,0,4,162,165,113,222,71,214,5,73,124,173,216,188,40,181,64,128,16,75,50,178,170,0,158,6,196,101,114,138,83,0,0,12,200,130,119,44,233,145,89,240,253,186,
168,63,123,118,39,249,147,121,72,209,59,208,148,254,95,206,241,68,4,169,203,66,164,40,235,183,2,127,63,174,165,38,176,220,165,50,59,225,14,8,85,87,79,16,244,159,29,163,148,18,187,143,175,179,241,254,242,213,157,129,236,79,225,168,189,103,243,212,205,177,242,79,237,164,155,150,68,190,7,214,43,242,78,85,237,183,44,111,200,174,102,189,102,14,199,157,49,149,243,162,185,151,59,94,106,129,80,22,31,45,150,85,115,226,141,170,235,96,73,13,122,7,152,103,222,113,145,149,187,213,157,212,154,219,149,226,237,190,89,46,203,245,222,197,85,59,51,223,96,137,40,85,57,127,94,36,186,197,46,139,86,179,93,217,171,14,105,138,87,20,46,11,23,107,74,133,134,133,59,55,69,206,171,152,237,108,80,3,169,237,154,201,25,66,221,246,82,21,139,74,158,244,162,92,186,143,170,151,129,75,143,200,174,48,86,220,99,217,206,89,75,226,109,126,74,82,169,197,188,152,90,167,58,249,66,71,209,112,117,19,234,172,78,151,149,181,250,1,30,123,156,178,187,138,229,217,
177,42,186,231,58,200,201,106,79,9,135,97,196,110,121,144,8,239,65,221,14,64,140,211,110,107,104,42,212,196,207,152,213,103,133,242,61,31,92,108,190,9,102,197,175,97,233,188,148,84,233,176,188,253,128,18,167,40,85,113,215,96,221,74,114,101,230,144,5,136,149,244,72,43,187,42,187,140,246,118,179,184,74,132,0,192,153,198,65,148,11,178,170,133,106,49,171,5,248,155,84,83,43,27,127,141,182,235,175,36,169,152,124,171,221,52,217,158,143,44,12,49,170,154,117,177,229,117,37,197,32,94,82,58,133,224,220,157,201,87,78,156,96,166,80,140,114,178,238,165,46,217,144,183,103,112,115,165,216,252,149,56,78,167,189,40,72,98,153,11,132,81,224,38,14,91,82,90,78,57,45,39,88,132,52,230,120,163,91,237,239,168,200,105,167,169,204,242,164,219,165,49,29,87,156,113,47,7,107,190,192,84,122,132,62,167,31,131,151,239,35,230,114,108,117,30,190,230,146,147,158,229,85,223,114,90,208,251,66,30,120,114,250,126,114,245,221,171,127,174,33,138,221,194,89,177,
155,186,152,89,60,215,71,38,23,52,138,11,13,85,158,185,172,141,136,24,164,69,162,108,165,186,35,98,125,142,92,123,74,175,114,182,55,10,66,180,19,63,26,69,244,161,2,72,132,190,243,14,122,194,115,68,233,0,181,247,154,80,111,221,199,239,232,189,76,120,192,179,231,224,74,105,150,150,158,172,226,1,151,186,104,206,92,188,197,2,76,161,139,66,30,139,185,236,79,254,228,19,57,3,158,107,42,85,135,98,224,141,152,250,225,151,153,231,227,212,202,253,132,201,188,23,225,209,135,105,99,25,245,21,252,33,181,130,194,126,97,81,48,233,150,127,203,128,58,2,205,135,84,219,133,83,54,231,190,143,204,6,179,124,214,206,182,254,212,167,84,100,77,194,74,171,73,7,72,17,31,84,205,111,165,189,229,99,224,107,10,246,191,145,217,47,254,178,2,149,197,67,74,44,31,11,228,70,187,83,163,174,233,71,218,56,21,120,88,225,71,155,134,239,255,51,96,127,55,145,168,64,17,125,71,255,5,21,69,144,204,55,147,151,234,104,157,75,129,59,68,189,146,201,139,172,
192,70,61,104,119,150,110,143,98,119,10,65,144,246,146,12,183,55,49,161,118,197,252,139,103,182,99,70,246,234,15,98,73,37,79,47,251,69,12,120,183,51,205,218,149,145,53,88,173,181,106,239,43,132,135,86,59,179,110,15,112,182,181,181,69,201,197,255,0,72,113,3,148,
topic "CParser";
[2 $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9;*@(64)2 $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,0#27521748481378242620020725143825:desc]
[a83;*R6 $$3,0#31310162474203024125188417583966:caption]
[l288;i1121;b17;O9;~~~.1408;2 $$4,0#10431211400427159095818037425705:param]
[i448;a25;kKO9;*@(64)2 $$5,0#37138531426314131252341829483370:item]
[*+117 $$6,6#14700283458701402223321329925657:header]
[l288;a17;*1 $$7,7#70004532496200323422659154056402:requirement]
[{_}%EN-US
[s5;K:`:`:CParser`:`:class:%- [@(0.0.255) class]_[@0 CParser]&]
[s0; &]
[s2; CParser is simple yet very useful lexical analyzer suitable
for building descent parsers of languages with C`-like syntax.&]
[s2; CParser works on `'`\0`' terminated text in memory (not Stream),
so to parse the file you have to load it into the memory first.
Text has to exist during the time it is processed by CParser
(no copy is made).&]
[s2; Many CParser methods can throw CParser`::Error exception to indicate
the failure to parse required symbol. When using CParser to build
concrete parser, it is common to use this exception (preferably
via ThrowError method) to indicate errors as well.&]
[s2; CParser objects cannot be transfered (copied).&]
[s2; &]
[s0;3 &]
[s5;K:`:`:CParser`:`:Error`:`:struct:%- [@(0.0.255) struct]_[@0 Error]_:_[@(0.0.255) public]_
[^`:`:Exc^ Exc]&]
[s0;* &]
[s2; Type used as CParser exception. Contains single String with
error description.&]
[s2; &]
[s0;l288;%- [%%/ Derived from][%% ][^`:`:Exc^ Exc]&]
[s0;3 &]
[s0;l288;:`:`:CParser`:`:Error`:`:Error`(const char`*`):%- [* Error](const_char_`*[*@3 s])
&]
[s2;l448; Constructor.&]
[s4;l448; [%-*C@3 s]-|Error message.&]
[s2; &]
[s0;3 &]
[s5;K:`:`:CParser`:`:Pos`:`:struct:%- [@(0.0.255) struct]_[@0 Pos]&]
[s2; &]
[s2; Position in parsed text.&]
[s0;3 &]
[s0;l288;:`:`:CParser`:`:Pos`:`:Pos`(const char`*`,int`,`:`:String`):%- [* Pos](const_c
har_`*[*@3 ptr]_`=_NULL, int_[*@3 line]_`=_[@3 1], String_[*@3 fn]_`=_Null)&]
[s2;l480; Constructor.&]
[s4;l480; [%-*C@3 ptr]-|Pointer to the position in the input text &]
[s4;l480; [%-*C@3 line]-|Line number.&]
[s4;l480; [%-*C@3 fn]-|Filename.&]
[s0;3 &]
[s5;l288;K:`:`:CParser`:`:Pos`:`:ptr:%- [@(0.0.255) const]_[@(0.0.255) char]_`*[@0 ptr]&]
[s2;l480; Pointer to the position in the input text &]
[s0;3 &]
[s5;l288;K:`:`:CParser`:`:Pos`:`:line:%- [@(0.0.255) int]_[@0 line]&]
[s2;l480; Line number.&]
[s0;3 &]
[s5;l288;K:`:`:CParser`:`:Pos`:`:fn:%- [^`:`:String^ String]_[@0 fn]&]
[s2;l480; Filename.&]
[s2; &]
[s0;3 &]
[s0;:`:`:CParser`:`:CParser`(const char`*`):%- [* CParser](const_char_`*[*@3 ptr])&]
[s2; Constructs the CParser.&]
[s4; [%-*C@3 ptr]-|Pointer to the input text.&]
[s0;3 &]
[s0;:`:`:CParser`:`:CParser`(const char`*`,const char`*`,int`):%- [* CParser](const_cha
r_`*[*@3 ptr], const_char_`*[*@3 fn], int_[*@3 line]_`=_[@3 1])&]
[s2; Constructs the CParser, with additional information for the
text. The additional info can be used when reporting error.&]
[s4; [%-*C@3 ptr]-|Pointer to the input text.&]
[s4; [%-*C@3 fn]-|The name of file (in fact, can be anything, value
is just stored).&]
[s4; [%-*C@3 line]-|First line number.&]
[s0;3 &]
[s0;:`:`:CParser`:`:CParser`(`):%- [* CParser]()&]
[s2; Constructs the CParser. Input text has to be assigned using
the SetPos method.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 ThrowError]([@(0.0.255) const]_[@(0.0.255) char]_`*[@3 s])&]
[s2; Throws CParser`::Error.&]
[s4; [%-*C@3 s]-|Error message.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 NoSkipSpaces]()&]
[s2; Sets CParser to the mode where white`-spaces are not automatically
skipped, but have to be skipped by Spaces method.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 SkipSpaces]()&]
[s2; Sets CParser to the mode where white`-spaces are automatically
skipped. First skip is performed when position in input text
is assigned via constructor or SetPos, then the skip is performed
after any symbol.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 Spaces]()&]
[s2; Skips white`-spaces.&]
[s4; [*/ Return value]-|true if there were white`-space to skip.&]
[s0;3 &]
[s5;K%- [@(0.0.255) char]_[@0 PeekChar]()&]
[s2; Returns the current single character.&]
[s4; [*/ Return value]-|Current character.&]
[s0;3 &]
[s5;K%- [@(0.0.255) char]_[@0 GetChar]()&]
[s2; Advances the position in the input text by one character.&]
[s4; [*/ Return value]-|Character at position before advancing it.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 IsChar]([@(0.0.255) char]_[@3 c])&]
[s2; Tests whether there is a specific character at the current position.&]
[s4; [%-*C@3 c]-|Character to test.&]
[s4; [*/ Return value]-|true on match.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 IsChar2]([@(0.0.255) char]_[@3 c1], [@(0.0.255) char]_[@3 c2])&]
[s2; Tests whether there is a specific character pair at the current
position.&]
[s4; [%-*C@3 c1]-|First character of pair.&]
[s4; [%-*C@3 c2]-|Second character of pair.&]
[s4; [*/ Return value]-|true on match.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 IsChar3]([@(0.0.255) char]_[@3 c1], [@(0.0.255) char]_[@3 c2],
[@(0.0.255) char]_[@3 c3])&]
[s2; Test for a specific character triplet at the current position.&]
[s4; [%-*C@3 c1]-|First character of triplet.&]
[s4; [%-*C@3 c2]-|Second character of triplet.&]
[s4; [%-*C@3 c3]-|Third character of triplet.&]
[s4; [*/ Return value]-|true on match.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 Char]([@(0.0.255) char]_[@3 c])&]
[s2; Tests for a single character at the current position. If there
is match, position is advanced.&]
[s4; [%-*C@3 c]-|Character to test.&]
[s4; [*/ Return value]-|true on match.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 Char2]([@(0.0.255) char]_[@3 c1], [@(0.0.255) char]_[@3 c2])&]
[s2; Tests for a character pair at the current position. If there
is match, position is advanced by two characters.&]
[s4; [%-*C@3 c1]-|First character of pair.&]
[s4; [%-*C@3 c2]-|Second character of pair.&]
[s4; [*/ Return value]-|true on match.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 Char3]([@(0.0.255) char]_[@3 c1], [@(0.0.255) char]_[@3 c2],
[@(0.0.255) char]_[@3 c3])&]
[s2; Tests for a character triplet at the current position. If there
is match, position is advanced by three characters.&]
[s4; [%-*C@3 c1]-|First character of triplet.&]
[s4; [%-*C@3 c2]-|Second character of triplet.&]
[s4; [%-*C@3 c3]-|Third character of triplet.&]
[s4; [*/ Return value]-|true on match.&]
[s0;@(0.0.255) &]
[s5;K%- [@(0.0.255) void]_[@0 PassChar]([@(0.0.255) char]_[@3 c])_throw(Error)&]
[s2; Calls Char(c). If it returns false, throws error.&]
[s4; [%-*C@3 c]-|Character to test.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 PassChar2]([@(0.0.255) char]_[@3 c1], [@(0.0.255) char]_[@3 c2])_th
row(Error)&]
[s2; Calls Char2(c1, c2). If it returns false, throws error.&]
[s4; [%-*C@3 c1]-|First character of pair.&]
[s4; [%-*C@3 c2]-|Second character of pair.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 PassChar3]([@(0.0.255) char]_[@3 c1], [@(0.0.255) char]_[@3 c2],
[@(0.0.255) char]_[@3 c3])_throw(Error)&]
[s2; Calls Char2(c1, c2, c3). If it returns false, throws the Error.&]
[s4; [%-*C@3 c1]-|First character of triplet.&]
[s4; [%-*C@3 c2]-|Second character of triplet.&]
[s4; [%-*C@3 c3]-|Third character of triplet.&]
[s0;3 &]
[s0;:`:`:CParser`:`:Id`(const char`*`):%- bool_[* Id](const_char_`*[*@3 s])&]
[s2; Tests for given C`-like identifier. If there is match, advances
position by strlen(s) characters.&]
[s4; [%-*C@3 s]-|Identifier.&]
[s4; [*/ Return value]-|true on match.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 PassId]([@(0.0.255) const]_[@(0.0.255) char]_`*[@3 s])_throw(Erro
r)&]
[s2; Invokes the Id method with s as parameter. If it returns false,
throws the Error.&]
[s4; [%-*C@3 s]-|Identifier.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 IsId]()&]
[s2; Tests whether there is any C`-like identifier at the current
position.&]
[s4; [*/ Return value]-|true if there is identifier.&]
[s0;3 &]
[s5;K%- [^`:`:String^ String]_[@0 ReadId]()_throw(Error)&]
[s2; Reads C`-like identifier from the current position. If there
is none, an Error is thrown.&]
[s4; [*/ Return value]-|Identifier.&]
[s0;3 &]
[s5;K%- [^`:`:String^ String]_[@0 ReadIdt]()_throw(Error)&]
[s2; Special variant of ReadId that considers different non`-alphanumeric
characters to be the part of identifier as long as they form
C`+`+ normal or template based type.&]
[s4; [*/ Return value]-|Identifier.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 IsInt]()&]
[s2; Test for integer at current position `- there either must be
digit, or `'`+`' or `'`-`' sign followed by any number of spaces
and digit.&]
[s4; [*/ Return value]-|true if there is integer.&]
[s0;3 &]
[s5;K%- [@(0.0.255) int]_[@0 ReadInt]()_throw(Error)&]
[s2; Reads the integer from the current position. If IsInt is false,
throws an Error.&]
[s4; [*/ Return value]-|Integer.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 IsNumber]()&]
[s2; Tests for sign`-less number at current position `- there must
be digit at current position.&]
[s4; [*/ Return value]-|true if there is number.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 IsNumber]([@(0.0.255) int]_[@3 base])&]
[s2; Tests for sign`-less number with given base `- there must be
digit or letter `'A`' `- `'Z`' or `'a`' `- `'z`', where range
is limit by acutal base (e.g. for base 12 letters `'a`' `'A`'
`'b`' `'B`' are allowed).&]
[s4; [%-*C@3 base]-|Numeric base.&]
[s4; [*/ Return value]-|true if there is number with given numeric base.&]
[s0;3 &]
[s5;K%- [^`:`:uint32^ uint32]_[@0 ReadNumber]([@(0.0.255) int]_[@3 base]_`=_[@3 10])_throw(Erro
r)&]
[s2; Reads a number with the given numeric base. If IsNumber(base)
is false, throws an Error.&]
[s4; [%-*C@3 base]-|Numeric base.&]
[s4; [*/ Return value]-|Number.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 IsDouble]()&]
[s2; Test for floating point number at current position `- there
either must be digit, or `'`+`' or `'`-`' sign followed by any
number of spaces and digit.&]
[s4; [*/ Return value]-|true if there is the floating point number.&]
[s0;3 &]
[s5;K%- [@(0.0.255) double]_[@0 ReadDouble]()_throw(Error)&]
[s2; Reads a floating point number with C based lexical rules.&]
[s4; [*/ Return value]-|Floating point number.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 IsString]()&]
[s2; Tests for C`-like string literal at the current position. Same
as IsChar(`'`\`"`');&]
[s4; [*/ Return value]-|true when there is string literal.&]
[s0;3 &]
[s5;K%- [^`:`:String^ String]_[@0 ReadOneString]([@(0.0.255) bool]_[@3 chkend]_`=_false)_thro
w(Error)&]
[s2; Reads C`-like string literal from current position (follow C
lexical rules, including escape codes). Literals on different
lines are not concatenated (unlike C).&]
[s4; [%-*C@3 chkend]-|When false, ReadOneString is more permissive as
it allows unterminated string literals `- string is then also
delimited by end of line or text.&]
[s4; [*/ Return value]-|String literal.&]
[s0;3 &]
[s5;K%- [^`:`:String^ String]_[@0 ReadString]([@(0.0.255) bool]_[@3 chkend]_`=_false)_throw(E
rror)&]
[s2; Reads C`-like string literal from current position (follow C
lexical rules, including escape codes). Literals on different
lines are concatenated (as in C).&]
[s4; [%-*C@3 chkend]-|When false, ReadOneString is more permissive as
it allows unterminated string literals `- string is then also
delimited by end of line or text.&]
[s4; [*/ Return value]-|String literal.&]
[s0;3 &]
[s5;K%- [^`:`:String^ String]_[@0 ReadOneString]([@(0.0.255) int]_[@3 delim],
[@(0.0.255) bool]_[@3 chkend]_`=_false)_throw(Error)&]
[s2; Reads C`-like string literal from current position (follow C
lexical rules, including escape codes) with different delimiter
than `'`\`"`'. Literals on different lines are not concatenated
(unlike C).&]
[s4; [%-*C@3 delim]-|Delimiter.&]
[s4; [%-*C@3 chkend]-|When false, ReadOneString is more permissive as
it allows unterminated string literals `- string is then also
delimited by end of line or text.&]
[s4; [*/ Return value]-|String literal.&]
[s0;3 &]
[s5;K%- [^`:`:String^ String]_[@0 ReadString]([@(0.0.255) int]_[@3 delim],
[@(0.0.255) bool]_[@3 chkend]_`=_false)_throw(Error)&]
[s2; Reads C`-like string literal from current position (follow C
lexical rules, including escape codes). with different delimiter
than `'`\`"`'. Literals on different lines are concatenated (as
in C).&]
[s4; [%-*C@3 delim]-|Delimiter.&]
[s4; [%-*C@3 chkend]-|When false, ReadOneString is more permissive as
it allows unterminated string literals `- string is then also
delimited by end of line or text.&]
[s4; [*/ Return value]-|String literal.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 SkipTerm]()&]
[s2; Skips a single symbol. Decimal numbers, identifiers and string
literals are skipped as whole symbols, otherwise input position
is advanced by 1 character.&]
[s0;3 &]
[s5;K%- [@(0.0.255) const]_[@(0.0.255) char]_`*[@0 GetPtr]()&]
[s2; Gets a pointer to the current position.&]
[s4; [*/ Return value]-|Pointer to current position.&]
[s0;3 &]
[s5;K%- [^`:`:CParser`:`:Pos^ Pos]_[@0 GetPos]()&]
[s2; Gets the current position,.&]
[s4; [*/ Return value]-|Current position. It contains the pointer as
well as the line number and the filename.&]
[s0;3 &]
[s5;K%- [@(0.0.255) void]_[@0 SetPos]([@(0.0.255) const]_[^`:`:CParser`:`:Pos^ CParser`::Pos]`&
_[@3 p])&]
[s2; Sets the current position.&]
[s4; [%-*C@3 pos]-|New current position. Can be in different text than
previously used in CParser.&]
[s0;3 &]
[s5;K%- [@(0.0.255) bool]_[@0 IsEof]()_[@(0.0.255) const]&]
[s2; Test for the end of input text.&]
[s4; [*/ Return value]-|true when current position is a the end of input
text (`'`\0`' character).&]
[s0;3 &]
[s5;K%- operator_[@(0.0.255) bool]()_[@(0.0.255) const]&]
[s4; [*/ Return value]-|!IsEof().&]
[s0; &]
[s5;K%- [@(0.0.255) int]_[@0 GetLine]()_[@(0.0.255) const]&]
[s4; [*/ Return value]-|Current line.&]
[s0;3 &]
[s5;K%- [^`:`:String^ String]_[@0 GetFileName]()_[@(0.0.255) const]&]
[s4; [*/ Return value]-|Actual filename.&]
[s0; &]
[s0; &]
[s0; &]
[s0; &]
[s0; C`-like string literal formatting&]
[s0; &]
[s0; AsCString routines produce C`-like literals (compatible with
CParser) from character data:&]
[s0;3 &]
[s0;:`:`:AsCString`(const char`*`,const char`*`,int`,const char`*`,bool`):%- String_[* A
sCString](const_char_`*[*@3 s], const_char_`*[*@3 end], int_[*@3 linemax]_`=_INT`_MAX,
const_char_`*[*@3 linepfx]_`=_NULL, bool_[*@3 smart]_`=_false)&]
[s2; Creates C`-like literal.&]
[s4; [%-*C@3 s]-|Pointer to characters.&]
[s4; [%-*C@3 end]-|End of characters array (`'`\0`' characters are allowed
inside data).&]
[s4; [%-*C@3 linemax]-|Maximal length of line. If this is exceeded,
ending `"`\`"`\n`" and [@3 linepfx] is inserted and literal continues
on the new line.&]
[s4; [%-*C@3 linepfx]-|Pointer to zero`-terminated text to be inserted
at the beginning of the line when the line length is exceeded.&]
[s4; [%-*C@3 smart]-|true activates smarter breaking into lines `- breaks
at spaces are preferred.&]
[s4; [*/ Return value]-|C`-like literal.&]
[s0;3 &]
[s0;:`:`:AsCString`(const char`*`,int`,const char`*`,bool`):%- String_[* AsCString](con
st_char_`*[*@3 s], int_[*@3 linemax]_`=_INT`_MAX, const_char_`*[*@3 linepfx]_`=_NULL,
bool_[*@3 smart]_`=_false)&]
[s2; Creates C`-like literal from zero terminated character data.
Same as AsCString([@3 s], [@3 s] `+ strlen([@3 s]), [@3 linemax], [@3 linepfx],
[@3 smart]).&]
[s0;3 &]
[s0;:`:`:AsCString`(const`:`:String`&`,int`,const char`*`,bool`):%- String_[* AsCString
](const_String`&_[*@3 s], int_[*@3 linemax]_`=_INT`_MAX, const_char_`*[*@3 linepfx]_`=_
NULL, bool_[*@3 smart]_`=_false)&]
[s2; Creates C`-like literal from String. String can contain zero
characters. Same as AsCString([@3 s].Begin(), [@3 s].End(), [@3 linemax],
[@3 linepfx], [@3 smart]).&]
[s0; ]

View file

@ -1,42 +1,29 @@
TITLE("Miscellaneous")
COMPRESSED
120,156,133,83,91,111,155,48,20,254,43,71,234,69,109,154,
102,190,98,3,47,149,218,62,76,211,54,105,93,159,16,106,
28,112,26,171,4,50,155,76,169,182,245,183,239,0,33,221,
195,182,38,81,44,224,187,158,35,50,6,199,199,100,74,142,
200,27,159,228,198,46,205,182,106,243,204,9,161,83,195,100,
250,244,225,115,156,78,174,206,34,113,142,34,20,69,184,162,
92,75,78,5,139,240,143,114,202,36,227,130,106,22,11,205,
185,38,73,81,153,16,242,172,98,90,167,157,51,67,18,83,
146,81,37,180,208,148,43,205,144,203,8,97,68,49,73,5,
215,76,38,165,13,69,158,25,205,211,201,151,8,73,188,115,
66,113,66,35,38,148,96,132,19,38,208,138,106,45,168,146,
154,199,81,148,20,102,211,186,166,222,123,57,74,25,77,23,
84,165,24,249,229,229,101,70,5,25,18,8,20,163,68,96,
84,138,247,136,96,138,202,152,196,82,83,77,56,138,75,69,
100,178,49,222,172,255,222,188,211,144,111,86,87,36,113,173,
69,137,201,5,165,10,41,209,52,58,162,66,97,81,205,133,
212,138,160,57,99,140,115,70,57,139,99,38,35,169,146,149,
53,165,245,251,10,6,195,79,40,82,213,84,29,33,145,8,
201,153,136,187,97,113,116,98,44,146,49,149,130,200,8,149,
18,111,191,109,157,183,107,91,227,198,126,60,252,58,185,253,
116,121,127,7,89,224,41,124,116,161,176,85,101,106,219,108,
195,105,158,5,146,194,112,76,32,59,33,228,146,144,9,244,
155,122,200,247,215,112,187,43,242,14,195,6,40,30,95,87,
46,0,254,218,149,133,141,183,75,235,189,45,193,55,77,59,
112,161,89,194,253,252,98,126,1,118,87,216,126,25,51,120,
223,118,148,133,9,174,48,85,245,12,6,238,90,239,234,199,
25,202,89,112,165,53,131,164,105,1,159,195,147,171,203,94,
232,32,1,133,169,97,97,193,58,244,245,176,54,181,121,68,
219,197,51,132,141,45,220,210,21,176,50,117,89,89,31,166,
208,120,8,110,189,169,108,23,127,188,63,42,108,131,45,167,
80,186,176,169,204,51,70,128,214,238,218,173,169,192,213,203,
198,175,77,239,214,54,125,63,196,250,217,31,245,113,96,217,
59,184,177,222,125,71,243,165,111,214,249,56,185,125,161,124,
128,241,61,60,153,227,23,67,140,199,217,252,60,121,157,117,
55,220,145,126,118,62,206,121,255,194,65,209,212,161,245,219,
162,109,134,12,255,81,237,161,221,213,16,98,126,250,111,155,
30,250,48,226,14,139,158,92,113,24,222,183,61,240,16,231,
250,53,70,223,120,220,92,247,88,164,7,151,235,81,224,242,
231,13,30,222,13,107,235,118,232,253,161,1,140,69,242,223,
77,207,70,247,
topic "Miscellaneous";
[2 $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9;*@(64)2 $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,0#27521748481378242620020725143825:desc]
[a83;*R6 $$3,0#31310162474203024125188417583966:caption]
[l288;i1121;b17;O9;~~~.1408;2 $$4,0#10431211400427159095818037425705:param]
[i448;a25;kKO9;*@(64)2 $$5,0#37138531426314131252341829483370:item]
[*+117 $$6,6#14700283458701402223321329925657:header]
[l288;a17;*1 $$7,7#70004532496200323422659154056402:requirement]
[{_}%EN-US
[s3; Miscellaneous&]
[s0; &]
[s0;%- class_[* Exc]&]
[s2; &]
[s2; This is the preferred root class of U`+`+ exception. It is basically
a String. The idea is that all kinds of exception can be either
managed by specific handlers, or simple Exc handler can be used,
displaying textual information to the user.&]
[s2; &]
[s0;%- [%%/ Derived from][%% ]String&]
[s0;3 &]
[s0;:`:`:Exc`:`:Exc`(`):%- [* Exc]()&]
[s2; Default constructor.&]
[s0;3 &]
[s0;:`:`:Exc`:`:Exc`(const`:`:String`&`):%- [* Exc](const_String`&_[*@3 desc])&]
[s2; Constructor from String.&]
[s4; [%-*C@3 desc]-|Description of error.&]
[s0; &]
[s0; ]

View file

@ -10,6 +10,29 @@ NAMESPACE_UPP
#define LLOG(x)
#define LTIMING(x) // RTIMING(x)
class Nestfo {
bool bvalid, nvalid;
Vector<String> baselist;
Vector<String> nests;
int nesti;
void Bases(int i, Vector<int>& g);
void Init();
public:
const CppBase& base;
VectorMap<String, String> cache;
const Vector<String>& GetBases();
const Vector<String>& GetNests();
int GetNest() const { return nesti; }
void NoBases() { baselist.Clear(); bvalid = true; }
Nestfo(const CppBase& base, int nesti = -1);
Nestfo(int nesti, const CppBase& base);
Nestfo(const CppBase& base, const String& nest);
Nestfo(const Nestfo& f);
};
void CppWordsHash::AddWord(const String& s)
{
int i = GetHashValue(s) & 127;
@ -160,6 +183,8 @@ const Vector<String>& Nestfo::GetNests()
return nests;
}
String Qualify(Nestfo& nf, const String& type);
String Qualify0(Nestfo& nf, const String& type)
{
if(IsNull(type) || type == "const" ||
@ -228,7 +253,7 @@ String Qualify(Nestfo& nf, const String& type)
return x;
}
String QualifyIds(Nestfo& nf, const String& k, CppWordsHash& w)
String QualifyIds(Nestfo& nf, const String& k, CppWordsHash& w, bool all)
{
String r;
CParser p(k);
@ -245,6 +270,7 @@ String QualifyIds(Nestfo& nf, const String& k, CppWordsHash& w)
}
}
Nestfo nnf(nf.GetNest(), nf.base);
if(all)
t = Qualify(nnf, t);
if(iscid(*r.Last()) && iscid(*t))
r << ' ';
@ -262,6 +288,7 @@ String QualifyIds(Nestfo& nf, const String& k, CppWordsHash& w)
t << id;
}
}
if(all)
t = Qualify(nf, t);
if(iscid(*r.Last()) && iscid(*t))
r << ' ';
@ -269,6 +296,8 @@ String QualifyIds(Nestfo& nf, const String& k, CppWordsHash& w)
}
else {
int c = p.GetChar();
if(c == '(')
all = true;
r.Cat(c);
p.Spaces();
}
@ -280,20 +309,20 @@ String Qualify(const CppBase& base, const String& nest, const String& type)
{
CppWordsHash dummy;
Nestfo nf(base, nest);
return QualifyIds(nf, type, dummy);
return QualifyIds(nf, type, dummy, true);
}
String QualifyKey(const CppBase& base, const String& nest, const String& type)
{
CppWordsHash dummy;
Nestfo nf(base, nest);
return QualifyIds(nf, type, dummy);
return QualifyIds(nf, type, dummy, false);
}
void QualifyTypes(Nestfo& nf, CppItem& m)
{
m.qtype = QualifyIds(nf, m.type, m.words);
m.qptype = QualifyIds(nf, m.ptype, m.words);
m.qtype = QualifyIds(nf, m.type, m.words, true);
m.qptype = QualifyIds(nf, m.ptype, m.words, true);
}
void QualifyTypes(CppBase& base, const String& nest, CppItem& m)
@ -332,7 +361,7 @@ void QualifyPass2(CppBase& base, const CppWordsHash& words)
QualifyTypes(nf, m);
if(m.IsCode()) {
String k = n.key[i];
String r = QualifyIds(nf, m.key, m.words);
String r = QualifyIds(nf, m.key, m.words, false);
if(k != r) {
int q = n.key.Find(r);
if(q >= 0 && q != i)
@ -395,7 +424,7 @@ void Remove(CppBase& base, const Vector<String>& pf)
void CppItem::Serialize(Stream& s)
{
s % kind % access;
s % natural % at % tparam % param % pname % tname % type % ptype % virt % key;
s % natural % at % tparam % param % pname % tname % ctname % type % ptype % virt % key;
}
END_UPP_NAMESPACE

View file

@ -237,6 +237,7 @@ struct CppPos : Moveable<CppPos> {
struct CppSimpleItem {
String natural;
String type;
String qtype;
String tparam;
@ -245,6 +246,7 @@ struct CppSimpleItem {
String ptype;
String qptype;
String tname;
String ctname;
byte access;
byte kind;
int16 at;
@ -301,6 +303,7 @@ class Parser {
struct Context {
int namespacel;
String nesting;
String ctname;
Vector<int> tparam;
Index<int> typenames;
int access;
@ -403,7 +406,7 @@ class Parser {
CppItem& Item(const String& nesting, const String& item, const String& name, bool impl);
CppItem& Item(const String& nesting, const String& item, const String& name);
CppItem& Fn(const Decl& d, const String& templ, bool body, int kind);
CppItem& Fn(const Decl& d, const String& templ, bool body, int kind, const String& tname, const String& tparam);
struct Error {};
@ -454,30 +457,6 @@ public:
String NoTemplatePars(const String& type);
class Nestfo {
bool bvalid, nvalid;
Vector<String> baselist;
Vector<String> nests;
int nesti;
void Bases(int i, Vector<int>& g);
void Init();
public:
const CppBase& base;
VectorMap<String, String> cache;
const Vector<String>& GetBases();
const Vector<String>& GetNests();
int GetNest() const { return nesti; }
void NoBases() { baselist.Clear(); bvalid = true; }
Nestfo(const CppBase& base, int nesti = -1);
Nestfo(int nesti, const CppBase& base);
Nestfo(const CppBase& base, const String& nest);
Nestfo(const Nestfo& f);
};
String Qualify(Nestfo& nf, const String& type);
String Qualify(const CppBase& base, const String& nest, const String& type);
void QualifyTypes(CppBase& base, const String& nest, CppItem& m);
String QualifyKey(const CppBase& base, const String& nest, const String& type);

View file

@ -11,6 +11,7 @@ file
Pre.cpp,
cpplex.cpp,
Parser.cpp,
Parser2.cpp,
Base.cpp,
Info readonly separator,
Copying;

View file

@ -19,14 +19,34 @@ inline const char *bew(const char *s, const char *t)
return t;
}
static String s_operator("operator");
static String s_virtual("virtual");
static String s_inline("inline");
static String s_static("static");
static inline bool sSpaces(String& res, const char *& s)
{
if((byte)*s <= ' ') {
char c = *s++;
if(c != '\2') {
res.Cat(' ');
while((byte)*s <= ' ' && *s)
s++;
}
return true;
}
return false;
}
String FnItem(const char *s, const char *pname, const char *qname, const String& name) {
String res;
while(*s && (byte)*s <= ' ') s++;
while(*s) {
while(*s && !iscid(*s) && *s != '~')
s++;
while(iscid(*s) || *s == '~')
res.Cat(*s++);
if(res == "operator") {
if(res == s_operator) {
while(*s && *s != '(') {
if((byte)*s >= ' ')
res.Cat(*s);
@ -42,6 +62,7 @@ String FnItem(const char *s, const char *pname, const char *qname, const String&
}
while(*s) {
const char *w = bew(qname, s);
byte c = *s;
if(w && !iscid(*w)) {
if(iscid(*res.Last()))
res.Cat(' ');
@ -49,11 +70,11 @@ String FnItem(const char *s, const char *pname, const char *qname, const String&
s = w;
}
else
if(iscid(*s)) {
String q;
while(iscid(*s))
q.Cat(*s++);
if(q != "virtual" && q != "inline" && q != "static" && !InScList(q, pname)) {
if(iscid(c)) {
const char *b = s++;
while(iscid(*s)) s++;
String q(b, s);
if(q != s_virtual && q != s_inline && q != s_static && !InScList(q, pname)) {
if(iscid(*res.Last()))
res.Cat(' ');
res.Cat(q);
@ -62,7 +83,7 @@ String FnItem(const char *s, const char *pname, const char *qname, const String&
while((byte)*s <= ' ' && *s) s++;
}
else
if(*s == '=') {
if(c == '=') {
s++;
int l = 0;
while(*s && !(l == 0 && (*s == ',' || *s == ')'))) {
@ -80,14 +101,17 @@ String FnItem(const char *s, const char *pname, const char *qname, const String&
while((byte)*s <= ' ' && *s)
s++;
}
else
res.Cat(*s++);
else {
res.Cat(c);
s++;
}
}
return res;
}
String Purify(const char *s, const char *qname, const String& name) {
String res;
while(*s && (byte)*s <= ' ') s++;
while(*s) {
const char *w = bew(qname, s);
if(w) {
@ -96,22 +120,16 @@ String Purify(const char *s, const char *qname, const String& name) {
}
else
if(iscid(*s)) {
String q(*s++, 1); //!!! speed up!
while(iscid(*s))
q.Cat(*s++);
if(q != "virtual" && q != "inline" && q != "static")
const char *b = s++;
while(iscid(*s)) s++;
String q(b, s);
if(q != s_virtual && q != s_inline && q != s_static)
res.Cat(q);
else
while((byte)*s <= ' ' && *s) s++;
}
else
if((byte)*s <= ' ') {
s++;
res.Cat(' ');
while((byte)*s <= ' ' && *s)
s++;
}
else
if(!sSpaces(res, s))
res.Cat(*s++);
}
return TrimRight(res);
@ -119,29 +137,33 @@ String Purify(const char *s, const char *qname, const String& name) {
String Purify(const char *s) {
String res;
while(*s && (byte)*s <= ' ') s++;
while(*s) {
if(iscid(*s)) {
String q(*s++, 1); //!!! speed up!
while(iscid(*s))
q.Cat(*s++);
if(q != "virtual" && q != "inline")
const char *b = s++;
while(iscid(*s)) s++;
String q(b, s);
if(q != s_virtual && q != s_inline)
res.Cat(q);
else
while((byte)*s <= ' ' && *s) s++;
}
else
if((byte)*s <= ' ') {
s++;
res.Cat(' ');
while((byte)*s <= ' ' && *s)
s++;
}
else
if(!sSpaces(res, s))
res.Cat(*s++);
}
return TrimRight(res);
}
String Gpurify(const char *s)
{
String res;
while(*s)
if(!sSpaces(res, s))
res.Cat(*s++);
return res;
}
void ScAdd(String& s, const String& a)
{
if(a.IsEmpty()) return;
@ -172,6 +194,7 @@ void Parser::Context::operator<<=(const Context& t)
access = t.access;
noclass = t.noclass;
namespacel = t.namespacel;
ctname = t.ctname;
}
Parser::Decla::Decla()
@ -935,10 +958,12 @@ CppItem& Parser::Item(const String& nesting, const String& item, const String& n
n.namespacel = current_namespacel = context.namespacel;
CppItem& im = dobody ? current : n.GetAdd(item, name);
im.key = item;
im.ctname = context.ctname;
CppPos& p = im.pos.Add();
p.file = filei;
p.line = line + 1;
p.impl = impl;
LLOG("New item " << GetCppFile(filei) << ' ' << line + 1 << " " << nesting << "::" << item);
return im;
}
@ -1059,6 +1084,11 @@ bool Parser::Nest(const String& tp, const String& tn) {
while(Key(t_dblcolon));
context.access = t == tk_class ? PRIVATE : PUBLIC;
context.noclass = false;
if(tn.GetCount()) {
if(context.ctname.GetCount())
context.ctname << ';';
context.ctname << tn;
}
String nn;
if(!tp.IsEmpty())
nn = "template " + tp + " ";
@ -1105,12 +1135,12 @@ bool Parser::Nest(const String& tp, const String& tn) {
}
if(Key('{')) {
NestBody();
im.natural = nn;
im.natural = Gpurify(nn);
im.decla = true;
}
else
if(IsNull(im.natural))
im.natural = nn;
im.natural = Gpurify(nn);
context = cc;
CheckKey(';');
SetNestCurrent();
@ -1125,7 +1155,8 @@ String DeTemp(const char *s)
return r;
}
CppItem& Parser::Fn(const Decl& d, const String& templ, bool body, int kind)
CppItem& Parser::Fn(const Decl& d, const String& templ, bool body, int kind,
const String& tname, const String& tparam)
{
String param;
String pname;
@ -1171,7 +1202,7 @@ CppItem& Parser::Fn(const Decl& d, const String& templ, bool body, int kind)
if(!body || IsNull(im.natural)) {
im.natural.Clear();
if(!IsNull(templ)) {
im.natural = templ;
im.natural = TrimRight(Gpurify(templ)) + ' ';
im.at = im.natural.GetLength();
}
im.natural << Purify(d.natural, d.name, nm);
@ -1183,6 +1214,9 @@ CppItem& Parser::Fn(const Decl& d, const String& templ, bool body, int kind)
im.virt = d.s_virtual;
im.type = d.type;
im.decla = true;
im.tname = tname;
im.tparam = tparam;
im.ctname = context.ctname;
LLOG("FnItem: " << nesting << "::" << item << ", natural: " << im.natural);
}
return im;
@ -1241,9 +1275,8 @@ void Parser::Do()
CppItem& m = Fn(d, "template " + tparam + ' ', body,
context.noclass ? FUNCTIONTEMPLATE :
d.s_static ? CLASSFUNCTIONTEMPLATE :
INSTANCEFUNCTIONTEMPLATE);
m.tname = tnames;
m.tparam = CleanTp(tparam);
INSTANCEFUNCTIONTEMPLATE,
tnames, tparam);
functionItem = &m;
}
}
@ -1346,7 +1379,8 @@ void Parser::Do()
Fn(d, Null, body, d.istructor ? (d.isdestructor ? DESTRUCTOR : CONSTRUCTOR) :
d.isfriend ? INLINEFRIEND :
context.noclass ? FUNCTION :
d.s_static ? CLASSFUNCTION : INSTANCEFUNCTION);
d.s_static ? CLASSFUNCTION : INSTANCEFUNCTION,
String(), String());
functionItem = &im;
}
else {

1447
uppsrc/CppBase/Parser2.cpp Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,5 @@
topic "Ctrl";[2 $$0,0#00000000000000000000000000000000:Default]
topic "Ctrl";
[2 $$0,0#00000000000000000000000000000000:Default]
[l288;i1120;a17;O9;~~~.1408;2 $$1,0#10431211400427159095818037425705:param]
[a83;*R6 $$2,5#31310162474203024125188417583966:caption]
[b83;*4 $$3,5#07864147445237544204411237157677:title]

View file

@ -1,55 +1,317 @@
TITLE("FileList")
COMPRESSED
120,156,237,188,249,83,99,73,150,38,250,175,96,221,51,101,153,53,57,249,98,205,140,202,236,105,171,55,61,221,99,245,166,172,199,172,179,103,230,135,124,153,29,100,4,145,137,85,100,68,24,16,85,93,239,217,107,99,23,32,144,64,18,18,18,66,151,69,72,108,90,208,138,16,210,101,21,8,45,23,73,32,132,132,144,208,138,246,21,173,87,247,190,43,1,17,16,25,145,91,213,204,179,103,214,10,179,208,197,175,251,241,227,199,143,159,243,125,238,14,159,223,169,251,55,255,230,214,7,183,254,242,214,15,124,62,249,79,13,79,234,95,62,109,249,226,243,198,123,247,30,124,90,127,231,254,167,191,251,47,255,245,87,159,254,242,215,239,125,116,239,253,170,148,219,152,148,187,31,223,190,251,224,254,221,219,247,238,124,132,253,119,251,238,237,59,247,239,220,189,119,251,193,157,95,221,123,112,247,238,131,91,159,60,122,90,223,220,252,197,231,79,239,60,120,240,105,181,209,157,15,238,252,229,157,143,239,223,185,253,241,189,7,247,30,220,190,251,241,131,59,88,219,59,183,110,
221,185,245,241,157,251,183,239,221,125,112,231,254,39,143,27,154,31,125,241,121,253,131,187,159,254,242,31,62,194,26,221,173,246,132,9,191,117,251,163,59,247,62,190,119,231,214,221,91,119,238,97,93,221,126,240,224,222,237,143,239,63,184,251,171,143,62,250,228,81,253,139,150,198,231,207,46,251,106,188,125,251,206,237,79,191,186,253,241,167,152,206,255,242,47,255,242,225,237,123,183,46,52,184,135,9,187,125,235,30,166,234,109,172,236,214,189,59,31,223,190,255,171,91,191,186,255,224,246,131,91,119,49,225,247,63,190,117,255,147,23,245,77,245,223,190,123,232,247,127,112,232,31,223,250,164,177,165,1,19,241,203,127,119,251,246,199,88,147,143,62,248,232,47,111,223,251,24,27,232,131,187,247,238,63,248,248,22,214,249,157,59,119,238,222,189,115,251,238,157,95,253,234,206,253,143,238,127,252,201,55,13,245,143,27,154,190,248,252,255,254,167,255,231,223,254,237,223,255,251,255,246,89,221,231,205,183,63,253,47,159,60,196,254,253,93,227,211,134,223,54,54,183,84,159,107,
86,253,228,203,234,227,223,60,127,250,242,219,103,213,23,95,214,125,254,111,111,221,250,247,183,110,125,249,229,175,223,187,245,225,173,15,239,220,191,255,126,221,229,4,92,189,169,251,167,215,207,191,190,85,119,37,244,122,133,79,174,87,121,45,232,197,203,175,158,54,62,122,155,164,186,215,58,124,241,139,47,62,111,190,243,105,221,229,215,175,127,221,248,109,253,215,13,159,220,185,115,239,214,47,176,113,222,106,239,88,109,235,105,107,109,237,40,32,173,216,167,32,103,198,198,64,177,95,131,163,107,206,187,122,152,166,210,214,89,66,232,23,184,79,59,39,57,211,89,225,26,151,115,146,236,102,151,135,188,221,158,142,168,65,193,100,12,173,186,151,180,212,182,131,92,43,129,122,72,208,173,83,109,35,222,128,123,197,177,186,190,122,30,62,25,139,56,130,7,32,186,95,26,179,152,193,112,240,208,217,157,47,73,236,203,203,165,173,172,58,172,222,46,5,129,140,11,9,6,103,102,90,103,46,62,178,153,50,21,45,202,243,173,166,61,236,35,210,117,120,0,76,187,213,238,74,
18,226,174,100,18,196,14,194,73,151,112,192,151,62,94,19,88,218,143,74,173,118,116,185,171,45,212,190,227,242,181,159,1,152,168,89,85,2,137,40,53,209,138,202,101,207,107,243,80,123,92,63,4,16,122,70,98,109,189,170,240,26,101,22,71,155,142,196,11,99,204,196,150,27,80,45,230,252,197,41,23,146,46,226,105,4,143,92,173,114,45,103,45,186,20,196,106,237,209,22,118,7,59,50,129,64,192,60,183,87,241,173,111,17,79,186,144,80,251,26,88,14,45,250,19,68,176,16,162,7,115,197,210,41,174,18,131,244,168,126,205,49,63,105,104,167,17,198,215,59,134,197,114,72,23,83,115,210,33,5,159,65,158,114,91,124,172,133,209,184,108,82,26,218,69,41,68,94,101,236,76,102,162,196,195,120,82,63,82,12,118,11,78,80,117,158,12,69,211,209,252,17,174,35,214,189,144,18,7,125,67,251,91,237,232,40,181,3,23,240,207,168,2,35,129,177,160,186,192,29,47,180,102,214,69,22,240,36,120,14,56,44,210,222,19,125,150,161,137,48,83,90,91,160,228,101,
24,66,37,130,124,53,11,169,17,87,133,11,78,251,35,174,179,130,50,164,88,138,245,31,21,203,65,74,121,214,155,58,159,1,203,185,232,249,193,161,43,225,56,65,202,201,88,184,146,80,157,91,131,73,145,160,159,7,1,81,16,205,24,228,101,106,151,26,5,169,21,87,42,57,181,225,63,235,157,239,57,24,224,173,182,103,194,172,188,92,46,223,240,26,42,97,24,209,164,161,50,105,104,123,227,32,202,69,139,165,114,128,74,50,218,149,67,253,121,209,222,198,4,224,118,198,20,125,28,203,0,193,84,8,107,131,16,97,169,103,96,224,132,206,151,194,135,22,81,220,159,56,21,109,139,102,188,40,44,209,81,79,86,112,235,163,120,101,41,232,238,77,184,200,206,3,186,62,147,82,153,144,117,16,57,23,228,207,149,39,169,238,200,84,98,30,142,251,102,54,53,106,226,188,213,214,222,142,50,44,189,231,157,139,86,9,151,114,228,40,174,216,43,92,185,221,157,159,192,155,75,132,49,26,107,171,84,84,162,172,144,114,102,177,11,54,56,182,149,37,30,48,28,62,2,32,
117,193,176,55,121,86,36,76,203,104,231,16,155,205,223,116,47,102,237,71,226,33,111,71,112,35,51,0,45,21,36,71,64,164,75,50,61,25,227,10,207,33,73,97,122,212,156,51,231,194,189,72,40,235,34,123,198,96,75,116,72,46,100,159,157,43,16,209,12,74,69,18,21,168,68,138,81,197,179,249,46,164,216,94,146,160,253,222,98,217,153,115,133,132,209,8,64,22,59,78,5,25,79,30,118,33,71,188,2,34,214,83,134,182,142,219,97,139,87,28,5,0,242,6,92,48,206,72,166,103,80,130,216,159,230,230,55,55,116,204,4,184,141,120,52,221,187,206,169,109,98,247,108,201,37,220,142,68,219,138,249,41,179,103,130,70,139,5,96,14,34,81,160,230,152,104,209,165,139,84,7,90,9,6,17,117,160,12,121,125,230,41,194,168,204,28,163,44,144,34,220,142,82,49,152,71,225,136,58,187,103,85,236,123,122,121,195,3,48,178,159,215,35,224,84,95,133,139,130,225,67,135,15,4,182,52,84,33,189,34,158,45,230,5,211,157,60,237,32,35,53,23,159,43,198,169,
253,106,111,60,119,196,154,29,8,231,216,142,179,138,206,238,15,169,148,156,148,159,140,20,231,19,74,125,22,82,226,36,10,252,200,218,40,153,57,44,212,120,241,51,109,71,211,8,223,190,158,58,5,4,21,22,180,2,85,50,92,37,109,73,146,69,32,32,167,174,116,57,211,9,212,222,239,157,31,215,168,129,210,16,162,93,203,140,14,201,100,21,177,116,24,191,62,6,128,37,19,132,196,5,52,56,72,92,149,142,155,23,187,240,227,100,252,25,45,147,80,169,114,83,122,251,226,169,217,117,34,48,172,163,200,216,62,190,221,34,235,26,212,118,249,211,130,197,182,229,53,247,178,123,110,219,66,3,179,135,172,194,104,116,62,239,95,167,185,134,20,243,157,122,109,190,59,85,4,29,29,216,18,141,135,80,138,158,140,40,226,226,29,244,136,81,168,204,238,116,153,56,51,219,123,80,200,144,153,36,200,33,7,45,177,190,52,182,134,224,33,235,42,2,209,246,240,244,25,234,190,110,123,204,90,202,116,162,113,35,9,66,51,42,0,206,1,129,112,200,194,5,224,0,138,208,
13,196,68,130,233,64,15,136,0,226,177,110,36,18,10,185,32,54,15,156,151,19,160,203,72,80,13,74,247,201,168,133,99,66,73,240,174,101,71,163,4,142,193,144,11,95,100,144,80,202,148,94,189,55,235,8,135,243,170,1,143,28,51,142,22,61,230,121,209,96,187,240,100,151,77,99,193,128,172,232,88,194,77,199,247,193,142,178,103,182,71,166,9,234,97,241,96,124,55,170,183,109,91,32,209,44,79,150,21,102,35,197,41,45,186,80,130,45,1,50,23,58,41,120,229,3,167,253,59,44,17,124,232,101,141,7,17,61,127,77,182,209,213,11,110,229,176,48,164,157,74,83,10,121,47,226,161,110,202,3,76,187,110,172,131,182,45,13,108,21,10,22,117,171,105,115,229,28,237,215,19,212,171,210,20,32,217,226,72,17,130,47,217,157,146,116,47,241,85,109,231,133,96,4,16,168,172,96,116,44,61,184,211,47,26,9,140,91,102,64,57,80,26,161,131,35,69,225,228,41,119,103,90,85,4,7,206,44,237,37,181,17,146,176,188,211,7,241,181,74,102,170,60,51,4,159,
56,2,101,110,96,114,175,23,47,25,19,32,69,181,110,128,34,3,58,74,29,48,153,160,6,84,187,110,20,166,184,56,137,157,73,168,95,168,214,110,18,138,60,147,22,129,182,16,53,157,45,110,63,247,149,55,70,172,69,221,65,18,45,250,142,99,22,38,136,219,140,154,10,115,243,86,144,139,248,135,251,136,5,17,45,156,130,146,232,232,222,58,8,178,72,51,211,189,142,144,39,112,10,204,207,90,217,104,144,129,82,228,81,225,201,102,94,200,83,58,50,208,225,4,126,186,164,12,238,173,193,149,158,248,220,0,114,212,83,130,51,209,17,84,147,152,43,135,220,176,91,19,244,33,190,68,174,167,19,152,196,249,188,40,91,52,61,74,143,204,2,69,149,165,20,132,33,4,9,35,131,132,64,86,177,79,162,171,78,129,41,251,132,113,157,19,34,30,162,250,9,22,10,35,101,184,232,38,58,43,52,45,160,245,64,109,83,25,32,232,221,38,226,18,123,162,50,14,203,129,73,11,232,27,132,129,182,45,123,47,1,53,23,100,49,192,112,102,204,150,77,162,66,172,127,99,
111,62,102,92,233,67,123,1,179,208,101,209,158,24,93,235,224,97,249,60,120,90,4,201,150,213,253,179,232,160,44,131,166,99,68,115,17,71,222,6,22,134,78,97,197,142,72,108,211,194,61,93,176,88,168,76,109,148,120,153,54,244,132,33,41,194,156,60,170,150,168,81,166,174,247,96,254,4,72,35,189,225,206,98,113,227,120,21,112,249,240,224,10,176,84,118,183,234,144,35,70,18,162,245,236,184,44,222,99,219,104,146,6,89,91,209,229,86,209,128,162,21,123,211,163,79,210,86,57,180,104,174,236,55,181,1,3,59,209,204,2,160,108,31,222,163,199,139,34,69,18,231,96,39,55,42,128,21,191,212,89,56,226,226,73,232,126,194,84,81,81,11,65,132,146,9,66,149,132,203,190,98,56,231,164,113,113,15,64,38,245,241,105,114,148,180,80,57,63,46,6,182,201,133,217,96,172,123,31,220,154,25,22,111,29,89,45,228,157,202,224,134,169,28,228,158,8,97,47,222,25,5,12,252,202,198,42,11,5,213,221,209,205,200,164,98,226,104,120,29,204,148,89,171,122,65,
28,208,72,156,89,136,112,2,101,53,6,137,170,216,214,169,216,207,192,1,151,8,6,42,174,9,151,120,39,233,14,28,187,29,140,132,74,186,18,157,223,240,225,211,56,130,16,93,233,89,236,115,57,123,248,37,46,236,93,211,91,217,184,118,69,72,16,95,131,35,99,252,67,179,34,29,20,239,103,6,43,150,168,34,116,8,180,105,215,136,172,132,72,127,72,26,166,239,47,59,251,1,91,212,230,21,211,86,226,20,204,61,142,182,17,104,141,228,181,66,156,211,142,142,162,90,205,61,179,207,96,29,44,48,105,32,126,49,80,96,39,196,193,197,104,180,13,212,185,79,32,133,123,108,241,84,91,16,207,76,38,121,5,194,156,38,220,22,90,62,193,85,74,135,241,148,65,21,65,20,11,40,87,174,86,50,53,157,139,168,175,219,63,150,94,66,57,243,250,200,57,52,62,54,12,123,139,61,231,219,11,40,66,78,198,121,22,138,122,183,111,234,64,48,156,234,9,239,235,104,157,37,88,188,176,91,65,123,177,121,221,77,108,130,145,36,148,194,107,121,56,82,132,48,88,17,
47,208,51,105,90,106,120,215,4,91,40,237,8,125,110,94,139,42,36,43,10,46,63,103,100,130,163,185,130,220,115,60,49,15,162,253,59,150,33,182,134,161,218,31,208,106,2,165,224,9,164,83,196,123,12,96,168,11,0,251,231,147,83,148,44,203,180,137,56,74,193,244,158,34,55,215,199,101,161,178,99,42,42,70,243,83,19,62,194,216,76,22,53,71,204,147,138,224,2,202,158,72,198,24,234,100,251,30,219,9,34,20,233,164,46,218,161,140,138,37,254,88,40,59,157,55,146,123,214,245,10,63,2,73,217,220,195,65,211,25,229,24,76,108,183,15,187,208,64,122,127,243,168,66,117,47,7,17,41,36,93,5,79,1,233,201,94,188,104,216,232,72,166,23,134,178,184,52,78,178,211,77,178,44,181,138,20,221,23,110,72,235,193,220,112,21,11,217,142,42,120,243,181,23,86,131,145,113,161,179,149,126,114,220,10,3,188,83,56,143,142,14,117,129,190,118,102,44,148,1,139,25,92,37,141,202,186,3,64,170,91,54,50,65,192,171,168,124,19,103,180,92,70,248,97,193,
50,25,145,91,226,254,25,46,202,53,172,211,163,168,149,137,228,166,12,168,54,5,169,183,100,123,165,129,109,176,139,146,230,7,64,90,104,110,155,198,241,24,3,187,60,214,148,125,202,162,49,22,7,103,143,104,97,45,170,61,183,211,231,71,147,80,135,30,237,87,46,119,113,230,120,199,0,80,224,246,20,208,4,193,143,246,119,23,185,134,14,35,106,183,168,142,182,109,137,248,10,47,203,29,39,13,7,229,100,221,201,30,93,201,162,193,49,233,33,107,16,68,86,178,120,200,207,211,112,247,188,115,100,98,123,122,25,57,171,108,164,219,224,76,186,115,50,62,113,170,104,239,230,68,204,44,74,116,47,58,171,158,69,151,73,131,54,157,212,179,236,84,31,49,218,35,184,72,82,202,96,36,226,193,140,91,78,23,133,112,116,121,162,167,100,94,237,39,45,36,216,193,179,29,238,114,15,159,199,159,221,4,59,36,21,4,78,251,180,131,113,143,119,103,90,180,116,42,38,149,151,83,1,163,155,179,215,110,176,134,152,90,84,202,246,149,184,249,101,246,132,167,160,140,13,201,
199,247,248,165,51,40,226,233,156,94,214,36,33,255,28,191,123,178,196,157,33,39,180,254,232,98,239,110,202,137,235,33,132,84,219,58,167,165,40,70,57,231,132,53,154,60,176,96,94,82,22,131,27,162,29,194,169,129,227,119,197,204,203,78,207,144,129,15,122,221,150,64,27,154,234,155,103,68,142,16,173,196,33,153,62,246,26,65,148,92,129,82,16,143,56,64,79,204,157,67,169,196,252,41,208,97,2,55,10,7,8,146,63,236,197,35,50,18,162,80,16,224,204,216,78,60,127,102,154,74,181,33,124,78,251,240,97,72,206,28,70,232,156,245,228,169,25,220,218,30,222,102,86,200,41,251,0,152,100,171,117,170,109,14,92,30,34,46,238,225,241,57,49,98,7,25,211,204,165,146,218,135,50,150,217,152,13,82,219,96,145,100,92,154,53,219,136,96,119,74,57,182,195,65,193,246,34,97,33,159,135,146,73,91,209,175,129,196,6,33,97,153,23,228,218,248,209,152,143,204,246,68,151,9,144,3,156,39,147,80,212,76,72,110,194,78,147,98,120,72,28,88,177,40,151,135,
124,232,110,116,192,0,103,22,187,58,41,160,171,232,91,225,104,52,99,100,165,239,192,86,18,151,200,85,79,12,14,97,193,72,49,224,118,1,116,166,183,104,40,24,185,105,28,179,159,205,113,39,219,124,216,228,138,41,210,193,17,126,171,158,63,221,138,249,103,187,165,75,137,193,149,36,134,45,204,110,44,232,42,90,139,61,152,143,23,65,103,146,75,112,17,141,196,52,122,32,235,78,99,241,184,40,4,157,123,65,4,130,115,73,68,239,39,195,128,55,210,22,150,109,251,209,49,31,219,161,61,114,43,5,30,43,29,37,83,188,187,21,4,18,118,108,251,229,40,243,152,208,78,49,67,218,204,40,156,166,3,74,101,116,94,2,37,11,104,32,34,0,145,232,81,81,188,122,156,47,102,130,11,27,125,202,165,179,21,174,7,118,49,252,216,82,133,6,43,73,142,236,108,194,119,58,163,54,193,71,162,78,243,116,26,229,108,159,15,81,195,176,133,204,109,221,73,208,28,59,147,40,20,69,172,30,224,116,97,135,229,102,17,19,189,212,101,81,182,135,174,222,130,39,226,27,
172,193,147,117,12,28,38,43,17,202,64,70,32,75,209,44,158,189,36,180,19,139,216,41,210,245,137,67,24,200,13,27,246,6,150,114,39,2,190,4,23,50,99,222,68,228,26,209,73,74,36,55,69,148,199,243,253,54,243,248,104,80,144,210,245,147,227,196,98,36,44,219,81,23,193,216,244,44,3,13,240,103,88,115,122,123,107,90,78,26,59,152,61,67,123,122,209,190,74,144,89,10,22,160,5,106,132,131,165,45,55,0,211,128,156,153,132,204,162,65,187,184,16,4,17,216,207,69,17,226,73,152,30,2,193,82,246,108,4,212,16,81,192,116,140,207,40,242,122,2,29,132,236,102,185,58,122,52,91,73,159,160,230,229,25,251,241,168,227,0,91,128,158,153,101,159,63,186,111,39,112,89,188,20,215,128,210,57,72,20,44,97,124,135,236,2,136,37,154,39,177,61,174,62,37,195,218,94,197,180,155,183,194,10,149,205,184,93,193,192,252,58,56,187,111,5,201,164,34,74,162,69,167,44,82,45,126,210,234,9,166,247,233,121,99,26,212,243,227,46,162,108,148,137,198,153,
40,121,30,191,75,21,110,32,80,140,151,82,56,34,71,241,74,134,129,90,115,146,24,189,34,156,166,48,208,238,212,48,115,207,107,229,175,131,242,147,83,28,12,120,236,116,231,168,189,104,229,158,162,166,160,60,162,116,179,42,212,204,124,138,59,67,101,175,113,170,142,181,166,152,198,126,34,119,114,240,36,12,28,11,145,232,128,25,123,198,30,7,45,168,184,230,113,81,61,223,182,13,166,166,70,86,85,227,40,23,79,33,211,227,113,171,231,60,217,77,153,174,144,233,248,200,100,213,235,90,209,236,202,154,9,101,14,47,10,5,164,165,249,10,73,239,23,96,190,230,137,182,203,143,210,69,28,77,96,97,21,108,218,19,123,134,198,44,200,73,242,209,140,21,151,17,154,65,57,51,229,63,6,108,203,187,112,158,62,164,242,74,247,246,65,229,97,122,117,213,167,89,95,110,221,37,45,121,198,22,188,36,204,47,77,67,6,134,82,81,97,204,219,148,18,103,190,211,114,82,154,177,9,50,137,195,9,156,32,131,151,149,22,138,184,220,116,116,27,72,116,81,42,232,20,177,
27,93,63,209,172,91,150,173,190,193,174,45,162,120,120,224,144,152,155,58,85,174,248,153,11,122,84,65,9,185,36,254,54,52,108,26,80,36,130,2,127,34,63,82,176,226,214,225,76,155,102,6,62,103,45,172,149,75,253,43,237,146,17,207,216,232,46,97,98,105,18,68,241,217,76,56,157,63,91,233,0,137,34,228,200,176,172,63,80,104,66,60,39,98,142,245,184,43,27,133,19,15,205,203,84,75,164,99,71,43,40,201,118,166,203,9,117,155,233,133,104,182,130,40,246,12,116,48,179,65,99,200,195,58,41,207,48,16,247,172,73,236,26,59,16,179,231,215,9,8,191,56,74,91,20,142,120,3,59,106,202,250,225,169,115,152,45,23,217,39,81,70,162,82,17,137,209,176,119,127,224,188,149,162,23,238,75,101,28,86,191,102,52,236,231,26,212,33,218,244,160,25,237,27,75,71,227,107,243,125,50,253,49,184,85,34,250,163,110,96,66,224,221,59,21,58,23,103,71,119,35,129,206,21,88,60,193,60,70,195,202,69,61,72,118,76,167,86,180,46,40,102,237,156,63,6,
149,195,46,31,218,29,218,24,243,3,220,221,237,115,70,124,11,77,130,147,212,210,232,216,162,114,80,166,47,5,143,75,235,123,199,34,89,152,23,148,185,201,240,249,10,11,213,210,201,180,94,59,180,155,141,73,140,170,53,137,188,164,238,27,0,81,125,255,9,35,213,10,73,143,188,139,131,12,229,160,27,176,120,17,58,101,209,59,97,91,157,236,182,143,16,65,137,101,32,169,246,157,47,64,180,125,126,2,57,98,163,99,99,185,164,116,138,23,143,180,129,146,125,138,203,100,47,76,197,251,173,220,160,147,71,156,216,172,232,100,125,39,199,91,3,113,173,211,25,153,138,119,44,29,38,245,80,170,76,243,110,245,237,15,117,69,142,86,252,106,19,107,106,40,184,184,129,96,81,138,85,73,0,56,5,134,30,45,153,209,8,83,70,64,247,109,40,113,114,13,91,199,109,197,141,77,123,71,239,236,113,43,125,243,184,21,141,14,116,114,178,85,111,118,3,60,95,106,64,47,64,67,252,220,74,242,232,48,177,219,229,17,168,211,135,61,35,199,177,88,63,108,193,34,233,161,
117,36,7,105,87,78,181,128,178,3,205,174,21,201,46,23,30,241,14,80,225,193,14,242,137,205,98,57,28,13,110,177,21,69,117,20,166,33,10,113,25,77,161,41,119,27,22,128,51,227,109,138,98,217,181,197,95,57,5,148,83,88,74,20,133,172,154,46,132,206,99,18,115,58,191,4,62,215,76,123,161,56,144,141,36,182,86,232,104,95,132,193,17,30,44,168,194,71,240,208,80,28,16,139,66,35,113,145,198,31,9,59,56,17,235,134,78,141,34,193,97,218,161,244,12,54,239,81,79,92,27,243,97,215,220,90,69,220,31,76,105,251,189,89,227,38,88,84,173,109,131,49,187,117,179,179,88,14,110,179,122,70,245,74,142,82,187,239,19,244,84,208,126,71,57,104,88,152,225,230,0,171,185,34,30,68,123,54,71,183,116,194,99,5,89,76,220,63,114,31,120,161,53,197,108,145,144,170,88,250,15,12,157,219,67,78,13,234,157,208,173,109,117,170,80,68,149,148,155,233,71,217,162,176,147,211,134,241,111,187,126,154,23,233,61,179,83,82,189,49,31,53,191,47,67,15,
225,78,241,208,14,171,157,206,209,232,115,62,123,162,47,124,14,0,206,141,129,172,29,37,197,128,182,174,97,219,184,184,151,202,218,108,157,244,22,184,162,3,154,9,78,90,246,183,29,115,69,238,206,88,132,24,195,82,127,88,231,52,13,163,125,4,50,173,63,118,54,149,107,227,24,150,123,203,211,86,199,124,107,153,27,12,143,70,43,136,58,4,172,164,78,203,254,115,129,64,194,89,247,176,177,192,29,176,28,28,192,150,168,112,123,184,139,133,159,54,147,19,102,123,18,92,27,177,158,87,184,163,167,125,90,103,143,103,195,156,93,78,120,84,93,75,147,168,186,207,185,96,2,99,56,2,156,159,42,4,179,234,51,132,158,22,133,4,212,28,228,155,134,197,84,102,165,18,68,124,107,198,136,126,1,103,233,145,103,70,54,65,151,211,225,75,187,89,27,211,116,83,134,230,114,13,172,118,160,241,124,23,6,10,22,247,96,106,116,153,110,218,192,241,166,139,19,116,241,102,72,56,136,10,20,40,52,52,239,236,135,186,9,99,10,216,48,189,100,106,69,187,61,139,128,150,
94,65,233,21,1,106,246,109,17,16,133,29,239,168,69,114,129,153,221,211,182,67,143,106,59,93,51,91,100,247,113,59,87,39,86,86,214,237,4,16,99,193,156,36,89,223,221,235,41,136,39,251,3,224,116,132,50,51,48,84,10,12,46,7,187,205,20,1,213,198,50,41,253,250,8,210,59,2,77,160,229,25,40,57,94,6,193,94,5,122,220,138,193,219,238,99,12,219,163,105,196,141,143,183,181,249,136,169,182,121,88,44,221,20,88,133,118,173,96,160,192,197,187,137,0,175,109,53,219,230,211,87,65,3,22,193,61,85,208,176,100,73,236,109,143,227,24,35,242,163,28,115,105,35,214,14,3,97,62,6,36,52,30,32,86,50,116,29,182,163,199,1,192,135,185,189,1,33,211,153,35,138,96,175,49,52,173,37,161,20,212,81,201,119,122,115,209,2,105,24,28,34,39,34,80,154,25,158,195,152,129,123,42,109,40,22,15,32,80,92,226,173,130,114,92,153,107,91,140,209,42,228,62,147,81,11,245,164,226,109,102,80,207,150,193,64,113,148,222,134,178,134,81,203,232,212,
129,207,133,131,146,155,59,182,208,38,74,41,247,157,35,179,221,97,74,55,74,157,118,242,135,145,65,192,36,144,27,99,69,80,145,231,20,29,139,37,161,211,78,53,14,40,253,182,176,133,14,70,60,189,225,240,250,232,80,7,121,211,74,32,128,177,9,14,181,178,230,41,25,157,145,182,9,53,23,6,196,246,180,108,74,193,8,154,161,148,217,187,49,187,13,118,140,6,211,4,157,205,183,189,38,52,38,68,233,50,164,69,247,187,75,233,20,151,56,48,56,48,203,70,185,75,113,253,88,88,195,76,99,158,56,140,209,166,214,115,87,44,31,41,34,181,212,104,195,13,153,64,242,162,155,139,210,15,143,66,128,127,114,53,9,25,43,69,43,184,37,183,9,199,204,39,103,82,73,16,144,235,78,49,116,67,155,45,4,167,101,103,136,118,30,158,206,56,219,135,198,139,8,221,125,172,153,176,174,27,138,227,96,7,222,28,227,193,250,32,97,4,212,101,51,142,96,98,173,119,215,199,24,93,61,28,72,66,253,86,5,1,196,21,36,198,17,222,41,219,188,57,216,106,59,233,
30,246,161,62,165,70,37,165,202,201,251,3,106,186,55,126,196,58,154,205,8,108,149,217,93,112,141,192,140,166,209,96,96,159,180,76,56,79,170,97,0,47,21,6,179,82,183,9,180,42,53,165,152,108,163,43,5,37,214,87,141,197,116,15,202,111,197,248,122,199,80,45,10,30,183,14,213,162,32,126,188,82,139,130,109,171,238,236,77,60,137,175,102,119,7,164,138,206,128,81,143,172,119,121,17,43,155,137,1,242,182,29,155,141,142,241,167,36,198,159,40,231,80,100,176,34,160,231,97,141,140,153,63,44,159,56,215,19,108,59,111,180,51,128,76,208,252,120,73,110,89,236,238,154,214,231,6,144,253,246,126,100,190,124,236,14,29,1,130,51,0,0,11,10,40,4,64,172,202,146,110,5,84,166,37,171,126,217,241,122,218,37,88,2,201,218,53,41,13,145,116,194,68,178,154,125,40,57,161,45,210,207,119,98,19,195,91,168,5,240,100,23,40,90,163,26,80,180,219,199,144,104,8,195,99,114,240,92,57,70,68,138,90,54,122,162,174,36,59,212,193,156,18,203,255,25,
189,214,198,217,57,52,103,245,84,70,239,225,174,55,73,62,92,4,249,235,109,204,197,148,223,140,193,176,227,213,246,12,37,128,241,30,187,135,153,48,99,244,188,224,235,144,110,116,40,121,163,58,10,209,54,69,211,182,158,167,80,161,100,225,208,13,184,16,36,168,82,103,115,182,115,162,112,118,94,99,150,79,231,117,184,184,24,206,80,195,115,198,161,138,120,145,163,183,91,108,243,103,193,252,144,74,42,84,179,3,129,37,238,148,56,88,217,84,237,157,249,112,251,73,40,227,117,151,87,132,14,81,190,8,143,69,54,29,91,71,49,118,36,197,226,69,114,210,66,208,61,81,177,141,138,228,107,188,172,14,7,100,152,17,128,78,199,79,119,136,134,7,71,189,58,164,212,221,89,228,118,170,73,126,181,213,30,228,241,115,152,241,181,83,167,192,129,93,54,198,178,197,142,206,142,57,6,70,172,99,154,42,85,77,162,198,185,83,21,1,237,94,233,239,90,155,88,62,235,118,46,109,68,45,167,64,247,180,218,214,177,128,198,141,1,209,26,120,172,19,22,130,9,176,140,158,
21,19,72,100,43,81,70,203,68,8,13,18,245,2,164,178,5,128,69,212,69,3,144,16,222,85,174,20,33,16,213,1,9,52,121,136,150,139,114,20,68,66,7,46,36,157,200,131,104,12,64,11,142,178,208,19,79,108,111,138,214,51,98,170,153,202,4,32,201,246,140,189,59,120,52,70,130,73,158,172,29,91,87,152,15,102,6,195,12,17,35,179,182,120,114,76,153,86,115,8,195,38,6,184,181,12,91,2,242,49,84,223,55,178,184,23,141,44,170,82,34,40,202,57,31,3,181,118,54,201,175,163,219,91,199,237,125,78,60,200,30,51,199,245,35,33,221,220,73,217,78,216,54,238,244,150,105,162,233,145,153,209,5,94,228,96,31,236,223,88,65,216,236,82,140,101,156,24,200,240,150,85,59,7,73,175,12,203,229,11,248,221,114,176,21,164,168,169,147,199,185,83,192,45,129,176,252,158,75,65,123,123,196,29,253,105,251,78,23,198,241,171,20,159,237,172,122,63,26,101,15,92,0,90,192,125,17,24,11,24,232,45,186,92,169,163,129,188,51,138,2,228,137,182,174,218,
14,65,210,177,209,175,103,112,164,220,72,36,47,24,98,225,58,69,179,22,117,190,163,253,124,180,175,146,201,100,218,232,46,210,74,145,195,85,247,76,23,221,154,32,157,239,52,106,251,168,229,105,212,59,152,222,178,43,67,131,134,243,53,227,192,132,37,32,181,204,104,132,195,174,45,171,128,63,25,98,199,132,185,181,221,34,23,203,233,62,41,167,35,194,135,21,125,189,133,160,57,173,88,88,39,118,23,55,120,217,240,136,205,192,50,195,35,157,20,138,129,115,54,146,147,117,59,203,201,116,23,247,208,185,40,63,89,96,76,87,198,50,129,120,199,193,26,154,11,88,212,30,51,203,190,155,43,204,121,100,192,50,203,137,176,18,43,110,226,166,213,101,16,115,13,145,197,227,141,101,69,97,104,185,245,120,126,191,157,191,27,25,20,13,0,231,116,253,90,103,9,177,176,98,198,110,49,67,17,39,219,15,100,48,138,133,233,200,86,121,89,47,99,227,251,121,93,113,237,153,101,181,195,194,146,206,113,245,42,118,55,218,195,192,129,253,196,178,49,146,29,59,225,44,165,245,
158,35,213,40,57,107,241,14,114,66,51,103,11,75,72,38,47,65,172,177,185,180,17,226,83,172,35,46,251,81,31,212,173,84,251,21,54,164,93,130,234,245,22,217,114,126,144,129,204,198,50,228,50,55,118,88,98,246,157,112,124,201,144,183,127,157,179,97,107,159,178,157,121,135,9,142,84,160,144,76,81,197,161,195,131,60,192,63,158,29,215,249,70,120,14,216,178,154,129,124,200,50,139,34,225,37,161,74,100,15,22,251,252,22,39,22,120,185,142,83,0,183,142,162,138,67,78,172,148,88,173,186,225,41,144,235,232,237,34,156,42,162,142,252,212,17,50,187,197,151,80,93,78,109,176,117,114,62,141,57,237,58,205,207,179,12,248,118,4,73,136,31,219,210,38,21,243,185,224,185,222,69,115,6,150,121,90,245,226,104,14,97,143,71,84,11,140,74,167,24,57,45,7,61,101,90,191,200,54,213,73,237,48,207,133,82,126,235,241,121,169,127,75,35,144,161,156,233,76,8,153,118,180,107,117,126,171,81,119,56,61,204,145,40,231,183,65,121,59,208,77,110,157,100,107,34,
102,218,209,176,70,186,189,158,231,110,137,198,142,73,27,156,240,22,115,120,151,157,182,198,100,198,0,192,55,78,123,241,169,178,219,125,228,221,155,218,20,232,39,131,7,132,161,226,70,13,161,146,46,220,243,138,111,185,201,0,111,168,67,44,86,216,114,220,182,42,32,69,33,235,56,114,132,22,81,59,216,173,115,165,4,86,18,46,62,213,138,150,2,110,0,69,197,164,98,42,75,159,193,157,67,39,122,153,119,98,21,36,6,237,62,16,24,27,30,131,137,153,92,91,117,227,42,77,237,199,120,25,12,200,248,182,35,176,76,149,246,81,119,19,150,174,12,221,80,228,246,174,29,185,58,41,28,221,86,124,172,120,168,147,77,140,75,6,186,210,86,212,142,115,146,103,185,39,65,93,52,1,156,118,225,187,214,193,67,49,11,21,158,204,17,45,133,72,82,146,157,233,94,52,151,22,196,168,111,244,20,159,86,59,180,179,179,20,52,163,242,205,79,102,103,148,101,174,71,37,92,212,72,237,91,230,253,232,198,33,23,195,34,109,7,202,30,47,180,57,46,243,170,184,66,233,
26,223,104,44,144,231,73,43,229,252,225,194,104,16,149,200,55,214,108,235,147,130,145,210,230,192,10,79,123,100,89,0,103,101,158,149,236,230,218,57,87,25,177,174,160,140,165,49,92,10,153,14,119,176,246,215,51,237,98,95,62,66,146,68,214,28,50,155,154,38,211,163,69,231,222,186,198,71,143,149,32,176,122,74,16,28,103,117,161,253,187,227,98,126,223,176,119,233,128,218,203,59,93,103,10,121,83,198,126,111,250,204,50,158,11,56,244,189,251,91,17,28,154,238,219,246,163,108,154,128,103,157,37,241,216,109,222,50,87,150,168,158,191,229,117,187,42,68,161,35,209,10,251,92,215,162,129,34,176,242,249,83,6,159,134,147,154,0,76,254,244,44,156,9,96,54,66,141,203,211,231,86,15,179,53,9,205,137,97,178,139,188,69,245,117,108,49,169,39,137,193,88,27,172,96,6,16,193,153,42,234,221,167,21,185,212,3,82,44,146,153,216,67,64,8,94,211,48,89,33,217,88,38,223,129,97,0,91,222,152,90,30,202,90,99,83,105,137,228,200,7,87,0,98,143,220,
130,155,117,118,132,206,204,3,189,222,86,161,158,82,60,91,57,48,245,240,188,24,245,93,156,216,234,161,154,56,188,224,105,154,63,134,128,115,171,115,24,22,176,17,101,199,244,74,134,57,177,23,9,242,143,49,99,6,179,65,170,39,24,148,147,35,204,81,27,192,68,125,83,204,242,153,84,204,7,92,157,103,232,36,186,115,68,207,250,160,84,183,45,54,195,242,12,87,81,35,44,30,148,138,112,178,17,1,51,135,175,209,31,43,123,245,98,35,169,227,98,219,116,117,133,67,139,122,129,145,110,200,218,113,142,38,212,173,8,179,3,231,45,229,167,152,213,4,133,97,131,185,81,6,106,118,232,226,249,33,206,249,217,32,106,97,119,109,85,50,126,205,122,223,94,59,19,237,183,40,178,221,100,250,166,106,57,154,196,57,90,131,65,24,216,155,72,216,240,7,164,190,80,9,227,45,203,35,163,19,139,131,187,195,147,22,176,171,35,62,177,207,152,154,75,196,90,187,212,178,237,128,18,237,12,211,41,25,72,61,151,143,193,253,93,217,92,116,3,183,108,14,15,204,168,215,
100,52,38,42,9,117,79,122,240,75,59,90,33,29,157,75,12,89,71,145,253,76,18,6,232,78,53,131,168,20,33,179,250,36,127,115,89,179,7,112,141,129,8,231,156,105,112,216,125,102,48,99,241,165,44,154,149,121,231,220,148,82,150,229,156,119,31,28,43,252,104,112,112,82,215,175,102,165,112,146,19,134,89,137,22,130,177,201,254,46,216,186,62,187,229,29,204,154,180,26,161,29,197,198,138,101,99,175,111,181,39,159,208,154,226,217,112,156,185,129,146,115,228,141,132,217,13,22,117,248,221,152,91,11,156,154,52,235,94,216,164,5,187,178,122,28,2,133,218,199,50,40,99,76,57,96,152,140,247,161,200,202,230,38,56,70,94,20,46,153,132,40,124,20,88,49,78,2,195,8,93,79,134,152,126,192,99,159,232,159,241,133,173,6,111,6,181,5,242,186,8,111,86,154,26,197,162,14,138,76,207,110,42,182,38,54,150,226,30,165,186,223,18,150,105,39,75,104,255,230,66,73,116,54,51,196,53,182,41,240,162,110,78,160,39,228,202,225,247,143,21,104,112,100,158,183,
53,74,198,122,236,38,231,180,174,109,169,177,243,108,174,19,197,89,118,229,93,173,6,56,19,100,236,171,44,33,4,178,82,150,193,72,102,148,23,26,129,92,198,204,104,57,226,183,140,142,51,140,128,43,106,88,159,245,17,67,3,63,188,223,152,174,185,201,56,60,159,72,228,229,135,201,229,240,82,95,23,138,110,179,20,74,92,55,5,40,14,238,24,206,219,176,176,102,32,129,22,165,119,135,39,34,41,19,19,61,73,136,75,219,247,2,17,205,74,143,42,5,239,151,105,164,114,79,159,129,71,218,178,3,154,212,144,149,48,51,95,49,145,231,151,138,182,204,228,170,224,168,115,0,35,194,35,72,101,165,253,80,161,31,102,208,237,171,219,112,154,6,91,78,218,99,238,77,195,244,152,48,9,141,230,242,112,121,238,140,225,96,109,57,13,104,107,108,207,204,4,19,253,235,249,77,75,116,143,25,238,89,102,157,219,233,139,49,122,14,178,196,215,183,82,108,204,95,22,48,242,61,53,102,95,29,1,58,244,89,63,47,72,108,47,6,231,206,250,244,58,2,147,190,233,147,
111,118,59,165,153,60,171,146,219,216,52,173,118,116,31,33,195,179,142,153,197,253,126,47,243,156,83,177,16,118,237,167,80,72,65,31,53,186,216,94,221,224,230,144,84,71,162,246,206,119,111,58,253,126,100,86,45,97,14,171,103,241,54,28,147,14,2,107,116,235,172,204,168,97,142,217,48,62,219,54,144,166,26,5,233,18,74,113,136,207,182,230,23,109,54,3,165,95,101,0,183,74,202,238,125,164,18,52,174,116,171,206,150,112,24,242,9,187,206,33,159,63,116,112,66,134,203,80,12,158,245,72,34,219,249,221,5,249,134,195,239,66,211,218,46,152,153,153,206,13,28,77,225,229,134,145,245,12,93,178,213,182,226,60,158,223,241,26,1,189,75,94,65,50,102,11,39,26,79,171,198,230,228,12,16,159,233,219,84,244,13,79,108,39,122,250,11,50,79,134,50,139,178,35,14,19,109,173,119,105,211,58,225,19,184,166,119,140,244,201,60,62,107,116,24,55,189,166,98,217,221,215,189,56,103,94,89,60,90,240,196,15,198,89,104,103,121,188,192,8,14,238,142,166,246,6,
206,151,208,147,234,196,159,142,176,208,156,16,242,14,183,85,119,149,55,236,147,23,219,44,199,147,23,219,44,248,18,150,196,250,10,65,90,170,118,106,30,157,231,212,78,205,21,243,238,78,253,112,190,187,45,196,175,158,190,56,43,22,166,8,42,4,141,151,248,108,111,29,36,135,198,230,84,170,226,201,137,158,52,26,212,229,79,7,0,165,55,11,114,34,252,1,172,254,186,11,85,165,203,154,206,242,110,201,81,61,54,39,140,140,140,203,229,242,195,137,101,198,24,234,61,182,98,254,121,60,35,71,124,136,22,69,78,244,228,66,208,99,105,91,61,33,114,15,219,137,109,122,245,156,64,154,35,159,159,157,155,70,98,178,240,44,155,232,162,72,250,42,103,171,54,30,185,96,11,142,146,64,43,82,76,138,204,125,197,224,30,107,116,121,153,233,199,5,143,55,193,190,152,113,198,62,87,112,219,115,41,19,80,222,89,177,226,53,17,67,150,220,54,227,30,113,19,208,244,64,190,189,109,88,20,195,72,141,216,136,35,155,178,240,248,236,18,87,10,105,193,225,174,144,90,68,
153,174,172,104,80,242,118,201,56,163,194,132,84,50,27,32,161,162,80,169,198,24,137,233,56,183,79,78,111,163,175,105,24,33,180,24,156,138,66,61,162,158,156,78,187,102,179,114,24,107,185,30,125,23,169,195,110,183,216,79,142,130,27,75,220,242,176,12,95,12,110,231,247,220,9,5,70,48,67,5,182,238,140,79,196,243,209,217,141,33,115,110,117,168,221,50,202,156,227,38,189,128,141,60,110,210,44,14,102,248,184,30,9,139,236,231,122,39,84,250,222,211,240,248,76,160,196,177,114,77,131,32,163,44,26,58,201,48,231,236,180,115,200,120,32,51,196,138,74,48,25,162,9,103,87,97,18,18,154,234,90,8,48,15,108,122,141,110,219,188,100,6,139,120,218,198,57,133,148,152,39,159,247,168,24,123,107,253,139,177,30,222,226,254,86,94,94,82,177,54,252,147,72,113,110,55,187,184,137,50,151,109,126,16,240,31,243,181,147,138,136,235,100,54,35,4,176,52,53,114,186,178,184,34,45,235,38,163,251,64,91,16,61,102,198,252,230,117,125,240,104,111,13,156,242,67,
112,230,64,101,32,4,216,181,115,239,60,100,231,45,8,145,227,193,98,17,215,75,26,165,37,163,163,84,184,122,3,37,188,149,89,58,73,139,172,187,70,73,8,3,231,1,162,113,71,154,103,172,0,59,121,157,36,110,194,52,64,233,20,83,30,216,45,156,139,71,129,254,222,158,221,189,163,161,245,65,130,24,46,89,54,9,122,182,207,149,7,217,91,140,216,194,249,84,240,148,154,159,80,247,123,44,169,115,76,28,59,121,116,60,185,57,40,177,156,217,55,15,247,151,109,193,202,198,198,150,106,119,122,91,1,12,157,194,90,118,103,92,57,142,160,41,239,96,104,97,151,161,158,58,136,218,236,179,43,187,18,18,177,127,14,72,87,184,75,131,41,34,177,187,212,191,48,220,94,160,132,166,89,7,252,114,9,230,160,254,74,207,4,177,71,51,190,216,133,95,174,250,127,0,93,193,69,186,204,82,44,129,182,98,172,98,28,77,71,6,107,167,141,175,121,184,161,198,86,244,190,225,72,27,186,72,199,143,247,146,49,66,195,21,81,67,214,106,148,29,212,250,170,121,52,174,
89,215,50,79,231,64,60,77,175,241,144,87,245,62,146,116,234,108,97,155,149,6,64,89,152,58,44,234,197,85,236,252,98,196,15,16,125,101,127,187,106,142,96,6,199,64,34,218,25,195,228,96,176,109,157,181,160,38,157,88,10,206,78,86,113,203,212,58,176,165,153,114,206,77,11,205,28,85,37,227,181,22,87,79,248,182,169,177,240,76,16,216,95,161,217,130,11,122,246,41,27,31,45,64,200,16,148,220,55,217,24,54,247,201,72,215,169,128,223,71,35,74,115,33,90,94,86,62,70,88,163,233,66,80,196,211,219,103,217,35,60,141,189,59,71,58,13,195,227,78,62,26,118,206,31,91,193,225,89,112,185,231,108,160,119,225,52,180,16,50,159,86,218,39,115,12,94,176,16,162,219,54,115,158,17,73,216,68,205,103,153,225,76,192,11,116,105,75,244,192,22,57,49,191,120,72,154,18,132,2,177,252,10,110,87,89,8,30,238,246,119,217,117,37,244,220,199,51,129,3,200,137,117,182,154,121,69,168,136,18,49,152,60,101,104,35,62,163,245,238,81,152,104,116,74,85,
94,24,234,63,222,206,37,33,161,73,19,88,47,4,57,209,242,214,178,221,220,131,30,247,145,134,93,168,125,141,38,214,28,30,88,205,203,171,224,225,26,130,108,46,100,13,154,236,58,18,115,36,0,83,59,143,92,236,76,40,200,237,243,160,13,95,164,73,229,234,157,51,116,119,199,206,209,246,38,192,216,41,71,227,216,140,233,227,86,151,122,90,17,199,59,97,177,166,118,139,105,217,156,160,245,90,101,97,54,201,229,167,219,135,157,202,174,222,184,75,196,63,62,182,134,248,179,78,63,115,72,234,39,173,231,5,6,13,77,101,154,212,208,172,107,234,117,96,253,104,159,95,65,149,176,127,135,68,218,201,39,151,96,87,216,174,140,209,214,6,142,170,121,21,93,205,140,38,161,214,85,222,2,17,11,116,62,98,79,53,249,38,95,239,219,77,86,43,141,192,25,74,188,55,9,201,199,133,190,170,23,13,86,50,128,35,177,146,55,36,42,14,110,109,63,161,220,167,78,66,9,204,199,170,124,162,202,252,85,253,149,226,25,13,128,93,136,103,218,198,75,36,14,104,4,39,
181,16,52,72,65,64,170,233,64,23,181,244,109,204,83,187,209,68,116,155,170,82,33,110,144,11,56,252,33,28,48,155,85,5,139,220,52,170,180,118,143,140,12,206,202,68,181,90,43,98,197,6,77,224,42,107,131,43,185,34,6,197,214,100,132,141,54,24,32,142,113,9,198,94,166,184,139,118,6,119,176,70,240,22,137,89,164,241,142,201,77,18,233,168,85,231,91,97,70,113,42,250,38,26,141,184,208,131,146,67,121,204,148,57,246,65,101,154,141,241,187,20,36,180,102,6,60,197,141,9,231,248,138,48,168,237,100,179,28,250,196,38,69,30,20,79,232,97,191,175,164,220,241,69,1,32,231,247,71,92,133,242,204,230,12,201,17,192,8,116,185,111,13,129,236,198,109,1,42,89,119,132,92,122,228,116,178,151,237,176,28,35,136,217,163,179,205,72,247,247,91,203,194,210,176,94,27,111,35,110,247,225,135,22,142,165,135,150,84,152,79,12,193,11,187,59,20,206,164,33,160,15,22,213,123,40,7,78,175,37,74,243,76,247,174,11,232,139,209,99,100,32,176,239,60,75,
200,156,118,2,221,219,153,67,139,112,172,59,20,114,50,25,153,133,238,206,213,227,9,5,121,102,215,51,169,161,22,211,210,105,188,121,153,166,159,2,241,231,162,233,78,233,202,208,122,200,152,169,184,198,145,162,42,15,134,86,116,18,61,251,132,230,215,213,238,103,36,152,206,126,169,125,114,32,153,30,147,143,203,6,105,240,97,175,101,57,49,219,198,19,70,14,185,33,41,113,124,169,171,107,107,222,193,147,2,218,226,17,133,164,205,238,199,45,172,96,89,152,131,196,68,28,41,150,89,91,49,10,98,186,234,125,13,11,170,29,13,22,131,1,86,46,80,147,227,180,148,198,130,195,212,17,191,206,215,142,82,39,153,18,125,174,92,213,67,128,233,225,4,208,229,24,245,140,37,73,105,19,123,219,155,89,37,6,12,7,188,161,81,108,229,46,119,77,11,164,106,223,84,232,72,149,17,9,134,208,17,241,14,85,187,98,180,183,149,40,229,196,25,160,38,244,194,11,50,202,172,143,233,42,102,198,170,138,248,33,151,41,157,96,77,85,168,82,132,78,129,203,92,26,137,202,
222,25,88,18,72,229,122,136,89,50,83,149,74,141,114,240,156,143,55,81,25,194,142,140,25,207,33,8,237,237,71,12,255,8,51,34,29,64,136,49,120,193,170,99,171,247,121,147,227,204,248,138,11,151,43,161,65,34,128,172,247,243,51,9,180,223,68,233,55,147,232,132,201,32,16,14,196,184,9,199,26,119,135,178,71,154,138,45,88,82,44,82,89,145,22,219,226,219,156,165,35,197,24,55,224,176,183,169,209,236,20,23,168,28,243,241,44,112,143,49,136,227,109,183,163,9,223,2,37,52,51,172,42,49,139,71,209,34,28,200,205,66,153,202,56,4,38,242,57,27,81,184,213,121,166,171,148,193,108,42,163,76,140,179,6,71,214,107,248,117,7,220,103,180,86,201,13,22,154,77,40,183,181,53,218,159,119,67,148,234,71,95,17,185,221,125,237,237,237,104,123,237,35,114,136,96,112,202,232,206,220,188,214,252,143,223,52,54,95,92,172,174,195,30,90,190,105,184,118,3,186,174,249,69,195,163,198,250,167,141,255,87,125,245,58,122,221,147,231,77,117,143,27,155,95,60,
173,255,99,227,179,175,235,158,98,85,154,235,158,63,169,123,210,248,180,1,123,104,170,107,110,252,182,241,105,125,83,93,245,186,120,243,135,117,53,25,143,158,63,107,190,170,88,189,162,93,215,220,210,244,242,81,203,203,38,172,201,31,26,91,190,169,107,120,218,240,109,195,51,172,66,253,139,23,77,207,95,52,53,214,183,52,212,181,60,175,171,222,156,111,106,252,170,161,174,254,217,227,171,110,235,26,159,61,110,252,125,227,227,151,245,79,47,122,253,176,58,140,91,23,163,185,253,105,237,186,252,119,175,152,87,159,171,223,23,61,127,242,235,91,87,183,203,175,93,9,191,120,247,197,171,23,31,221,123,255,218,173,240,215,210,106,194,46,175,134,63,189,247,0,235,250,179,171,241,212,189,108,110,120,92,213,252,155,231,79,31,99,154,98,230,250,246,194,112,245,95,61,127,217,82,51,110,213,50,31,214,125,246,252,219,139,199,230,15,48,43,254,174,161,54,150,186,167,13,207,190,110,249,230,131,186,122,76,84,35,102,237,250,71,45,117,207,158,183,96,99,111,106,120,212,242,
244,143,23,242,191,250,227,43,109,106,150,169,214,126,254,12,123,139,25,15,179,204,133,6,223,214,99,66,95,85,123,217,92,255,117,67,117,114,94,60,109,104,170,205,98,35,102,110,204,210,223,214,55,253,177,106,246,167,141,143,106,138,54,215,189,215,240,225,215,31,94,168,211,140,77,204,163,150,231,77,205,239,95,26,185,102,221,154,165,239,255,144,165,27,155,49,165,223,110,232,175,158,63,127,250,46,51,215,154,221,48,238,111,158,212,97,230,109,248,160,102,173,170,47,181,212,55,98,106,94,152,228,121,211,31,127,134,106,152,144,107,154,213,126,241,224,55,213,155,253,95,94,104,83,123,126,167,130,88,227,27,250,213,60,186,90,250,211,21,121,86,255,109,195,155,138,96,190,132,173,172,75,77,46,126,120,151,42,213,230,223,81,165,90,248,211,53,121,130,153,245,77,77,254,14,43,187,212,163,250,248,46,45,170,77,111,106,129,21,188,90,8,87,171,182,234,249,79,126,182,122,141,207,126,247,166,118,88,140,122,222,116,169,94,237,249,157,19,246,236,119,55,212,171,85,254,
51,235,119,177,110,223,238,237,141,239,54,221,69,179,27,218,253,182,86,116,21,82,127,186,38,45,141,223,117,169,127,196,202,46,45,85,125,124,151,54,213,166,55,117,169,199,34,199,31,154,26,171,193,184,241,231,152,165,225,159,91,254,148,153,187,104,254,19,38,175,218,162,1,203,53,63,103,45,86,115,205,159,176,22,107,191,228,117,93,211,255,253,241,227,198,106,64,197,210,212,69,26,171,253,62,215,213,196,126,112,165,59,54,144,250,39,45,88,76,254,211,28,176,218,197,159,176,134,175,154,191,99,29,87,243,69,253,91,199,243,211,53,125,254,162,161,169,30,139,219,53,84,208,242,218,202,15,127,241,240,189,135,239,215,10,63,185,182,122,110,40,124,213,246,181,226,181,250,239,24,213,143,155,194,135,191,120,239,253,55,229,93,183,194,63,52,96,137,29,203,55,111,157,151,91,55,190,238,191,101,216,255,227,155,134,103,255,208,240,182,64,255,55,245,79,159,126,85,255,232,119,119,174,150,194,213,207,55,245,251,171,47,190,27,82,222,54,234,43,43,126,80,247,19,27,252,
245,235,209,191,86,246,234,55,223,46,176,225,165,102,117,151,207,152,71,252,1,171,249,202,93,235,254,80,223,92,215,84,123,172,129,19,204,103,154,62,196,146,81,83,21,159,52,125,253,178,138,237,174,160,229,243,166,198,175,27,159,93,98,183,106,139,15,48,148,129,169,247,24,67,48,13,87,149,158,53,252,225,205,181,240,78,3,127,214,82,223,212,242,183,152,111,86,221,231,147,183,196,223,223,63,111,124,252,106,132,175,198,138,77,198,171,150,175,222,190,247,254,213,184,107,239,46,148,105,192,106,212,95,173,221,106,193,163,151,77,77,181,17,85,241,72,117,105,52,253,40,69,255,246,217,227,159,165,230,101,187,183,40,137,189,121,139,138,53,124,249,3,186,252,166,249,74,149,119,45,184,239,3,105,152,82,23,2,110,190,127,215,58,170,251,71,12,190,213,53,62,185,166,38,54,207,24,180,109,252,253,15,26,237,191,254,238,103,217,236,162,217,143,51,89,21,65,87,189,186,249,154,251,87,147,11,166,32,198,49,48,84,221,116,89,244,221,0,253,78,181,255,115,3,166,51,
150,248,191,199,190,63,24,185,222,12,158,87,97,188,74,62,222,136,96,215,135,142,117,253,198,180,92,67,66,239,234,240,215,119,235,26,111,190,122,215,92,94,133,195,87,41,183,182,10,94,17,186,186,250,75,202,248,164,177,161,74,128,30,55,252,243,15,217,234,42,168,63,252,252,225,23,255,95,25,237,186,14,255,51,173,247,89,213,145,176,96,137,77,210,123,151,21,126,89,107,253,254,15,174,216,103,88,80,189,116,170,15,190,155,58,95,23,213,200,75,181,228,42,253,95,60,213,128,211,195,15,170,171,250,225,7,141,87,165,85,56,120,227,253,91,36,223,148,243,223,235,159,190,108,248,137,171,241,66,247,215,171,241,45,9,234,154,113,111,218,245,149,97,235,126,56,177,189,61,245,191,145,245,111,204,252,221,11,14,245,179,187,184,96,141,55,9,227,27,29,212,248,226,171,214,15,255,195,63,253,253,203,167,79,95,119,244,26,165,221,0,104,55,140,240,228,198,11,76,196,103,45,143,171,149,223,123,255,13,57,23,200,250,38,168,190,105,78,12,78,223,16,84,171,250,143,
24,108,190,46,235,29,84,253,166,164,26,79,191,46,235,73,253,211,230,134,183,10,121,215,228,94,210,159,235,66,174,189,189,245,150,105,121,77,103,110,48,153,27,82,91,110,188,120,187,193,127,208,80,151,212,227,221,98,254,156,62,120,241,7,34,254,36,23,121,5,224,191,43,166,182,98,235,30,215,183,212,215,61,252,15,117,213,178,87,217,240,98,97,98,185,248,21,226,186,8,231,55,130,248,139,231,205,141,215,160,254,59,35,20,70,120,30,190,247,255,179,200,132,233,252,189,97,233,95,195,203,191,134,151,127,13,47,63,55,188,96,171,235,173,177,165,134,191,171,140,239,73,237,0,225,71,128,233,191,185,160,92,127,143,173,166,239,35,45,63,113,211,230,2,45,95,147,253,6,244,251,177,24,184,70,15,46,153,215,197,129,6,70,17,155,159,99,28,248,55,53,198,216,84,35,182,207,158,95,22,127,128,49,138,11,1,13,223,190,104,249,227,165,142,63,100,133,191,195,192,244,101,124,173,123,244,77,125,211,195,95,190,61,214,189,125,53,84,207,47,158,253,172,88,119,189,
6,214,237,53,15,248,229,187,226,220,251,175,119,15,26,46,56,192,21,117,126,109,161,215,249,229,26,14,174,73,169,158,34,61,107,248,186,190,74,15,235,126,95,243,46,140,59,86,79,65,26,159,213,132,212,124,166,238,179,134,250,166,71,223,84,13,251,180,241,25,246,252,99,236,247,89,109,182,177,41,248,49,134,124,71,108,186,176,228,43,73,255,171,77,250,155,235,110,246,166,233,62,196,172,113,205,72,213,173,149,203,77,140,11,207,171,210,218,198,139,51,163,43,23,188,56,90,121,94,245,210,63,52,54,55,188,42,175,133,219,31,220,123,121,94,165,36,175,50,243,13,226,222,244,184,161,9,75,210,63,113,75,230,249,15,240,132,239,11,134,223,233,254,203,186,218,215,59,194,226,243,27,239,94,239,252,60,191,218,248,185,240,179,154,136,215,199,78,205,216,82,197,66,217,239,27,155,170,187,3,117,223,54,180,124,243,252,98,131,180,38,175,122,40,250,198,17,231,15,50,59,76,246,255,104,124,220,242,205,37,249,253,164,238,109,131,250,242,59,127,220,234,13,10,251,74,
204,247,218,239,93,185,242,15,111,49,196,149,239,52,191,168,127,84,117,12,12,43,254,254,114,51,248,5,102,139,150,234,88,95,111,3,60,250,97,132,136,5,219,107,131,253,30,154,255,61,84,187,22,178,191,51,214,159,16,176,47,34,10,182,48,170,59,149,175,4,253,144,234,181,109,161,42,236,124,175,134,83,127,238,36,93,137,249,222,57,122,39,40,250,234,70,250,173,174,220,107,72,254,98,155,170,58,39,223,62,127,140,45,233,234,38,108,109,159,237,233,211,231,127,184,56,46,169,238,121,93,236,175,94,79,88,239,97,118,168,30,87,95,52,197,154,213,125,245,178,165,165,186,151,248,251,203,99,137,106,181,247,63,188,190,61,246,174,29,225,90,167,245,143,30,53,188,104,121,189,147,251,99,54,204,254,143,151,205,151,217,253,79,178,239,149,152,255,25,246,189,146,125,105,223,198,39,175,115,255,171,232,240,249,47,235,30,254,159,181,12,134,61,253,111,95,212,194,123,253,163,150,134,166,230,15,46,78,232,171,54,121,81,223,212,114,121,232,243,180,122,194,214,252,18,203,
99,175,106,86,77,122,237,108,168,249,173,123,142,151,95,119,63,125,181,100,94,157,244,55,61,127,137,173,204,134,230,47,46,234,93,27,247,117,219,255,246,121,61,134,38,110,204,194,47,222,189,175,116,149,39,47,73,218,245,211,139,187,15,255,234,162,240,29,252,236,138,244,253,245,37,93,195,122,251,236,143,205,152,67,253,230,217,147,231,239,202,15,239,76,189,85,181,191,59,183,63,197,71,238,214,194,250,207,167,100,63,14,113,95,227,46,63,165,135,31,7,12,94,212,183,96,126,242,172,249,45,93,124,89,181,220,151,239,246,112,76,177,230,27,78,254,6,171,186,113,48,117,247,203,87,103,82,119,95,53,250,171,239,235,234,207,103,205,15,234,46,29,231,175,175,171,95,141,64,191,121,147,240,254,205,223,255,183,223,254,246,77,58,115,195,205,46,92,226,245,207,239,152,181,218,109,162,90,165,239,176,225,27,205,223,123,255,253,27,199,99,79,94,62,123,84,59,73,120,138,121,103,243,117,80,86,115,181,11,168,246,138,0,213,16,218,181,58,85,95,249,240,122,193,171,233,
189,10,43,175,66,120,77,198,183,245,205,191,195,96,72,67,245,111,122,182,92,156,183,53,55,124,139,165,223,167,152,6,23,119,119,30,254,197,195,95,126,248,232,197,139,79,177,175,111,30,254,197,251,53,30,114,179,75,76,122,227,37,200,251,224,242,242,214,53,224,88,187,81,244,58,8,213,6,240,240,47,176,130,250,175,176,80,255,240,47,234,30,213,142,225,223,195,194,253,147,151,79,47,47,133,93,94,199,185,188,52,132,217,227,253,27,195,122,53,119,175,160,127,115,13,52,96,33,174,185,241,235,103,181,51,194,218,189,164,155,215,187,170,145,175,185,238,189,39,181,195,196,170,179,85,195,103,3,6,187,46,34,101,53,72,223,232,31,19,123,179,223,107,179,122,173,231,87,184,229,226,85,21,113,52,52,61,193,112,206,219,18,85,21,18,254,199,63,94,146,207,155,33,243,167,195,219,11,65,127,214,32,246,14,236,90,117,141,154,249,222,61,166,191,253,231,150,63,203,144,48,57,255,171,70,244,234,138,71,243,27,9,241,139,255,23,174,109,17,45,
topic "FileList";
[2 $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9;*@(64)2 $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,2#27521748481378242620020725143825:desc]
[a83;*R6 $$3,0#31310162474203024125188417583966:caption]
[l288;i1121;b17;O9;~~~.1408;2 $$4,0#10431211400427159095818037425705:param]
[i448;a25;kKO9;*@(64)2 $$5,0#37138531426314131252341829483370:item]
[*+117 $$6,6#14700283458701402223321329925657:header]
[{_}%EN-US
[s1;K:`:`:FileList`:`:class:%- [@(0.0.255) class]_[@0 FileList]_:_[@(0.0.255) public]_[^`:`:ColumnList^ C
olumnList]&]
[s2; &]
[s2;
@@image:2240&1320
<EFBFBD>Ε<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>èèèèǘ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ń<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>访<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>τ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Х<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Θ<EFBFBD>窿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鱿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Φǹ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>屿<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Х<EFBFBD><EFBFBD>Λ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>М<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>绿<EFBFBD>ё<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
岿<EFBFBD><EFBFBD><EFBFBD>嫿<EFBFBD><EFBFBD><EFBFBD>ě<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>Κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>宿
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>岿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
嵿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>р<EFBFBD><EFBFBD><EFBFBD><EFBFBD>η<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ê<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>忿<EFBFBD>п<EFBFBD><EFBFBD>ЖЖ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>潿<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
便<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>х
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>岿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ě<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>妿ν<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD>屿亿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>鱿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>Ц<EFBFBD><EFBFBD>Ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>θ
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>μВ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>岿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Φщ<EFBFBD>Ь<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ё
忿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ω<EFBFBD>
<EFBFBD><EFBFBD>ы<EFBFBD>γ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ε<EFBFBD><EFBFBD>
<EFBFBD>Υ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>
<EFBFBD>嫿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɑ<EFBFBD>О
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ф<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>Ν<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
ň<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>Ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>访<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ё<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ń<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ю<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>岿毿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ц<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ι<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>Х<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
浿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǖ<EFBFBD><EFBFBD>Β
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>э<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>鱿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鷿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>线<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>Ω<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>
&]
[s2; &]
[s2; This class is the ColumnList specialization for displaying lists
of files or similar items. List consists of File structures with
elements appropriate to describe and display individual files.&]
[s0; &]
[s1;l288;K:`:`:FileList`:`:File`:`:struct:%- [@(0.0.255) struct]_[@0 FileList`::File]&]
[s2;l480; Structure used to hold information about the item. Some
items, like file length, are in fact not directly used by FileList
and are only provided to make FileList usage simpler for its
primary applications (e.g. file selectors).&]
[s0;l288; &]
[s5;l288;K:`:`:FileList`:`:File`:`:isdir:%- [@(0.0.255) bool]_[@0 isdir]&]
[s2;l480; If true, item contains directory.&]
[s0;l288; &]
[s5;l288;K:`:`:FileList`:`:File`:`:icon:%- [^`:`:Image^ Image]_[@0 icon]&]
[s2;l480; File icon.&]
[s0;l288; &]
[s5;l288;K:`:`:FileList`:`:File`:`:name:%- [^`:`:String^ String]_[@0 name]&]
[s2;l480; Filename.&]
[s0;l288; &]
[s5;l288;K:`:`:FileList`:`:File`:`:font:%- [^`:`:Font^ Font]_[@0 font]&]
[s2;l480; Font used to display the filename.&]
[s0;l288; &]
[s5;l288;K:`:`:FileList`:`:File`:`:ink:%- [^`:`:Color^ Color]_[@0 ink]&]
[s2;l480; Color used to display the filename.&]
[s0;l288; &]
[s5;l288;K:`:`:FileList`:`:File`:`:length:%- [@(0.0.255) int]_[@0 length]&]
[s2;l480; Length of file.&]
[s0;l288; &]
[s5;l288;K:`:`:FileList`:`:File`:`:time:%- [^`:`:Time^ Time]_[@0 time]&]
[s2;l480; Last write time.&]
[s0;l288; &]
[s5;l288;K:`:`:FileList`:`:File`:`:extink:%- [^`:`:Color^ Color]_[@0 extink]&]
[s2;l480; Color used to display the file extension.&]
[s0;l288; &]
[s5;l288;K:`:`:FileList`:`:File`:`:desc:%- [^`:`:String^ String]_[@0 desc]&]
[s2;l480; Additional description of file, displayed after the filename.&]
[s0;l288; &]
[s5;l288;K:`:`:FileList`:`:File`:`:descfont:%- [^`:`:Font^ Font]_[@0 descfont]&]
[s2;l480; Font used for additional description.&]
[s0;l288; &]
[s5;l288;K:`:`:FileList`:`:File`:`:operator const`:`:String`&`(`)const:%- operator_[@(0.0.255) c
onst]_[^`:`:String^ String]`&()_[@(0.0.255) const]&]
[s2;l480; Returns name.&]
[s0;l288; &]
[s0; &]
[s0; &]
[s5;K:`:`:FileList`:`:WhenRename:%- [^`:`:Callback2^ Callback2]<[@(0.0.255) const]_String
`&, [@(0.0.255) const]_String`&>_[@0 WhenRename]&]
[s2; This callback is called when filename was renamed by user. First
argument is the original filename, second one is the new filename.&]
[s0; &]
[s5;K:`:`:FileList`:`:StartEdit`(`):%- [@(0.0.255) void]_[@0 StartEdit]()&]
[s2; Starts the editation of the current item for rename.&]
[s0; &]
[s5;K:`:`:FileList`:`:EndEdit`(`):%- [@(0.0.255) void]_[@0 EndEdit]()&]
[s2; Ends the editation of item.&]
[s0; &]
[s5;K:`:`:FileList`:`:IsEdit`(`)const:%- [@(0.0.255) bool]_[@0 IsEdit]()_[@(0.0.255) const]&]
[s2; True if editation is active.&]
[s0; &]
[s5;K:`:`:FileList`:`:OkEdit`(`):%- [@(0.0.255) void]_[@0 OkEdit]()&]
[s2; Ends the editation and calls WhenRename to actually rename the
filename.&]
[s0; &]
[s5;K:`:`:FileList`:`:Get`(int`)const:%- [@(0.0.255) const]_[^`:`:FileList`:`:File^ File]`&
_[@0 Get]([@(0.0.255) int]_[@3 i])_[@(0.0.255) const]&]
[s2; Returns the file item structure at specified index.&]
[s0; &]
[s5;K:`:`:FileList`:`:operator`[`]`(int`)const:%- [@(0.0.255) const]_[^`:`:FileList`:`:File^ F
ile]`&_[@0 operator`[`]]([@(0.0.255) int]_[@3 i])_[@(0.0.255) const]&]
[s2; Same as Get([%-*@3 i]).&]
[s0; &]
[s5;K:`:`:FileList`:`:Insert`(int`,const`:`:String`&`,const`:`:Image`&`,`:`:Font`,`:`:Color`,bool`,int`,`:`:Time`,`:`:Color`,const`:`:String`&`,`:`:Font`,`:`:Value`):%- [@(0.0.255) v
oid]_[@0 Insert]([@(0.0.255) int]_[@3 ii], [@(0.0.255) const]_[^`:`:String^ String]`&_[@3 nam
e], [@(0.0.255) const]_[^`:`:Image^ Image]`&_[@3 icon]_`=_Null, [^`:`:Font^ Font]_[@3 font]_
`=_StdFont(), [^`:`:Color^ Color]_[@3 ink]_`=_SColorText(), [@(0.0.255) bool]_[@3 isdir]_
`=_false, [@(0.0.255) int]_[@3 length]_`=_[@3 0], [^`:`:Time^ Time]_[@3 time]_`=_Null,
[^`:`:Color^ Color]_[@3 extink]_`=_Null, [@(0.0.255) const]_[^`:`:String^ String]`&_[@3 des
c]_`=_Null, [^`:`:Font^ Font]_[@3 descfont]_`=_Null, Value data `=
Null)&]
[s2; Inserts a new file item at specified position.&]
[s0; &]
[s5;K:`:`:FileList`:`:Add`(const`:`:String`&`,const`:`:Image`&`,`:`:Font`,`:`:Color`,bool`,int`,`:`:Time`,`:`:Color`,const`:`:String`&`,`:`:Font`,`:`:Value`):%- [@(0.0.255) v
oid]_[@0 Add]([@(0.0.255) const]_[^`:`:String^ String]`&_[@3 name], [@(0.0.255) const]_[^`:`:Image^ I
mage]`&_[@3 icon]_`=_Null, [^`:`:Font^ Font]_[@3 font]_`=_StdFont(),
[^`:`:Color^ Color]_[@3 ink]_`=_SColorText(), [@(0.0.255) bool]_[@3 isdir]_`=_false,
[@(0.0.255) int]_[@3 length]_`=_[@3 0], [^`:`:Time^ Time]_[@3 time]_`=_Null,
[^`:`:Color^ Color]_[@3 extink]_`=_Null, [@(0.0.255) const]_[^`:`:String^ String]`&_[@3 des
c]_`=_Null, [^`:`:Font^ Font]_[@3 descfont]_`=_Null, Value data `=
Null)&]
[s2; Adds a new file item at the end of list.&]
[s0; &]
[s5;K:`:`:FileList`:`:GetCurrentName`(`)const:%- [^`:`:String^ String]_[@0 GetCurrentName
]()_[@(0.0.255) const]&]
[s2; Returns the filename of item with cursor. If there is no cursor,
returns empty String.&]
[s0; &]
[s5;K:`:`:FileList`:`:Find`(const char`*`):%- [@(0.0.255) int]_[@0 Find]([@(0.0.255) const]_
[@(0.0.255) char]_`*[@3 name])&]
[s2; The index of the item with specified [%-*@3 name] or negative
value if not in the list. Search is linear.&]
[s0; &]
[s5;K:`:`:FileList`:`:FindSetCursor`(const char`*`):%- [@(0.0.255) bool]_[@0 FindSetCurso
r]([@(0.0.255) const]_[@(0.0.255) char]_`*[@3 name])&]
[s2; If item with [%-*@3 name].is in the list, sets the cursor to it
and returns true, otherwise returns false.&]
[s0; &]
[s5;K:`:`:FileList`:`:Sort`(const`:`:FileList`:`:Order`&`):%- [@(0.0.255) void]_[@0 Sort](
[@(0.0.255) const]_[^`:`:FileList`:`:Order^ Order]`&_[@3 order])&]
[s2; Sorts the list. Order contains single virtual method for ordering
File structures.&]
[s0; &]
[s5;K:`:`:FileList`:`:IconWidth`(int`):%- [^`:`:FileList^ FileList]`&_[@0 IconWidth]([@(0.0.255) i
nt]_[@3 w])&]
[s2; Sets the space reserved for painting the file icon.&]
[s0; &]
[s5;K:`:`:FileList`:`:GetIconWidth`(`)const:%- [@(0.0.255) int]_[@0 GetIconWidth]()_[@(0.0.255) c
onst]&]
[s2; Returns the value set by IconWidth.&]
[s0; &]
[s5;K:`:`:FileList`:`:Renaming`(bool`):%- [^`:`:FileList^ FileList]`&_[@0 Renaming]([@(0.0.255) b
ool]_[@3 b]_`=_true)&]
[s2; In renaming mode, user is allowed to edit the name of item (by
holding mouse button over the item). WhenRename callback is called
when user accepts the new name.&]
[s0; &]
[s5;K:`:`:FileList`:`:JustName`(bool`):%- [^`:`:FileList^ FileList]`&_[@0 JustName]([@(0.0.255) b
ool]_[@3 b]_`=_true)&]
[s2; In JustName mode, if filename contains [* `\] or [* /] characters,
only the part after last such character is displayed as filename.&]
[s0; &]
[s0; &]
[s3;%- FileList routines&]
[s0;@(0.0.255) &]
[s5;K:`:`:Load`(`:`:FileList`&`,const`:`:String`&`,const char`*`,bool`,`:`:Callback3`<bool`,const`:`:String`&`,`:`:Image`&`>`,`:`:FileSystemInfo`&`):%- [@(0.0.255) b
ool]_[@0 Load]([^`:`:FileList^ FileList]`&_[@3 list], [@(0.0.255) const]_[^`:`:String^ Stri
ng]`&_[@3 dir], [@(0.0.255) const]_[@(0.0.255) char]_`*[@3 patterns],
[^bool^ bool]_[@3 dirs]_`=_false, [^`:`:Callback3^ Callback3]<[^bool^ bool],
[@(0.0.255) const]_[^`:`:String^ String]`&, Image`&>_[@3 WhenIcon]_`=_CNULL,
[^`:`:FileSystemInfo^ FileSystemInfo]`&_[@3 filesystem]_`=_StdFileSystemInfo())&]
[s2; This function loads [%-*@3 list] with file items in [%-*@3 dir].
[%-*@3 patterns] contain allowed file masks separated by semicolon
(e.g. `"`*.cpp;`*.h`"). If [%-*@3 dirs] is false, files in the
list are displayed with `"disabled`" color (useful for directory
selection). [%-*@3 WhenIcon] specifies icon assignment for individual
filenames (first bool paremeter is true for directories). [%-*@3 filesystem]
specifies the file system interface.&]
[s0; &]
[s5;K:`:`:SortByName`(`:`:FileList`&`):%- [@(0.0.255) void]_[@0 SortByName]([^`:`:FileList^ F
ileList]`&_[@3 list])&]
[s2; Sorts the list by names.&]
[s0; &]
[s5;K:`:`:SortByExt`(`:`:FileList`&`):%- [@(0.0.255) void]_[@0 SortByExt]([^`:`:FileList^ F
ileList]`&_[@3 list])&]
[s2; Sorts the list by extensions.&]
[s0; &]
[s0; ]

View file

@ -1,4 +1,5 @@
topic "FileSel";[2 $$0,0#00000000000000000000000000000000:Default]
topic "FileSel";
[2 $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9;*@(64)2 $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,2#27521748481378242620020725143825:desc]
[a83;*R6 $$3,0#31310162474203024125188417583966:caption]

View file

@ -329,18 +329,6 @@ void RichQtfParser::Error(const char *s) {
throw Exc();
}
dword scanX(const char *s)
{
dword r = 0;
for(int i = 0; i < 8; i++) {
r = (r << 4) | (*s >= '0' && *s <= '9' ? *s - '0' :
*s >= 'A' && *s <= 'F' ? *s - 'A' :
*s >= 'a' && *s <= 'f' ? *s - 'a' : 0);
s++;
}
return r;
}
void RichQtfParser::FlushStyles()
{
for(int i = 0; i < styleid.GetCount(); i++)
@ -852,10 +840,7 @@ void RichQtfParser::Parse(const char *qtf, byte _accesskey)
xu.Cat(*term++);
if(xu.GetLength() != 32)
Error("Invalid UUID !");
id.a = scanX(~xu);
id.b = scanX(~xu + 8);
id.c = scanX(~xu + 16);
id.d = scanX(~xu + 24);
id = ScanUuid(xu);
}
else
if(i)

View file

@ -124,9 +124,6 @@ protected:
void Put(int i, const RichPara& p, const RichStyle& s);
void Put(int i, const RichPara& p, const RichStyles& s);
int GetPartLength(int pi) const;
int FindPart(int& pos) const;
int GetPartPos(int pi) const;
void Sync0(const Para& pp, int parti, const RichContext& rc) const;
inline void Sync(int parti, const RichContext& rc) const {
@ -188,15 +185,19 @@ protected:
public:
enum ValPosType { LABELS, INDEXENTRIES };
int GetPartCount() const { return part.GetCount(); }
bool IsPara(int i) const { return part[i].Is<Para>(); }
bool IsTable(int i) const;
int GetPartLength(int pi) const;
int FindPart(int& pos) const;
int GetPartPos(int pi) const;
RichPara Get(int i, const RichStyles& s) const;
RichPara Get(int i, const Uuid& styleid, const RichStyles& s) const;
RichPara Get(int i, const RichStyle& style) const;
Uuid GetParaStyle(int i) const { return part[i].Get<Para>().styleid; }
void SetParaStyle(int i, const Uuid& si);
int GetPartCount() const { return part.GetCount(); }
bool IsPara(int i) const { return part[i].Is<Para>(); }
bool IsTable(int i) const;
const RichTable& GetTable(int i) const;
int GetLength() const;
@ -216,6 +217,8 @@ public:
void Insert(int parai, const RichPara& p, const RichStyles& s);
void Cat(const RichPara& p, const RichStyles& s) { Set(GetPartCount(), p, s); }
void RemovePart(int parti);
void Normalize();
Vector<int> GetAllLanguages() const;

View file

@ -143,6 +143,12 @@ void RichTxt::Insert(int i, const RichPara& p, const RichStyles& s)
Set(i, p, s);
}
void RichTxt::RemovePart(int parti)
{
part.Remove(parti);
Invalidate();
}
void RichTxt::SetPick(int i, pick_ RichTable& p)
{
const_cast<RichTable&>(p).Normalize();

View file

@ -3,7 +3,7 @@
#define LTIMING(x) // RTIMING(x)
#define LLOG(x)
static const char s_dbver[] = "Assist++ 1.1";
static const char s_dbver[] = "Assist++ 2.0";
CppBase& BrowserBase()
{

View file

@ -51,7 +51,7 @@ enum {
ITEM_TNAME,
ITEM_NUMBER,
ITEM_SIGN,
ITEM_RET,
ITEM_UPP,
ITEM_TYPE,
ITEM_PTYPE = ITEM_TYPE + 10000,
};
@ -63,7 +63,8 @@ struct ItemTextPart : Moveable<ItemTextPart> {
int ii;
};
Vector<ItemTextPart> ParseItemNatural(const CppItemInfo& m, const char *natural);
Vector<ItemTextPart> ParseItemNatural(const String& name, const CppSimpleItem& m, const char *natural);
Vector<ItemTextPart> ParseItemNatural(const CppItemInfo& m);
Vector<ItemTextPart> ParseItemNatural(const CppItemInfo& m);
bool SplitNestKey(const String& s, String& nest, String& key);
@ -353,12 +354,14 @@ protected:
void Tools(Bar& bar);
void Label(String&);
void CreateQtf(const String& item, const CppItemInfo& m, String& p1, String& p2);
void CreateQtf(const String& item, const String& name, const CppSimpleItem& m, String& p1, String& p2);
void InsertItem();
void FindBrokenRef();
void JumpToDefinition();
void FixTopic();
public:
Callback1<Bar&> WhenTemplatesMenu;

View file

@ -11,6 +11,7 @@ file
Browser readonly separator,
Lay.cpp,
Base.cpp optimize_speed,
Item.cpp,
ItemList.cpp,
Query.cpp,
Browser.cpp,

View file

@ -1,5 +1,18 @@
#include "Browser.h"
#define CODEITEM "37138531426314131252341829483370"
#define STRUCTITEM "37138531426314131252341829483380"
static const char styles[] =
"[ $$0,0#00000000000000000000000000000000:Default]"
"[i448;a25;kKO9;2 $$1,0#" CODEITEM ":codeitem]"
"[i448;a25;kKO9;3 $$2,0#" STRUCTITEM ":structitem]"
"[l288;2 $$3,0#27521748481378242620020725143825:desc]"
"[H6;0 $$4,0#05600065144404261032431302351956:begin]"
"[l288;a25;kK~~~.1408;@3;2 $$5,0#61217621437177404841962893300719:param]"
"[0 $$7,0#96390100711032703541132217272105:end]"
;
void TopicEditor::JumpToDefinition()
{
PostCallback(callback1(IdeGotoLink, editor.GetFormatInfo().label));
@ -19,46 +32,42 @@ void TopicEditor::Label(String& label)
label = ref.Get();
}
struct FindBrokenRefIterator : RichText::Iterator {
int cursor;
virtual bool operator()(int pos, const RichPara& para)
{
if(pos >= cursor && para.format.label[0] == ':' && para.format.label[1] == ':') {
String nest;
String key;
if(para.GetLength() && SplitNestKey(para.format.label, nest, key)) {
int q = BrowserBase().Find(nest);
if(q >= 0 && BrowserBase()[q].key.Find(key) >= 0)
return false;
}
cursor = pos;
return true;
}
return false;
}
};
void TopicEditor::FindBrokenRef()
{
Progress pi;
pi.SetTotal(topic.GetCount());
Uuid codeitem = ScanUuid(CODEITEM);
Uuid stritem = ScanUuid(STRUCTITEM);
for(;;) {
if(IsNull(topicpath))
return;
pi.SetText(GetFileTitle(topicpath));
pi.SetPos(topic.GetCursor());
FindBrokenRefIterator fi;
fi.cursor = editor.GetCursor();
if(editor.Get().Iterate(fi)) {
editor.Move(fi.cursor);
break;
const RichText& txt = editor.Get();
int c = editor.GetCursor();
int i = txt.FindPart(c);
while(++i < txt.GetPartCount()) {
if(txt.IsPara(i)) {
Uuid style = txt.GetParaStyle(i);
if(style == codeitem || style == stritem) {
RichPara para = txt.Get(i);
if(para.format.label == "noref")
continue;
if(!IsNull(para.format.label)) {
String nest;
String key;
if(SplitNestKey(para.format.label, nest, key)) {
int q = BrowserBase().Find(nest);
if(q >= 0 || BrowserBase()[q].key.Find(key) >= 0)
continue;
}
}
editor.Move(txt.GetPartPos(i));
return;
}
}
}
if(!topic.IsCursor())
break;
int c = topic.GetCursor() + 1;
c = topic.GetCursor() + 1;
if(c >= topic.GetCount()) {
PromptOK("No more broken references.");
PromptOK("No more invalid references.");
break;
}
topic.SetCursor(c);
@ -140,10 +149,10 @@ static int sSplitT(int c) {
return c == ';' || c == '<' || c == '>' || c == ',';
}
String DecoratedItem(const CppItemInfo& m, const char *natural)
String DecoratedItem(const String& name, const CppSimpleItem& m, const char *natural)
{
String qtf = "[%00-00K ";
Vector<ItemTextPart> n = ParseItemNatural(m, natural);
Vector<ItemTextPart> n = ParseItemNatural(name, m, natural);
if(m.virt)
qtf << "[@B virtual] ";
if(m.kind == CLASSFUNCTION || m.kind == CLASSFUNCTIONTEMPLATE)
@ -165,6 +174,9 @@ String DecoratedItem(const CppItemInfo& m, const char *natural)
case ITEM_NAME:
qtf << "*";
break;
case ITEM_UPP:
qtf << "@c";
break;
case ITEM_CPP_TYPE:
case ITEM_CPP:
qtf << "@B";
@ -185,24 +197,16 @@ String DecoratedItem(const CppItemInfo& m, const char *natural)
return qtf + "]";
}
static const char styles[] =
"[ $$0,0#00000000000000000000000000000000:Default]"
"[i448;a25;kKO9;2 $$1,0#37138531426314131252341829483370:item]"
"[i448;a25;kKO9;3 $$2,0#37138531426314131252341829483380:class]"
"[l288;2 $$3,0#27521748481378242620020725143825:desc]"
"[H6;0 $$4,0#05600065144404261032431302351956:begin]"
"[l288;a25;kK~~~.1408;@3;2 $$5,0#61217621437177404841962893300719:param]"
"[0 $$7,0#96390100711032703541132217272105:end]"
;
void TopicEditor::CreateQtf(const String& item, const CppItemInfo& m, String& p1, String& p2)
void TopicEditor::CreateQtf(const String& item, const String& name, const CppSimpleItem& m,
String& p1, String& p2)
{
String qtf;
bool str = m.kind == STRUCT || m.kind == STRUCTTEMPLATE;
if(!str)
qtf << "[s4 &]";
qtf << (str ? "[s2;:" : "[s1;:") << DeQtf(item) << ": ";
if(m.IsTemplate()) {
String st = str ? "[s2;" : "[s1;";
String k = st + ':' + DeQtf(item) + ": ";
if(m.IsTemplate() && str) {
int q = 0;
int w = 0;
while(q < m.natural.GetLength()) {
@ -217,15 +221,15 @@ void TopicEditor::CreateQtf(const String& item, const CppItemInfo& m, String& p1
}
q++;
}
qtf << DecoratedItem(m, m.natural.Mid(0, q));
qtf << "[s2:noref: " << DecoratedItem(name, m, m.natural.Mid(0, q)) << "&][s2 " << k;
if(q < m.natural.GetLength()) {
while((byte)m.natural[q] <= 32)
q++;
qtf << '&' << DecoratedItem(m, m.natural.Mid(q));
qtf << DecoratedItem(name, m, m.natural.Mid(q));
}
}
else
qtf << DecoratedItem(m, m.natural);
qtf << k << DecoratedItem(name, m, m.natural);
qtf << "&]";
p1 = qtf;
@ -283,14 +287,17 @@ void TopicEditor::InsertItem()
for(int i = 0; i < ref.browser.item.GetCount(); i++)
if(ref.browser.item.IsSelected(i)) {
String a1, a2;
CreateQtf(ref.browser.GetItem(i), ref.browser.GetItemInfo(i), a1, a2);
const CppItemInfo& m = ref.browser.GetItemInfo(i);
CreateQtf(ref.browser.GetItem(i), m.name, m, a1, a2);
p1 << p2 << a1;
p2 = a2;
}
}
else
if(ref.browser.item.IsCursor())
CreateQtf(ref.browser.GetItem(), ref.browser.GetItemInfo(), p1, p2);
if(ref.browser.item.IsCursor()) {
const CppItemInfo& m = ref.browser.GetItemInfo();
CreateQtf(ref.browser.GetItem(), m.name, m, p1, p2);
}
else
return;
editor.BeginOp();
@ -302,6 +309,66 @@ void TopicEditor::InsertItem()
editor.Move(c);
}
void TopicEditor::FixTopic()
{
String nest;
if(!EditText(nest, "Fix topic", "Nest"))
return;
if(nest[0] != ':')
nest = "::" + nest;
CppBase& base = BrowserBase();
int q = base.Find(nest);
if(q < 0) {
Exclamation("Nest not found");
return;
}
CppNest& n = base[q];
Index<String> natural;
Vector<String> link;
for(int i = 0; i < n.GetCount(); i++) {
const CppItem& m = n[i];
natural.Add(m.natural);
link.Add(nest + "::" + n.key[i]);
}
RichText result;
const RichText& txt = editor.Get();
bool started = false;
for(int i = 0; i < txt.GetPartCount(); i++)
if(txt.IsPara(i)) {
RichPara p = txt.Get(i);
WString h = p.GetText();
String nat;
for(const wchar *s = h; *s; s++)
if((byte )*s < 128 || *s == 160)
nat.Cat(*s == 160 ? ' ' : *s);
int q = natural.Find(nat);
if(q >= 0) {
started = true;
const CppSimpleItem& m = n[q];
String p1, p2;
CreateQtf(link[q], n.name[q], m, p1, p2);
p1 = "[s7; &]" + p1;
RichText h = ParseQTF(styles + p1);
if(h.GetPartCount())
h.RemovePart(h.GetPartCount() - 1);
result.CatPick(h);
}
else
if(!started || p.GetLength())
result.Cat(p);
}
else {
RichTable b;
b <<= txt.GetTable(i);
result.CatPick(b);
}
RichPara empty;
result.Cat(empty);
editor.BeginOp();
editor.SetSelection(0, txt.GetLength());
editor.PasteText(result);
}
String TopicEditor::GetFileName() const
{
return grouppath;

127
uppsrc/ide/Browser/Item.cpp Normal file
View file

@ -0,0 +1,127 @@
#include "Browser.h"
bool IsCppKeyword(const String& id)
{
static Index<String> kw;
if(kw.GetCount() == 0) {
const char **cppk = CppKeyword();
for(int i = 0; cppk[i]; i++)
kw.Add(cppk[i]);
}
return kw.Find(id) >= 0;
}
bool IsCppType(const String& id)
{
static const char *t[] = {
"int", "long", "short", "void", "float", "double", "char", "signed", "unsigned", "bool",
"const", "mutable", "struct", "class", "union"
};
static Index<String> kt;
if(kt.GetCount() == 0) {
for(int i = 0; i < __countof(t); i++)
kt.Add(t[i]);
}
return kt.Find(id) >= 0;
}
int InScListIndext(const char *s, const char *list)
{
int ii = 0;
for(;;) {
const char *q = s;
while(*list == ' ') list++;
for(;;) {
if(*q == '\0' && *list == '\0') return ii;
if(*q != *list) {
if(*q == '\0' && (*list == '<' || *list == ';' || *list == ',' || *list == '>'))
return ii;
if(*list == '\0') return -1;
break;
}
q++;
list++;
}
while(*list && *list != ';' && *list != '<' && *list != '>' && *list != ',') list++;
if(*list == '\0') return -1;
list++;
ii++;
}
}
static String s_pick_("pick_");
Vector<ItemTextPart> ParseItemNatural(const String& name, const CppSimpleItem& m, const char *s)
{
Vector<ItemTextPart> part;
bool param = false;
while(*s) {
ItemTextPart& p = part.Add();
p.pos = (int)(s - ~m.natural);
p.type = ITEM_TEXT;
int n = 1;
if(*s >= '0' && *s <= '9') {
while(s[n] >= '0' && s[n] <= '9')
n++;
p.type = ITEM_NUMBER;
}
else
if(iscid(*s) || *s == ':') {
if(strncmp(s, name, name.GetLength()) == 0 && !iscid(s[name.GetLength()])) {
p.type = ITEM_NAME;
n = name.GetLength();
param = true;
}
else {
String id;
n = 0;
while(IsAlNum(s[n]) || s[n] == '_' || s[n] == ':')
id.Cat(s[n++]);
if(IsCppType(id))
p.type = ITEM_CPP_TYPE;
else
if(IsCppKeyword(id))
p.type = ITEM_CPP;
else
if(InScList(id, m.pname))
p.type = ITEM_PNAME;
else
if(id == s_pick_) {
p.type = ITEM_UPP;
}
else
if(InScList(id, m.tname) || InScList(id, m.ctname))
p.type = ITEM_TNAME;
else
if(param) {
int ii = InScListIndext(id, m.ptype);
if(ii >= 0)
p.type = ITEM_PTYPE + ii;
}
else {
int ii = InScListIndext(id, m.type);
if(ii >= 0)
p.type = ITEM_TYPE + ii;
}
}
}
else {
p.type = ITEM_SIGN;
while(s[n] && !iscid(s[n]))
n++;
}
p.len = n;
s += n;
}
return part;
}
Vector<ItemTextPart> ParseItemNatural(const CppItemInfo& m, const char *s)
{
return ParseItemNatural(m.name, m, s);
}
Vector<ItemTextPart> ParseItemNatural(const CppItemInfo& m)
{
return ParseItemNatural(m, ~m.natural + m.at);
}

View file

@ -1,120 +1,5 @@
#include "Browser.h"
bool IsCppKeyword(const String& id)
{
static Index<String> kw;
if(kw.GetCount() == 0) {
const char **cppk = CppKeyword();
for(int i = 0; cppk[i]; i++)
kw.Add(cppk[i]);
}
return kw.Find(id) >= 0;
}
bool IsCppType(const String& id)
{
static const char *t[] = {
"int", "long", "short", "void", "float", "double", "char", "signed", "unsigned", "bool",
"const", "mutable", "struct", "class", "union", "public", "private", "protected"
};
static Index<String> kt;
if(kt.GetCount() == 0) {
for(int i = 0; i < __countof(t); i++)
kt.Add(t[i]);
}
return kt.Find(id) >= 0;
}
int InScListIndext(const char *s, const char *list)
{
int ii = 0;
for(;;) {
const char *q = s;
while(*list == ' ') list++;
for(;;) {
if(*q == '\0' && *list == '\0') return ii;
if(*q != *list) {
if(*q == '\0' && (*list == '<' || *list == ';' || *list == ',' || *list == '>'))
return ii;
if(*list == '\0') return -1;
break;
}
q++;
list++;
}
while(*list && *list != ';' && *list != '<' && *list != '>' && *list != ',') list++;
if(*list == '\0') return -1;
list++;
ii++;
}
}
Vector<ItemTextPart> ParseItemNatural(const CppItemInfo& m, const char *s)
{
Vector<ItemTextPart> part;
bool param = false;
while(*s) {
while(*s == '\2') s++;
ItemTextPart& p = part.Add();
p.pos = (int)(s - ~m.natural);
p.type = ITEM_TEXT;
int n = 1;
if(*s >= '0' && *s <= '9') {
while(s[n] >= '0' && s[n] <= '9')
n++;
p.type = ITEM_NUMBER;
}
else
if(iscid(*s) || *s == ':') {
if(strncmp(s, m.name, m.name.GetLength()) == 0 && !iscid(s[m.name.GetLength()])) {
p.type = ITEM_NAME;
n = m.name.GetLength();
param = true;
}
else {
String id;
n = 0;
while(IsAlNum(s[n]) || s[n] == '_' || s[n] == ':')
id.Cat(s[n++]);
if(IsCppType(id))
p.type = ITEM_CPP_TYPE;
else
if(IsCppKeyword(id))
p.type = ITEM_CPP;
else
if(InScList(id, m.pname))
p.type = ITEM_PNAME;
else
if(InScList(id, m.tname))
p.type = ITEM_TNAME;
if(param) {
int ii = InScListIndext(id, m.ptype);
if(ii >= 0)
p.type = ITEM_PTYPE + ii;
}
else {
int ii = InScListIndext(id, m.type);
if(ii >= 0)
p.type = ITEM_TYPE + ii;
}
}
}
else {
p.type = ITEM_SIGN;
while(s[n] && !iscid(s[n]) && s[n] != '\2')
n++;
}
p.len = n;
s += n;
}
return part;
}
Vector<ItemTextPart> ParseItemNatural(const CppItemInfo& m)
{
return ParseItemNatural(m, ~m.natural + m.at);
}
int CppItemInfoDisplay::DoPaint(Draw& w, const Rect& r, const Value& q,
Color _ink, Color paper, dword style) const
{
@ -220,6 +105,9 @@ int CppItemInfoDisplay::DoPaint(Draw& w, const Rect& r, const Value& q,
case ITEM_NAME:
f.Bold();
break;
case ITEM_UPP:
ink = Cyan;
break;
case ITEM_CPP_TYPE:
case ITEM_CPP:
ink = LtBlue;

View file

@ -62,3 +62,4 @@ LAYOUT(SaveTemplateLayout, 248, 96)
ITEM(Button, ok, SetLabel(t_("OK")).LeftPosZ(108, 64).TopPosZ(60, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(176, 64).TopPosZ(60, 24))
END_LAYOUT

View file

@ -330,6 +330,9 @@ void TopicEditor::SetBar()
bool TopicEditor::Key(dword key, int cnt)
{
switch(key) {
case K_ALT_F10:
FixTopic();
return true;
case K_ALT_UP:
return topic.Key(K_UP, 0);
case K_ALT_DOWN:

View file

@ -4,7 +4,7 @@
#include "ide\Common/init"
#include "PdfDraw/init"
#include "RichEdit/init"
#define BLITZ_INDEX__ FBC518112DEEE5BCB5A93FFF277DB6572
#define BLITZ_INDEX__ F249BD357E97BA043EF2E512156539AB2
#include "TopicI.icpp"
#undef BLITZ_INDEX__
#endif

View file

@ -62,7 +62,7 @@ void Pdb::Visualise(Visual& result, Pdb::Val val, int expandptr, int slen, int m
else {
String x = ReadString(val.address, slen + 1);
String dt;
if(x.GetLength() > (IsOk(x) ? slen : 10)) {
if(x.GetLength() > (IsOk(x) ? slen : 20)) {
x.Trim(x.GetLength() - 1);
dt = "..";
}
@ -126,7 +126,7 @@ void Pdb::Visualise(Visual& result, Pdb::Val val, int expandptr, int slen, int m
Val r = t.member[i];
r.address += val.address;
try {
Visualise(result, r, max(expandptr - 1, 0), 20, maxlen);
Visualise(result, r, max(expandptr - 1, 0), 32, maxlen);
}
catch(CParser::Error e) {
result.Cat(e, SColorDisabled);
@ -143,7 +143,7 @@ void Pdb::Visualise(Visual& result, Pdb::Val val, int expandptr, int slen, int m
result.Cat(t.static_member.GetKey(i));
result.Cat("=", SColorMark);
try {
Visualise(result, t.static_member[i], max(expandptr - 1, 0), 20, maxlen);
Visualise(result, t.static_member[i], max(expandptr - 1, 0), 32, maxlen);
}
catch(CParser::Error e) {
result.Cat(e, SColorDisabled);

View file

@ -174,6 +174,10 @@ void TopicCtrl::SyncDocTree()
}
else {
if(otherfirst) {
if(usedfirst) {
usid = AddTree(0, IdeImg::Package(), Null, "Used packages");
usedfirst = false;
}
otid = AddTree(0, IdeImg::Package(), Null, "Other packages");
otherfirst = false;
}
@ -520,10 +524,8 @@ struct HelpModule : public IdeModule {
if(IsHelpName(path)) {
topic_serial++;
GetRefLinks("");
if(ide->doc.GetCurrent().IsEmpty()) {
ide->doc.SyncDocTree();
ide->doc.GoTo(Nvl(recent_topic, sTopicHome));
}
HelpDes *d = new HelpDes;
d->topic = &ide->doc;
return d;