The SEARCH program is implemented as a class object Search. The class Search contains:
The service program is composed of the following files:
The class and function declarations are placed into a separate header file, search.h, as shown in the following figure:
Figure 5. Example of Header File (search.h)
// header file search.h
// contains declarations for class Search, and inlined function
// definitions
#include <iostream.h>
class Search {
private:
char skippat[256];
char * needle_p;
int needle_size;
public:
// Constructors
Search( unsigned char * needle, int size);
Search ( unsigned char * needle);
Search ( char * needle);
//Destructor
~Search () { delete needle_p;}
//Overloaded member functions
unsigned int where ( char * haystack) {
return where (haystack, strlen(haystack));
}
unsigned int where ( unsigned char * haystack) {
return where (haystack, strlen((const char *)haystack));
}
unsigned int where ( char * haystack, int size) {
return where ( (unsigned char *) haystack, size);
}
unsigned int where ( unsigned char * haystack, int size);
};
|
If the definitions for the member functions of class Search are not inlined in the class declaration, they are contained in two separate files:
These files are shown in the following figures:
Figure 6. Source File that Contains Constructor Definitions for the Search Class
// source file search.cpp
// contains the definitions for the constructors for class Search
#include "search.h"
Search::Search( unsigned char * needle, int size)
: needle_size(size) , needle_p ( new char [size])
{
memset (skippat, needle_size, 256);
for (unsigned int i=0; i<size; ++i) {
skippat [needle [i]] = size -i-1;
}
memcpy (needle_p, needle, needle_size);
}
Search::Search ( unsigned char * needle) {
needle_size = strlen( (const char *)needle) ;
needle_p = new char [needle_size];
memset (skippat, needle_size, 256);
for (unsigned int i=0; i<needle_size; ++i) {
skippat [needle [i]] = needle_size -i-1;
}
memcpy(needle_p, needle, needle_size);
}
Search::Search ( char * needle) {
needle_size = strlen( needle) ;
needle_p = new char [needle_size];
memset (skippat,needle_size, 256);
for (unsigned int i=0; i<needle_size; ++i) {
skippat [needle [i]] = needle_size -i-1;
}
memcpy(needle_p, needle, needle_size);
}
|
Figure 7. File that Contains the Member Function Definition for the Search Class
// where.cpp
// contains definition of overloaded member function for class Search
#include "search.h"
unsigned int Search:: where ( unsigned char * haystack, int size)
{ unsigned int i, t;
int j;
for ( i= needle_size-1, j = needle_size-1; j >= 0; --i, --j ){
while ( haystack[i] != needle_p[j]) {
t = skippat [ haystack [i]] ;
i += (needle_size - j > t) ? needle_size - j : t ;
if (i >= size)
return size;
j = needle_size - 1;
}
}
return ++i;
}
The modules that result from the compilation of these source files, SEARCH and WHERE, are bound into a service program, SERVICE1.
(C) Copyright IBM Corporation 1992, 2005. All Rights Reserved.