diff options
Diffstat (limited to 'utils/testchain.cc')
-rw-r--r-- | utils/testchain.cc | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/utils/testchain.cc b/utils/testchain.cc new file mode 100644 index 0000000..ae5fef8 --- /dev/null +++ b/utils/testchain.cc @@ -0,0 +1,65 @@ +#include <stdio.h> +#include "String.h" +#include "Chain.h" + +class C { +public: + C* Next; + char* CcuString; +inline C (const char* c) : Next (0), CcuString (NewString (c)) {} +inline C* GetNext () const { /*printf ("GetNext (%x) = %x)\n", this, Next); */ return Next; } +inline void SetNext (C* c) { /*printf ("SetNext (%x, %x)\n", this, c); */ Next = c; } +}; + +main () +{ + CcuChainOf <C> l; + char c; + char s[80]; + while ((c = getchar ()) != EOF) { + switch (c) { + case 'a': + scanf (" %s", s); + l.Append (new C (s)); + break; + case 'p': + scanf (" %s", s); + l.Prepend (new C (s)); + break; + case '+': + l.RemoveFirst (); + break; + case '-': + l.RemoveLast (); + break; + case '\n': + continue; + case 'i': + { + int i; + scanf (" %d %s", &i, s); + CcuChainIterOf <C> lj (l); + while ((i-- > 0) && ++lj) + ; + l.InsertBefore (lj, new C (s)); + break; + } + case 'j': + { + int i; + scanf (" %d %s", &i, s); + CcuChainIterOf <C> lj (l); + while ((i-- > 0) && ++lj) + ; + l.InsertAfter (lj, new C (s)); + break; + } + } + CcuChainIterOf <C> li (l); + while (++li) { + C* pt = *li; + printf ("%s ", pt->CcuString); + } + printf ("\n"); + } +} |