Add GNU LGPL headers to all .c .C and .h files
[oweals/cde.git] / cde / programs / dtmail / libDtMail / Common / ObjectKey.C
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /*
24  *+SNOTICE
25  *
26  *
27  *      $XConsortium: ObjectKey.C /main/4 1996/04/21 19:48:43 drk $
28  *
29  *      RESTRICTED CONFIDENTIAL INFORMATION:
30  *      
31  *      The information in this document is subject to special
32  *      restrictions in a confidential disclosure agreement bertween
33  *      HP, IBM, Sun, USL, SCO and Univel.  Do not distribute this
34  *      document outside HP, IBM, Sun, USL, SCO, or Univel wihtout
35  *      Sun's specific written approval.  This documment and all copies
36  *      and derivative works thereof must be returned or destroyed at
37  *      Sun's request.
38  *
39  *      Copyright 1993 Sun Microsystems, Inc.  All rights reserved.
40  *
41  *+ENOTICE
42  */
43
44 #include <assert.h>
45 #include <string.h>
46 #include <DtMail/ObjectKey.hh>
47
48 ObjectKey::ObjectKey(ObjectKeyType type)
49 {
50     _type = strdup(type);
51     return;
52 }
53
54 ObjectKey::ObjectKey(ObjectKey & key)
55 {
56     _type = strdup(key._type);
57 }
58
59 ObjectKey::~ObjectKey(void)
60 {
61     delete _type;
62 }
63
64 #ifdef DEAD_WOOD
65 int
66 ObjectKey::operator==(ObjectKey &)
67 {
68     assert(!"Pure virtual ObjectKey::operator== called");
69     return(0);
70 }
71
72 int
73 ObjectKey::operator!=(ObjectKey &)
74 {
75     assert(!"Pure virtual ObjectKey::operator!= called\n");
76     return(0);
77 }
78
79 int
80 ObjectKey::operator<(ObjectKey &)
81 {
82     assert(!"Pure virtual ObjectKey::operator< called\n");
83     return(0);
84 }
85
86 int
87 ObjectKey::operator<=(ObjectKey &)
88 {
89     assert(!"Pure virtual ObjectKey::operator<= called\n");
90     return(0);
91 }
92
93 int
94 ObjectKey::operator>(ObjectKey &)
95 {
96     assert(!"Pure virtual ObjectKey::operator> called\n");
97     return(0);
98 }
99
100 int
101 ObjectKey::operator>=(ObjectKey &)
102 {
103     assert(!"Pure virtual ObjectKey::operator>= called\n");
104     return(0);
105 }
106
107 HashVal
108 ObjectKey::hashValue(void)
109 {
110     assert(!"Pure virtual ObjectKey::hashValue called\n");
111     return(0);
112 }
113 #endif /* DEAD_WOOD */
114
115 HashVal
116 ObjectKey::genericHashValue(void * buf, int len)
117 {
118     short * sbuf = (short *)buf;
119     int slen = len / 2;
120     HashVal hash = 0;
121
122     // Sum the bytes, 2 at a time. We will deal with fractional
123     // stuff after we do the main buffer.
124     //
125     for (int cur = 0; cur < slen; cur++) {
126         hash ^= sbuf[cur];
127     }
128
129     // If the length is not even, then we need to add the last
130     // byte to the high order bits of the hash value.
131     //
132     if ((len % 2)) {
133         hash ^= ((char *)buf)[len - 1] << 8;
134     }
135
136     if (hash < 0) hash = -hash;
137     return(hash);
138 }