1fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen//===-- main.c --------------------------------------------------*- C++ -*-===//
2fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen//
3fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen//                     The LLVM Compiler Infrastructure
4fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen//
5fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen// This file is distributed under the University of Illinois Open Source
6fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen// License. See LICENSE.TXT for details.
7fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen//
8fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen//===----------------------------------------------------------------------===//
9fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen#include <stdio.h>
10fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen
11fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chenclass Task {
12fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chenpublic:
13fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    int id;
14fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    Task *next;
15fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    Task(int i, Task *n):
16fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen        id(i),
17fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen        next(n)
18fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    {}
19fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen};
20fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen
21fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen
22fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chenint main (int argc, char const *argv[])
23fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen{
24d96c9e88f80b8856aa76b7e7dd41acdf2bec202eJohnny Chen    Task *task_head = NULL;
25fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    Task *task1 = new Task(1, NULL);
26fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    Task *task2 = new Task(2, NULL);
27fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    Task *task3 = new Task(3, NULL); // Orphaned.
28fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    Task *task4 = new Task(4, NULL);
29fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    Task *task5 = new Task(5, NULL);
30fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen
31d96c9e88f80b8856aa76b7e7dd41acdf2bec202eJohnny Chen    task_head = task1;
32fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    task1->next = task2;
33fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    task2->next = task4;
34fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    task4->next = task5;
35fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen
3638581d29207f732ab913f2d0c1f203fce1749b0eJohnny Chen    int total = 0;
37fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    Task *t = task_head;
38fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    while (t != NULL) {
39fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen        if (t->id >= 0)
40fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen            ++total;
41fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen        t = t->next;
42fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    }
43fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen    printf("We have a total number of %d tasks\n", total);
4438581d29207f732ab913f2d0c1f203fce1749b0eJohnny Chen
4538581d29207f732ab913f2d0c1f203fce1749b0eJohnny Chen    // This corresponds to an empty task list.
46d96c9e88f80b8856aa76b7e7dd41acdf2bec202eJohnny Chen    Task *empty_task_head = NULL;
4738581d29207f732ab913f2d0c1f203fce1749b0eJohnny Chen
48758db9690ae3d2f65fc5e6ef177581ae8d75221dJohnny Chen    Task *task_evil = new Task(1, NULL);
49758db9690ae3d2f65fc5e6ef177581ae8d75221dJohnny Chen    Task *task_2 = new Task(2, NULL);
50758db9690ae3d2f65fc5e6ef177581ae8d75221dJohnny Chen    Task *task_3 = new Task(3, NULL);
51758db9690ae3d2f65fc5e6ef177581ae8d75221dJohnny Chen    task_evil->next = task_2;
52758db9690ae3d2f65fc5e6ef177581ae8d75221dJohnny Chen    task_2->next = task_3;
53758db9690ae3d2f65fc5e6ef177581ae8d75221dJohnny Chen    task_3->next = task_evil; // In order to cause inifinite loop. :-)
54758db9690ae3d2f65fc5e6ef177581ae8d75221dJohnny Chen
5538581d29207f732ab913f2d0c1f203fce1749b0eJohnny Chen    return 0; // Break at this line
56fbebbc9e3b140e77886db46a84f58aef2ea72bb8Johnny Chen}
57