瀏覽代碼

pargv_t uses now ENTRYs

Serj Kalichev 4 年之前
父節點
當前提交
367ccb421e
共有 4 個文件被更改,包括 33 次插入64 次删除
  1. 10 0
      klish/khelper.h
  2. 8 12
      klish/kpargv.h
  3. 8 7
      klish/ksession/kparg.c
  4. 7 45
      klish/ksession/kpargv.c

+ 10 - 0
klish/khelper.h

@@ -136,6 +136,16 @@
 	return faux_list_len(inst->nested##s); \
 }
 
+#define _KNESTED_IS_EMPTY(obj, nested) \
+	bool_t k##obj##_##nested##s_is_empty(const k##obj##_t *inst)
+#define KNESTED_IS_EMPTY(obj, nested) \
+	_KNESTED_IS_EMPTY(obj, nested) { \
+	assert(inst); \
+	if (!inst) \
+		return -1; \
+	return faux_list_is_empty(inst->nested##s); \
+}
+
 #define _KNESTED_ITER(obj, nested) \
 	k##obj##_##nested##s_node_t *k##obj##_##nested##s_iter(const k##obj##_t *inst)
 #define KNESTED_ITER(obj, nested) \

+ 8 - 12
klish/kpargv.h

@@ -1,14 +1,13 @@
 /** @file kpargv.h
  *
- * @brief Klish pargv
+ * @brief Parsed ARGuments Vector
  */
 
 #ifndef _klish_kpargv_h
 #define _klish_kpargv_h
 
 #include <faux/list.h>
-#include <klish/kparam.h>
-#include <klish/kcommand.h>
+#include <klish/kentry.h>
 
 typedef struct kpargv_s kpargv_t;
 typedef struct kparg_s kparg_t;
@@ -20,10 +19,10 @@ C_DECL_BEGIN
 
 // Parg
 
-kparg_t *kparg_new(kparam_t *param, const char *value);
+kparg_t *kparg_new(kentry_t *entry, const char *value);
 void kparg_free(kparg_t *parg);
 
-kparam_t *kparg_param(const kparg_t *parg);
+kentry_t *kparg_entry(const kparg_t *parg);
 bool_t kparg_set_value(kparg_t *parg, const char *value);
 const char *kparg_value(const kparg_t *parg);
 
@@ -32,14 +31,11 @@ const char *kparg_value(const kparg_t *parg);
 kpargv_t *kpargv_new();
 void kpargv_free(kpargv_t *pargv);
 
-kcommand_t *kpargv_command(const kpargv_t *pargv);
-bool_t kpargv_set_command(kpargv_t *pargv, kcommand_t *command);
 faux_list_t *kpargv_pargs(const kpargv_t *pargv);
-
-size_t kpargv_len(const kpargv_t *pargv);
-size_t kpargv_is_empty(const kpargv_t *pargv);
-bool_t kpargv_add(kpargv_t *pargv, kparg_t *parg);
-kparg_t *kpargv_last(const kpargv_t *pargv);
+ssize_t kpargv_pargs_len(const kpargv_t *pargv);
+bool_t kpargv_pargs_is_empty(const kpargv_t *pargv);
+bool_t kpargv_pargs_add(kpargv_t *pargv, kparg_t *parg);
+kparg_t *kpargv_pargs_last(const kpargv_t *pargv);
 
 C_DECL_END
 

+ 8 - 7
klish/ksession/kparg.c

@@ -1,4 +1,5 @@
 /** @file kparg.c
+ * @brief Parsed ARGument
  */
 
 
@@ -9,29 +10,29 @@
 
 #include <faux/str.h>
 #include <klish/khelper.h>
-#include <klish/kparam.h>
+#include <klish/kentry.h>
 #include <klish/kpargv.h> // Contains parg and pargv
 
 
 struct kparg_s {
-	kparam_t *param;
+	kentry_t *entry;
 	char *value;
 };
 
 
-// Param
-KGET(parg, kparam_t *, param);
+// Entry
+KGET(parg, kentry_t *, entry);
 
 // Value
 KSET_STR(parg, value);
 KGET_STR(parg, value);
 
 
-kparg_t *kparg_new(kparam_t *param, const char *value)
+kparg_t *kparg_new(kentry_t *entry, const char *value)
 {
 	kparg_t *parg = NULL;
 
-	if (!param)
+	if (!entry)
 		return NULL;
 
 	parg = faux_zmalloc(sizeof(*parg));
@@ -40,7 +41,7 @@ kparg_t *kparg_new(kparam_t *param, const char *value)
 		return NULL;
 
 	// Initialize
-	parg->param = param;
+	parg->entry = entry;
 	kparg_set_value(parg, value);
 
 	return parg;

+ 7 - 45
klish/ksession/kpargv.c

@@ -7,23 +7,21 @@
 
 #include <faux/list.h>
 #include <klish/khelper.h>
-#include <klish/kcommand.h>
-#include <klish/kparam.h>
 #include <klish/kpargv.h>
 
 
 struct kpargv_s {
-	kcommand_t *command;
 	faux_list_t *pargs;
 };
 
 
-// Command
-KGET(pargv, kcommand_t *, command);
-KSET(pargv, kcommand_t *, command);
-
 // Pargs
 KGET(pargv, faux_list_t *, pargs);
+KADD_NESTED(pargv, parg);
+KNESTED_LEN(pargv, parg);
+KNESTED_IS_EMPTY(pargv, parg);
+KNESTED_ITER(pargv, parg);
+KNESTED_EACH(pargv, parg);
 
 
 kpargv_t *kpargv_new()
@@ -55,48 +53,12 @@ void kpargv_free(kpargv_t *pargv)
 }
 
 
-size_t kpargv_len(const kpargv_t *pargv)
-{
-	assert(pargv);
-	if (!pargv)
-		return 0;
-
-	return faux_list_len(pargv->pargs);
-}
-
-
-size_t kpargv_is_empty(const kpargv_t *pargv)
-{
-	assert(pargv);
-	if (!pargv)
-		return 0;
-
-	return faux_list_is_empty(pargv->pargs);
-}
-
-
-bool_t kpargv_add(kpargv_t *pargv, kparg_t *parg)
-{
-	assert(pargv);
-	assert(parg);
-	if (!pargv)
-		return BOOL_FALSE;
-	if (!parg)
-		return BOOL_FALSE;
-
-	if (!faux_list_add(pargv->pargs, parg))
-		return BOOL_FALSE;
-
-	return BOOL_TRUE;
-}
-
-
-kparg_t *kpargv_last(const kpargv_t *pargv)
+kparg_t *kpargv_pargs_last(const kpargv_t *pargv)
 {
 	assert(pargv);
 	if (!pargv)
 		return NULL;
-	if (kpargv_is_empty(pargv))
+	if (kpargv_pargs_is_empty(pargv))
 		return NULL;
 
 	return (kparg_t *)faux_list_data(faux_list_tail(pargv->pargs));