Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members Related Pages

# XFuStringKey.cpp

Go to the documentation of this file.

    00001 /*! \file
    00002  * X-Forge Util <br>
    00003  * Copyright 2000-2003 Fathammer Ltd
    00004  *
    00005  * \brief XFuStringKey.cpp is the implementation file for the
    00006  * XFuStringKey class. For more information, see XFuStringKey.h.
    00007  *
    00008  * $Id: XFuStringKey.cpp,v 1.9 2003/09/29 13:47:35 jari Exp $
    00009  * $Date: 2003/09/29 13:47:35 $
    00010  * $Revision: 1.9 $
    00011  */
    00012
    00013 #include <xfcore/XFcCore.h>
    00014 #include <xfutil/XFuStringKey.h>
    00015
    00016
    00017 XFuStringKey::XFuStringKey()
    00018 {
    00019     mKey = NULL;
    00020     mHashCode = 0;
    00021     mUsingData = 0;
    00022 }
    00023
    00024
    00025 XFuStringKey::XFuStringKey(const CHAR *aKey)
    00026 {
    00027     init(aKey);
    00028 }
    00029
    00030
    00031 XFuStringKey::XFuStringKey(const XFuStringKey &aKey)
    00032 {
    00033     init(aKey.mKey);
    00034 }
    00035
    00036
    00037 XFuStringKey & XFuStringKey::operator=(const XFuStringKey &aKey)
    00038 {
    00039     init(aKey.mKey);
    00040     return *this;
    00041 }
    00042
    00043
    00044 void XFuStringKey::init(const CHAR *aKey)
    00045 {
    00046     mKey = NULL;
    00047     mHashCode = 0;
    00048     mUsingData = 0;
    00049
    00050     if (aKey)
    00051     {
    00052         INT32 keyLen = XFcStringToolkit::getLength(aKey);
    00053         if (keyLen < XFUSTRINGKEY_DATASIZE - 1)
    00054             mUsingData = 1;
    00055         if (mUsingData)
    00056         {
    00057             mKey = mData;
    00058             INT a;
    00059             for (a = 0; a < keyLen; ++a)
    00060                 mData[a] = aKey[a];
    00061             mData[keyLen] = 0;
    00062         }
    00063         else
    00064         {
    00065             mKey = XFcStringToolkit::copy(aKey);
    00066         }
    00067         mHashCode = 0;
    00068         INT32 pos;
    00069         for (pos = 0; pos < keyLen; pos++)
    00070             mHashCode = 7 * mHashCode + aKey[pos];
    00071     }
    00072     else
    00073     {
    00074         mKey = NULL;
    00075     }
    00076 }
    00077
    00078
    00079 XFuStringKey::~XFuStringKey()
    00080 {
    00081     if (!mUsingData)
    00082         delete[] mKey;
    00083 }
    00084
    00085
    00086 UINT32 XFcHashtableHash<XFuStringKey>::operator() (const XFuStringKey key) const
    00087 {
    00088     return key.mHashCode;
    00089 }
    00090
    00091
    00092 INT XFcHashtableEQ<XFuStringKey>::operator() (const XFuStringKey key1, const XFuStringKey key2) const
    00093 {
    00094     return !XFcStringToolkit::compare(key1.mKey, key2.mKey);
    00095 }
    00096
    00097

|  | X-Forge Documentation Confidential Copyright © 2002-2003 Fathammer |  | Documentation generated with doxygen by Dimitri van Heesch