Skip to content
  • Johnny Chen's avatar
    Provide an add-on API to SBValue class by post-processing to provide a way · 48225053
    Johnny Chen authored
    to iterate through an SBValue instance by treating it as the head of a linked
    list.  API program must provide two args to the linked_list_iter() method:
    the first being the child member name which points to the next item on the list
    and the second being a Python function which an SBValue (for the next item) and
    returns True if end of list is reached, otherwise it returns False.
    
    For example, suppose we have the following sample program.
    
    #include <stdio.h>
    
    class Task {
    public:
        int id;
        Task *next;
        Task(int i, Task *n):
            id(i),
            next(n)
        {}
    };
    
    
    int main (int argc, char const *argv[])
    {
        Task *task_head = new Task(-1, NULL);
        Task *task1 = new Task(1, NULL);
        Task *task2 = new Task(2, NULL);
        Task *task3 = new Task(3, NULL); // Orphaned.
        Task *task4 = new Task(4, NULL);
        Task *task5 = new Task(5, NULL);
    
        task_head->next = task1;
        task1->next = task2;
        task2->next = task4;
        task4->next = task5;
    
        int total = 0; // Break at this line
        Task *t = task_head;
        while (t != NULL) {
            if (t->id >= 0)
                ++total;
            t = t->next;
        }
        printf("We have a total number of %d tasks\n", total);
        return 0;
    }
    
    The test program produces the following output while exercising the linked_list_iter() SBVAlue API:
    
    task_head:
    	TypeName      -> Task *
    	ByteSize      -> 8
    	NumChildren   -> 2
    	Value         -> 0x0000000106400380
    	ValueType     -> local_variable
    	Summary       -> None
    	IsPointerType -> True
    	Location      -> 0x00007fff65f06e60
    (Task *) next = 0x0000000106400390
      (int) id = 1
      (Task *) next = 0x00000001064003a0
    
    (Task *) next = 0x00000001064003a0
      (int) id = 2
      (Task *) next = 0x00000001064003c0
    
    (Task *) next = 0x00000001064003c0
      (int) id = 4
      (Task *) next = 0x00000001064003d0
    
    (Task *) next = 0x00000001064003d0
      (int) id = 5
      (Task *) next = 0x0000000000000000
    
    llvm-svn: 135938
    48225053
Loading