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.6.10.1 2003/08/21 10:49:04 jari Exp $
00009  * $Date: 2003/08/21 10:49:04 $
00010  * $Revision: 1.6.10.1 $
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     if (aKey)
00047     {
00048         INT32 keyLen = XFcStringToolkit::getLength(aKey);
00049         if (keyLen < XFUSTRINGKEY_DATASIZE - 1)
00050             mUsingData = 1;
00051         if (mUsingData)
00052         {
00053             mKey = mData;
00054             INT a;
00055             for (a = 0; a < keyLen; ++a)
00056                 mData[a] = aKey[a];
00057             mData[keyLen] = 0;
00058         }
00059         else
00060         {
00061             mKey = XFcStringToolkit::copy(aKey);
00062         }
00063         mHashCode = 0;
00064         INT32 pos;
00065         for (pos = 0; pos < keyLen; pos++)
00066             mHashCode = 7 * mHashCode + aKey[pos];
00067     }
00068     else
00069     {
00070         mKey = NULL;
00071     }
00072 }
00073 
00074 
00075 XFuStringKey::~XFuStringKey()
00076 {
00077     if (!mUsingData)
00078         delete[] mKey;
00079 }
00080 
00081 
00082 UINT32 XFcHashtableHash<XFuStringKey>::operator() (const XFuStringKey key) const
00083 {
00084     return key.mHashCode;
00085 }
00086 
00087 
00088 INT XFcHashtableEQ<XFuStringKey>::operator() (const XFuStringKey key1, const XFuStringKey key2) const
00089 {
00090     return !XFcStringToolkit::compare(key1.mKey, key2.mKey);
00091 }
00092 
00093 

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