Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - #include <cstdio>
 - #include <cstring>
 - #include <cstdlib>
 - #include <fcntl.h>
 - #include <unistd.h>
 - //#include "socket.h"
 - #define STRINGHASH_ALLOC_INCREMENT 20
 - void raise(const char* msg) {
 - printf("\n\n%s\n\n", msg);
 - exit(-1);
 - }
 - class StringHashHelper {
 - public:
 - StringHashHelper() {
 - data = NULL;
 - }
 - StringHashHelper(const char* input) {
 - setData(input);
 - }
 - ~StringHashHelper() {
 - if(data != NULL) {delete [] data;}
 - }
 - operator const char*() {
 - return (const char*)data;
 - }
 - void operator=(const char* input) {
 - setData(input);
 - }
 - private:
 - char* data;
 - void setData(const char* input) {
 - if(data != NULL) {delete [] data;}
 - int inLen = strlen(input) + 1;
 - data = new char[inLen];
 - if(data == NULL) {raise("Allocation failure in StringHashHelper::operator=()");}
 - strcpy(data, input);
 - }
 - };
 - class StringHash {
 - public:
 - StringHash() {
 - allocSize = STRINGHASH_ALLOC_INCREMENT;
 - hashSize = 0;
 - hkeys = new char*[allocSize];
 - if(hkeys == NULL) {raise("Allocation failure in StringHash::StringHash() (1)");}
 - values = new StringHashHelper[allocSize];
 - if(values == NULL) {raise("Allocation failure in StringHash::StringHash() (2)");}
 - }
 - ~StringHash() {
 - for(int i = 0; i < hashSize; ++i) {delete [] hkeys[i];}
 - delete [] hkeys;
 - delete [] values;
 - }
 - StringHashHelper &operator[](const char* key) {
 - for(int i = 0; i < hashSize; ++i) {
 - if(strcmp(hkeys[i], key) == 0) {return values[i];}
 - }
 - if(hashSize == allocSize) {
 - allocSize += STRINGHASH_ALLOC_INCREMENT;
 - char** tempKeys = new char*[allocSize];
 - if(tempKeys == NULL) {raise("Allocation failure in StringHash::addEntry() (1)");}
 - StringHashHelper* tempVals = new StringHashHelper[allocSize];
 - if(tempVals == NULL) {raise("Allocation failure in StringHash::addEntry() (2)");}
 - int tkl;
 - for(int i = 0; i < hashSize; ++i) {
 - tempKeys[i] = hkeys[i];
 - tempVals[i] = (const char*)values[i];
 - }
 - delete [] hkeys;
 - hkeys = tempKeys;
 - delete [] values;
 - values = tempVals;
 - }
 - int keyLen = strlen(key) + 1;
 - hkeys[hashSize] = new char[keyLen];
 - if(hkeys[hashSize] == NULL) {raise("Allocation failure in StringHash::addEntry() (3)");}
 - strcpy(hkeys[hashSize], key);
 - return values[hashSize++];
 - }
 - const char** keys() {
 - return (const char**)hkeys;
 - }
 - int size() {
 - return hashSize;
 - }
 - void show() {
 - for(int i = 0; i < hashSize; ++i) {
 - printf("%i) \"", i);
 - printf(hkeys[i]);
 - printf("\" -> \"");
 - printf(values[i]);
 - printf("\"\n");
 - }
 - }
 - private:
 - int allocSize;
 - int hashSize;
 - char** hkeys;
 - StringHashHelper* values;
 - };
 - int main() {
 - StringHash hash;
 - hash["a"] = "This is a test.\n";
 - hash["b"] = "This is a second line.\n";
 - hash["c"] = "The test has three lines.\n";
 - printf(hash["a"]);
 - printf(hash["c"]);
 - printf(hash["b"]);
 - printf(hash["a"]);
 - return 0;
 - }
 
Advertisement
 
                    Add Comment                
                
                        Please, Sign In to add comment