示例#1
0
void vdl_list_sort (struct VdlList *list, 
		    bool (*is_strictly_lower) (void *a, void *b, void *context),
		    void *context)
{
  // insertion sort.
  struct VdlList sorted;
  vdl_list_construct (&sorted);
  void **i;
  for (i = vdl_list_begin (list);
       i != vdl_list_end (list);
       i = vdl_list_next (i))
    {
      void **j;
      void **insertion = vdl_list_end (&sorted);
      for (j = vdl_list_begin (&sorted);
	   j != vdl_list_end (&sorted);
	   j = vdl_list_next (j))
	{
	  if (!is_strictly_lower (*j, *i, context))
	    {
	      insertion = j;
	      break;
	    }
	}
      vdl_list_insert (&sorted, insertion, *i);
    }
  vdl_list_clear (list);
  vdl_list_insert_range (list, 
			 vdl_list_begin (list),
			 vdl_list_begin (&sorted),
			 vdl_list_end (&sorted));
  vdl_list_destruct (&sorted);
}
示例#2
0
void vdl_list_insert_range (struct VdlList *list, void **at,
			    void **start, void **end)
{
  void **i;
  for (i = start; i != end; i = vdl_list_next (i))
    {
      vdl_list_insert (list, at, *i);
    }
}
示例#3
0
struct VdlList *
vdl_utils_splitpath (const char *value)
{
  struct VdlList *list = vdl_utils_strsplit (value, ':');
  void **i;
  for (i = vdl_list_begin (list);
       i != vdl_list_end (list);
       i = vdl_list_next (list, i))
    {
      if (vdl_utils_strisequal (*i, ""))
        {
          // the empty string is interpreted as '.'
          vdl_alloc_free (*i);
          i = vdl_list_erase (list, i);
          i = vdl_list_insert (list, i, vdl_utils_strdup ("."));
        }
    }
  return list;
}
示例#4
0
void vdl_list_push_front (struct VdlList *list, void *data)
{
  vdl_list_insert (list, vdl_list_begin (list), data);
}
示例#5
0
void vdl_list_push_back (struct VdlList *list, void *data)
{
  vdl_list_insert (list, vdl_list_end (list), data);
}