1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
//=============================================================================
/**
* @file DLList_Test.cpp
*
* $Id: DLList_Test.cpp 93638 2011-03-24 13:16:05Z johnnyw $
*
* This test illustrates the use of <ACE_DLList>.
*
*
* @author James Hu <jxh@cs.wustl.edu> and Douglas C. Schmidt <schmidt@cs.wustl.edu>
*/
//=============================================================================
#include "test_config.h"
#include "ace/Containers.h"
#include "ace/SString.h"
#include "ace/Malloc_T.h"
typedef ACE_TCHAR *ACE_STRING;
typedef ACE_DLList<ACE_STRING> STRLIST;
typedef ACE_DLList_Iterator<ACE_STRING> STRLIST_ITERATOR;
typedef ACE_DLList_Reverse_Iterator<ACE_STRING> STRLIST_REVERSE_ITERATOR;
static ACE_STRING string_table[] =
{
// Note: all these casts are to appease SC 5.0 which is not pleased
// with using string literals (i.e. const char *'s) as char
// *'s. It's ugly, but necessary.
const_cast<ACE_TCHAR *> (ACE_TEXT ("hello")),
const_cast<ACE_TCHAR *> (ACE_TEXT ("guten Tag")),
const_cast<ACE_TCHAR *> (ACE_TEXT ("goodbye")),
const_cast<ACE_TCHAR *> (ACE_TEXT ("auf wiedersehen")),
const_cast<ACE_TCHAR *> (ACE_TEXT ("funny")),
const_cast<ACE_TCHAR *> (ACE_TEXT ("lustig")),
0
};
static void
run_iterate (STRLIST &list)
{
ACE_STRING *entry;
size_t i = 0;
for (STRLIST_ITERATOR iter (list);
(entry = iter.next ()) != 0;
iter.advance (), i++)
{
ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("iterating (%d): [%s]\n"),
i,
(ACE_TCHAR *) *entry));
}
}
static void
run_reverse_iterate (STRLIST &list)
{
ACE_STRING *entry;
size_t i = 0;
for (STRLIST_REVERSE_ITERATOR iter (list);
iter.next (entry) != 0;
iter.advance (), i++)
{
ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("iterating (%d): [%s]\n"),
i,
(ACE_TCHAR *) *entry));
}
}
static int
run_test (void)
{
STRLIST list;
size_t i;
for (i = 0; string_table[i] != 0; i++)
{
if (ACE_EVEN (i)
&& list.insert_tail ((ACE_STRING *) &string_table[i]) == 0)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%p failed for %s\n"),
ACE_TEXT ("insert"),
string_table[i]),
-1);
else if (list.insert_head ((ACE_STRING *) &string_table[i]) == 0)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%p failed for %s\n"),
ACE_TEXT ("insert"),
string_table[i]),
-1);
run_iterate (list);
run_reverse_iterate (list);
}
run_iterate (list);
run_reverse_iterate (list);
list.delete_tail ();
list.delete_tail ();
run_iterate (list);
run_reverse_iterate (list);
list.delete_head ();
list.delete_head ();
run_iterate (list);
run_reverse_iterate (list);
return 0;
}
int
run_main (int, ACE_TCHAR *[])
{
ACE_START_TEST (ACE_TEXT ("DLList_Test"));
run_test ();
ACE_END_TEST;
return 0;
}
|