Last change
on this file since 121 was
117,
checked in by rosiere, 15 years ago
|
1) Platforms : add new organization for test
2) Load_Store_Unit : add array to count nb_check in store_queue
3) Issue_queue and Core_Glue : rewrite the issue network
4) Special_Register_Unit : add reset value to register CID
5) Softwares : add multicontext test
6) Softwares : add SPECINT
7) Softwares : add MiBench?
7) Read_queue : inhib access for r0
8) Change Core_Glue (network) - dont yet support priority and load balancing scheme
|
-
Property svn:executable set to
*
-
Property svn:keywords set to
Id
|
File size:
1.7 KB
|
Rev | Line | |
---|
[117] | 1 | /* +++Date last modified: 05-Jul-1997 */ |
---|
| 2 | |
---|
| 3 | /* |
---|
| 4 | ** A Pratt-Boyer-Moore string search, written by Jerry Coffin |
---|
| 5 | ** sometime or other in 1991. Removed from original program, and |
---|
| 6 | ** (incorrectly) rewritten for separate, generic use in early 1992. |
---|
| 7 | ** Corrected with help from Thad Smith, late March and early |
---|
| 8 | ** April 1992...hopefully it's correct this time. Revised by Bob Stout. |
---|
| 9 | ** |
---|
| 10 | ** This is hereby placed in the Public Domain by its author. |
---|
| 11 | ** |
---|
| 12 | ** 10/21/93 rdg Fixed bug found by Jeff Dunlop |
---|
| 13 | */ |
---|
| 14 | |
---|
| 15 | #include "stringsearch-search.h" |
---|
| 16 | #include <stddef.h> |
---|
| 17 | #include <string.h> |
---|
| 18 | #include <limits.h> |
---|
| 19 | |
---|
| 20 | static size_t table[UCHAR_MAX + 1]; |
---|
| 21 | static size_t len; |
---|
| 22 | static char *findme; |
---|
| 23 | |
---|
| 24 | /* |
---|
| 25 | ** Call this with the string to locate to initialize the table |
---|
| 26 | */ |
---|
| 27 | |
---|
| 28 | void init_search(const char *string) |
---|
| 29 | { |
---|
| 30 | size_t i; |
---|
| 31 | |
---|
| 32 | len = strlen(string); |
---|
| 33 | for (i = 0; i <= UCHAR_MAX; i++) /* rdg 10/93 */ |
---|
| 34 | table[i] = len; |
---|
| 35 | for (i = 0; i < len; i++) |
---|
| 36 | table[(unsigned char)string[i]] = len - i - 1; |
---|
| 37 | findme = (char *)string; |
---|
| 38 | } |
---|
| 39 | |
---|
| 40 | /* |
---|
| 41 | ** Call this with a buffer to search |
---|
| 42 | */ |
---|
| 43 | |
---|
| 44 | char *strsearch(const char *string) |
---|
| 45 | { |
---|
| 46 | register size_t shift; |
---|
| 47 | register size_t pos = len - 1; |
---|
| 48 | char *here; |
---|
| 49 | size_t limit=strlen(string); |
---|
| 50 | |
---|
| 51 | while (pos < limit) |
---|
| 52 | { |
---|
| 53 | while( pos < limit && |
---|
| 54 | (shift = table[(unsigned char)string[pos]]) > 0) |
---|
| 55 | { |
---|
| 56 | pos += shift; |
---|
| 57 | } |
---|
| 58 | if (0 == shift) |
---|
| 59 | { |
---|
| 60 | if (0 == strncmp(findme, |
---|
| 61 | here = (char *)&string[pos-len+1], len)) |
---|
| 62 | { |
---|
| 63 | return(here); |
---|
| 64 | } |
---|
| 65 | else pos++; |
---|
| 66 | } |
---|
| 67 | } |
---|
| 68 | return NULL; |
---|
| 69 | } |
---|
Note: See
TracBrowser
for help on using the repository browser.