]> git.gag.com Git - fw/sdcc/blobdiff - sim/ucsim/sim.src/itsrc.cc
version 0.5.2
[fw/sdcc] / sim / ucsim / sim.src / itsrc.cc
index de784289c7711d494202850b41836c9dca9121dc..ad17146d9ef5d8b2ef0a27237883173946a4e503 100644 (file)
@@ -46,25 +46,24 @@ cl_it_src::cl_it_src(uchar Iie_mask,
                     uchar Isrc_mask,
                     uint  Iaddr,
                     bool  Iclr_bit,
-                    char  *Iname):
+                    char  *Iname,
+                    int   apoll_priority):
   cl_base()
 {
+  poll_priority= apoll_priority;
   ie_mask = Iie_mask;
   src_reg = Isrc_reg;
   src_mask= Isrc_mask;
   addr    = Iaddr;
   clr_bit = Iclr_bit;
   if (Iname != NULL)
-    name= strdup(Iname);
+    set_name(Iname);
   else
-    name= strdup("unknown");
+    set_name("unknown");
   active= DD_TRUE;
 }
 
-cl_it_src::~cl_it_src(void)
-{
-  free(name);
-}
+cl_it_src::~cl_it_src(void) {}
 
 bool
 cl_it_src::is_active(void)
@@ -91,6 +90,35 @@ cl_it_src::deactivate(void)
 }
 
 
+/*
+ */
+
+cl_irqs::cl_irqs(t_index alimit, t_index adelta):
+  cl_sorted_list(alimit, adelta, "irqs")
+{
+  Duplicates= DD_TRUE;
+}
+
+void *
+cl_irqs::key_of(void *item)
+{
+  class cl_it_src *itsrc= (class cl_it_src *)item;
+  return(&itsrc->poll_priority);
+}
+
+int
+cl_irqs::compare(void *key1, void *key2)
+{
+  int *k1= (int*)key1, *k2= (int*)key2;
+
+  if (*k1 == *k2)
+    return(0);
+  else if (*k1 < *k2)
+    return(-1);
+  return(1);
+}
+
+
 /*
  * Interrupt level
  ******************************************************************************