summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/struct/queue/ms.c
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/struct/queue/ms.c')
-rw-r--r--tcllib/modules/struct/queue/ms.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/tcllib/modules/struct/queue/ms.c b/tcllib/modules/struct/queue/ms.c
new file mode 100644
index 0000000..cd08723
--- /dev/null
+++ b/tcllib/modules/struct/queue/ms.c
@@ -0,0 +1,76 @@
+/* struct::queue - critcl - layer 2 definitions
+ *
+ * -> Support for the queue methods in layer 3.
+ */
+
+#include <ms.h>
+#include <m.h>
+#include <q.h>
+#include <util.h>
+
+/* .................................................. */
+/*
+ *---------------------------------------------------------------------------
+ *
+ * qums_objcmd --
+ *
+ * Implementation of queue objects, the main dispatcher function.
+ *
+ * Results:
+ * A standard Tcl result code.
+ *
+ * Side effects:
+ * Per the called methods.
+ *
+ *---------------------------------------------------------------------------
+ */
+
+int
+qums_objcmd (ClientData cd, Tcl_Interp* interp, int objc, Tcl_Obj* CONST* objv)
+{
+ Q* q = (Q*) cd;
+ int m;
+
+ static CONST char* methods [] = {
+ "clear", "destroy", "get",
+ "peek", "put", "size",
+ "unget",
+ NULL
+ };
+ enum methods {
+ M_CLEAR, M_DESTROY, M_GET,
+ M_PEEK, M_PUT, M_SIZE,
+ M_UNGET
+ };
+
+ if (objc < 2) {
+ Tcl_WrongNumArgs (interp, objc, objv, "option ?arg arg ...?");
+ return TCL_ERROR;
+ } else if (Tcl_GetIndexFromObj (interp, objv [1], methods, "option",
+ 0, &m) != TCL_OK) {
+ return TCL_ERROR;
+ }
+
+ /* Dispatch to methods. They check the #args in detail before performing
+ * the requested functionality
+ */
+
+ switch (m) {
+ case M_CLEAR: return qum_CLEAR (q, interp, objc, objv);
+ case M_DESTROY: return qum_DESTROY (q, interp, objc, objv);
+ case M_GET: return qum_PEEK (q, interp, objc, objv, 1 /* get */);
+ case M_PEEK: return qum_PEEK (q, interp, objc, objv, 0 /* peek */);
+ case M_PUT: return qum_PUT (q, interp, objc, objv);
+ case M_SIZE: return qum_SIZE (q, interp, objc, objv);
+ case M_UNGET: return qum_UNGET (q, interp, objc, objv);
+ }
+ /* Not coming to this place */
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 4
+ * fill-column: 78
+ * End:
+ */