⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list_node.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
// -*- C++ -*-// List_Node.cpp,v 4.14 2005/01/21 02:45:12 ossama Exp// Copyright (C) 1989 Free Software Foundation, Inc.// written by Douglas C. Schmidt (schmidt@cs.wustl.edu)// This file is part of GNU GPERF.// 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.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.#include "List_Node.h"ACE_RCSID(src, List_Node, "List_Node.cpp,v 4.14 2005/01/21 02:45:12 ossama Exp")#if defined (ACE_HAS_GPERF)#include "Vectors.h"#include "ace/os_include/os_ctype.h"// Sorts the key set alphabetically to speed up subsequent operation// Uses insertion sort since the set is probably quite small.inline voidList_Node::sort (char *base, int len){  int i, j;  for (i = 0, j = len - 1; i < j; i++)    {      char curr, tmp;      for (curr = i + 1, tmp = base[curr];           curr > 0 && tmp < base[curr-1];           curr--)        base[curr] = base[curr - 1];      base[curr] = tmp;    }}// Initializes a List_Node.  This requires obtaining memory for the// CHAR_SET initializing them using the information stored in the// KEY_POSITIONS array in Options, and checking for simple errors.// It's important to note that KEY and REST are both pointers to the// different offsets into the same block of dynamic memory pointed to// by parameter K. The data member REST is used to store any// additional fields of the input file (it is set to the "" string if// Option[TYPE] is not enabled).  This is useful if the user wishes to// incorporate a lookup structure, rather than just an array of keys.// Finally, KEY_NUMBER contains a count of the total number of keys// seen so far.  This is used to initialize the INDEX field to some// useful value.List_Node::List_Node (char *k, int len)  : link (0),    next (0),    key (k),    rest (option[TYPE] ? k + len + 1 : const_cast<char*> ("")),    length (len),    slot (0){  char *ptr = new char[(option[ALLCHARS] ? len : option.max_keysig_size ()) + 1];  keysig = ptr;  k[len] = '\0';             // Null terminate KEY to separate it from REST.  // Lower case if STRCASECMP option is enabled.  if (option[STRCASECMP])    for (char *p = k; *p; p++)      if (isupper (*p))        *p = tolower (*p);  if (option[ALLCHARS])         // Use all the character position in the KEY.    for (; *k; k++, ptr++)      {        *ptr = *k;        int i = (int) *ptr;        ++Vectors::occurrences[i];      }  else    {      // Only use those character positions specified by the user.      option.reset ();      // Iterate thru the list of key_positions, initializing      // occurrences table and keysig (via char * pointer ptr).      for (int i; (i = option.get ()) != EOS; )        {          if (i == WORD_END) // Special notation for last KEY position, i.e. '$'.            *ptr = key[len - 1];          else if (i <= len) // Within range of KEY length, so we'll keep it.            *ptr = key[i - 1];          else // Out of range of KEY length, so we'll just skip it.            continue;          ++Vectors::occurrences[(int) *ptr++];        }      // Didn't get any hits and user doesn't want to consider the      // keylength, so there are essentially no usable hash positions!      if (ptr == keysig && option[NOLENGTH])        ACE_ERROR ((LM_ERROR,                    "Can't hash keyword %s with chosen key positions.\n%a",                    key,                    1));    }  // Terminate this string.  *ptr = '\0';  // Sort the KEYSIG items alphabetically.  sort (keysig, ptr - keysig);}List_Node::~List_Node (void){  delete [] this->key;  delete [] this->keysig;}#endif /* ACE_HAS_GPERF */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -