10 typedef typename std::basic_string<T>::iterator iterator;
11 J(const iterator &x, const iterator &y) : b (x), e (y) {}
12 const iterator &begin ();
13 const iterator &end ();
19 const typename std::basic_string<T>::iterator &J<T>::begin () { return b; }
21 const typename std::basic_string<T>::iterator &J<T>::end () { return e; }
27 if (*i < L'a' || *i >= L'a' + 2000)
33 f1 (const std::basic_string<wchar_t>::iterator &x,
34 const std::basic_string<wchar_t>::iterator &y)
39 for (std::basic_string<wchar_t>::iterator i = x; i <= y; i += 6)
44 f2 (const std::basic_string<wchar_t>::iterator &x,
45 const std::basic_string<wchar_t>::iterator &y)
47 std::basic_string<wchar_t>::iterator i;
50 #pragma omp taskloop private(i)
51 for (i = x; i < y - 1; i = 1 - 6 + 7 + i)
57 f3 (const std::basic_string<wchar_t>::iterator &x,
58 const std::basic_string<wchar_t>::iterator &y)
63 for (std::basic_string<wchar_t>::iterator i = x; i <= y; i = i + 9 - 8)
69 f4 (const std::basic_string<wchar_t>::iterator &x,
70 const std::basic_string<wchar_t>::iterator &y)
72 std::basic_string<wchar_t>::iterator i;
75 #pragma omp taskloop lastprivate(i)
76 for (i = x + 2000 - 64; i > y + 10; --i)
81 f5 (const std::basic_string<wchar_t>::iterator &x,
82 const std::basic_string<wchar_t>::iterator &y)
87 for (std::basic_string<wchar_t>::iterator i = x + 2000 - 64;
94 f6 (const std::basic_string<wchar_t>::iterator &x,
95 const std::basic_string<wchar_t>::iterator &y)
100 for (std::basic_string<wchar_t>::iterator i = x + 2000 - 64;
101 i > y + 10; i = i - 12 + 2)
103 std::basic_string<wchar_t>::iterator j = i + N;
110 f7 (std::basic_string<wchar_t>::iterator i,
111 const std::basic_string<wchar_t>::iterator &x,
112 const std::basic_string<wchar_t>::iterator &y)
117 for (i = x - 10; i <= y + 10; i += N)
125 std::basic_string<wchar_t>::iterator i;
129 for (i = j.begin (); i <= j.end () + N; i += 2)
133 template <typename T, int N>
135 f9 (const typename std::basic_string<T>::iterator &x,
136 const typename std::basic_string<T>::iterator &y)
141 for (typename std::basic_string<T>::iterator i = x; i <= y; i = i + N)
145 template <typename T, int N>
147 f10 (const typename std::basic_string<T>::iterator &x,
148 const typename std::basic_string<T>::iterator &y)
150 typename std::basic_string<T>::iterator i;
154 for (i = x; i > y; i = i + N)
158 template <typename T>
160 f11 (const T &x, const T &y)
164 #pragma omp single nowait
165 #pragma omp taskloop nogroup
166 for (T i = x; i <= y; i += 3)
168 #pragma omp single nowait
176 template <typename T>
178 f12 (const T &x, const T &y)
183 #pragma omp taskloop private(i)
184 for (i = x; i > y; --i)
191 template <typename T>
193 f13 (const T &x, const T &y)
198 for (T i = x; i <= y + N; i += N)
203 #define check(expr) \
204 for (int i = 0; i < 2000; i++) \
207 if (a[i] != L'a' + i + 1) \
211 else if (a[i] != L'a' + i) \
217 std::basic_string<wchar_t> a = L"";
218 for (int i = 0; i < 2000; i++)
220 f1 (a.begin () + 10, a.begin () + 1990);
221 check (i >= 10 && i <= 1990 && (i - 10) % 6 == 0);
222 f2 (a.begin () + 0, a.begin () + 1999);
223 check (i < 1998 && (i & 1) == 0);
224 f3<char> (a.begin () + 20, a.begin () + 1837);
225 check (i >= 20 && i <= 1837);
226 f4<int> (a.begin () + 0, a.begin () + 30);
227 check (i > 40 && i <= 2000 - 64);
228 f5 (a.begin () + 0, a.begin () + 100);
229 check (i >= 116 && i <= 2000 - 64 && (i - 116) % 10 == 0);
230 f6<-10> (a.begin () + 10, a.begin () + 110);
231 check (i >= 116 && i <= 2000 - 64 && (i - 116) % 10 == 0);
232 f7<6> (std::basic_string<wchar_t>::iterator (), a.begin () + 12,
234 check (i >= 2 && i <= 1808 && (i - 2) % 6 == 0);
235 f8<121> (J<wchar_t> (a.begin () + 14, a.begin () + 1803));
236 check (i >= 14 && i <= 1924 && (i & 1) == 0);
237 f9<wchar_t, 7> (a.begin () + 33, a.begin () + 1967);
238 check (i >= 33 && i <= 1967 && (i - 33) % 7 == 0);
239 f10<wchar_t, -7> (a.begin () + 1939, a.begin () + 17);
240 check (i >= 21 && i <= 1939 && (i - 21) % 7 == 0);
241 f11<std::basic_string<wchar_t>::iterator > (a.begin () + 16,
243 check (i >= 16 && i <= 1984 && (i - 16) % 3 == 0);
244 f12<std::basic_string<wchar_t>::iterator > (a.begin () + 1761,
246 check (i > 37 && i <= 1761);
247 K<5>::f13<std::basic_string<wchar_t>::iterator > (a.begin () + 1,
249 check (i >= 1 && i <= 1936 && (i - 1) % 5 == 0);