summaryrefslogtreecommitdiff
path: root/utils/testchain.cc
diff options
context:
space:
mode:
Diffstat (limited to 'utils/testchain.cc')
-rw-r--r--utils/testchain.cc65
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");
+ }
+}