* sim/ucsim/*.*, sim/ucsim/configure, sim/ucsim/configure.in:
[fw/sdcc] / sim / ucsim / sim.src / itsrc.cc
index d865a9767a7e3f1f2f7571d16ebb669d080a7b31..32fc69594fccd7018b6ec354fbc2f4ee1fa66f5f 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):
+                    const 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");
-  active= TRUE;
+    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)
@@ -81,13 +80,42 @@ cl_it_src::set_active_status(bool Aactive)
 void
 cl_it_src::activate(void)
 {
-  set_active_status(TRUE);
+  set_active_status(DD_TRUE);
 }
 
 void
 cl_it_src::deactivate(void)
 {
-  set_active_status(FALSE);
+  set_active_status(DD_FALSE);
+}
+
+
+/*
+ */
+
+cl_irqs::cl_irqs(t_index alimit, t_index adelta):
+  cl_sorted_list(alimit, adelta, "irqs")
+{
+  Duplicates= DD_TRUE;
+}
+
+const 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(const void *key1, const void *key2)
+{
+  const int k1= *static_cast<const int *>(key1), k2= *static_cast<const int *>(key2);
+
+  if (k1 == k2)
+    return(0);
+  else if (k1 < k2)
+    return(-1);
+  return(1);
 }