XRootD
Loading...
Searching...
No Matches
XrdOucHashVal.cc
Go to the documentation of this file.
1
/******************************************************************************/
2
/* */
3
/* X r d O u c H a s h V a l . c c */
4
/* */
5
/* (c) 2004 by the Board of Trustees of the Leland Stanford, Jr., University */
6
/* Produced by Andrew Hanushevsky for Stanford University under contract */
7
/* DE-AC02-76-SFO0515 with the Department of Energy */
8
/* */
9
/* This file is part of the XRootD software suite. */
10
/* */
11
/* XRootD is free software: you can redistribute it and/or modify it under */
12
/* the terms of the GNU Lesser General Public License as published by the */
13
/* Free Software Foundation, either version 3 of the License, or (at your */
14
/* option) any later version. */
15
/* */
16
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
17
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
18
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
19
/* License for more details. */
20
/* */
21
/* You should have received a copy of the GNU Lesser General Public License */
22
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
23
/* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
24
/* */
25
/* The copyright holder's institutional names and contributor's names may not */
26
/* be used to endorse or promote products derived from this software without */
27
/* specific prior written permission of the institution or contributor. */
28
/******************************************************************************/
29
30
#include "string.h"
31
#ifndef WIN32
32
#include "strings.h"
33
#endif
34
35
unsigned
long
XrdOucHashVal
(
const
char
*KeyVal)
36
{
extern
unsigned
long
XrdOucHashVal2
(
const
char
*,
int
);
37
return
XrdOucHashVal2
(KeyVal, strlen(KeyVal));
38
}
39
40
unsigned
long
XrdOucHashVal2
(
const
char
*KeyVal,
int
KeyLen)
41
{
int
j;
42
unsigned
long
*lp, lword, hval = 0;
43
int
hl =
sizeof
(hval);
44
45
// If name is shorter than the hash length, use the name.
46
//
47
if
(KeyLen <= hl)
48
{memcpy(&hval, KeyVal, (
size_t
)KeyLen);
49
return
hval;
50
}
51
52
// Compute the length of the name and develop starting hash.
53
//
54
hval = KeyLen;
55
j = KeyLen % hl; KeyLen /= hl;
56
if
(j)
57
{memcpy(&lword, KeyVal, (
size_t
)hl);
58
hval ^= lword;
59
}
60
lp = (
unsigned
long
*)&KeyVal[j];
61
62
// Compute and return the full hash.
63
//
64
while
(KeyLen--)
65
{memcpy(&lword, lp++, (
size_t
)hl);
66
hval ^= lword;
67
}
68
return
(hval ? hval : 1);
69
}
XrdOucHashVal2
unsigned long XrdOucHashVal2(const char *KeyVal, int KeyLen)
Definition
XrdOucHashVal.cc:40
XrdOucHashVal
unsigned long XrdOucHashVal(const char *KeyVal)
Definition
XrdOucHashVal.cc:35
XrdOuc
XrdOucHashVal.cc
Generated by
1.12.0