view netinstall/hash.cc @ 714:02339d4ebed4

[xemacs-hg @ 2001-12-23 20:28:19 by wmperry] 2001-12-22 William M. Perry <wmperry@gnu.org> * glyphs-gtk.c (gtk_xpm_instantiate): Don't bother doing the xpm-color-symbols checks, they are impossible to implement with GTK's XPM implementation. :( 2001-12-13 William M. Perry <wmperry@gnu.org> * select-gtk.c (gtk_own_selection): Update to follow the new method signature. Ignore owned_p as it appears to only be used for motif hacks. * redisplay-gtk.c (gtk_output_string): Fixed some warnings about signed/unsigned comparison. (gtk_output_gdk_pixmap): Remove clipping code as per change by andy@xemacs.org to the X11 code. (gtk_output_pixmap): Make this follow the output_pixmap method conventions and expose it. (gtk_output_horizontal_line): Renamed from output_hline, and expose it in our method structure. (gtk_ring_bell): Don't ring the bell if volume <= 0 * toolbar-gtk.c (gtk_output_toolbar_button): (gtk_output_frame_toolbars): (gtk_redraw_exposed_toolbars): (gtk_redraw_frame_toolbars): These are now just aliases for the common_XXX() routines in toolbar-common.c * toolbar-common.c: New common toolbar implementation. This file uses only the redisplay_XXX() functions and device methods to draw the toolbar, and so should be portable across all windowing systems (other than tty, and even then I imagine text-based stuff would work if you had a way to select it).
author wmperry
date Sun, 23 Dec 2001 20:28:22 +0000
parents 3078fd1074e8
children
line wrap: on
line source

/*
 * Copyright (c) 2000, Red Hat, Inc.
 *
 *     This program is free software; you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation; either version 2 of the License, or
 *     (at your option) any later version.
 *
 *     A copy of the GNU General Public License can be found at
 *     http://www.gnu.org/
 *
 * Written by DJ Delorie <dj@cygnus.com>
 *
 */

/* Simple hash class for install.cc */

#include "win32.h"
#include <stdlib.h>
#include <string.h>

#include "hash.h"

class hash_internals {
public:
  char **keys;
  int numkeys;
  int maxkeys;
  int prev_index;
};

hash::hash ()
{
  h = new hash_internals;
  h->numkeys = 0;
  h->maxkeys = 10;
  h->keys = (char **) malloc (h->maxkeys * sizeof (char *));
  h->prev_index = 0;
}

hash::~hash ()
{
  free (h->keys);
  free (h);
}


void
hash::add (char *string)
{
  int i;
  for (i=0; i<h->numkeys; i++)
    if (strcmp (h->keys[i], string) == 0)
      return;
  if (h->numkeys >= h->maxkeys)
    {
      h->maxkeys += 10;
      h->keys = (char **) realloc (h->keys, h->maxkeys * sizeof (char *));
    }

  h->keys[h->numkeys] = _strdup (string);
  h->numkeys ++;
}


int
hash::has (char *string)
{
  int i;
  for (i=0; i<h->numkeys; i++)
    if (strcmp (h->keys[i], string) == 0)
      return 1;
  return 0;
}

char *
hash::enumerate (char *prev)
{
  if (prev == 0)
    h->prev_index = -1;
  h->prev_index ++;
  if (h->prev_index >= h->numkeys)
    return 0;
  return h->keys[h->prev_index];
}

static int CDECL
rev_len (const void *va, const void *vb)
{
  char *a = *(char **)va;
  char *b = *(char **)vb;
  return strcmp (b, a);
}

void
hash::reverse_sort ()
{
  qsort (h->keys, h->numkeys, sizeof (h->keys[0]), rev_len);
}