Просмотр исходного кода

ncd: NCDAst: add NCDProgram_NumProcesses()

ambrop7 13 лет назад
Родитель
Сommit
2e5d7264d5
2 измененных файлов с 14 добавлено и 0 удалено
  1. 12 0
      ncd/NCDAst.c
  2. 2 0
      ncd/NCDAst.h

+ 12 - 0
ncd/NCDAst.c

@@ -37,6 +37,7 @@
 void NCDProgram_Init (NCDProgram *o)
 {
     LinkedList1_Init(&o->processes_list);
+    o->num_processes = 0;
 }
 
 void NCDProgram_Free (NCDProgram *o)
@@ -52,6 +53,10 @@ void NCDProgram_Free (NCDProgram *o)
 
 NCDProcess * NCDProgram_PrependProcess (NCDProgram *o, NCDProcess p)
 {
+    if (o->num_processes == SIZE_MAX) {
+        return NULL;
+    }
+    
     struct ProgramProcess *e = malloc(sizeof(*e));
     if (!e) {
         return NULL;
@@ -60,6 +65,8 @@ NCDProcess * NCDProgram_PrependProcess (NCDProgram *o, NCDProcess p)
     LinkedList1_Prepend(&o->processes_list, &e->processes_list_node);
     e->p = p;
     
+    o->num_processes++;
+    
     return &e->p;
 }
 
@@ -91,6 +98,11 @@ NCDProcess * NCDProgram_NextProcess (NCDProgram *o, NCDProcess *ep)
     return &e->p;
 }
 
+size_t NCDProgram_NumProcesses (NCDProgram *o)
+{
+    return o->num_processes;
+}
+
 int NCDProcess_Init (NCDProcess *o, int is_template, const char *name, NCDBlock block)
 {
     ASSERT(is_template == !!is_template)

+ 2 - 0
ncd/NCDAst.h

@@ -43,6 +43,7 @@ typedef struct NCDIf_s NCDIf;
 
 struct NCDProgram_s {
     LinkedList1 processes_list;
+    size_t num_processes;
 };
 
 struct NCDBlock_s {
@@ -107,6 +108,7 @@ void NCDProgram_Free (NCDProgram *o);
 NCDProcess * NCDProgram_PrependProcess (NCDProgram *o, NCDProcess p) WARN_UNUSED;
 NCDProcess * NCDProgram_FirstProcess (NCDProgram *o);
 NCDProcess * NCDProgram_NextProcess (NCDProgram *o, NCDProcess *ep);
+size_t NCDProgram_NumProcesses (NCDProgram *o);
 
 int NCDProcess_Init (NCDProcess *o, int is_template, const char *name, NCDBlock block) WARN_UNUSED;
 void NCDProcess_Free (NCDProcess *o);