2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
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)
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
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
24 * $XConsortium: data_t.cc /main/4 1996/07/18 14:31:45 drk $
26 * Copyright (c) 1993 HAL Computer Systems International, Ltd.
27 * All rights reserved. Unpublished -- rights reserved under
28 * the Copyright Laws of the United States. USE OF A COPYRIGHT
29 * NOTICE IS PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION
32 * THIS SOFTWARE CONTAINS CONFIDENTIAL INFORMATION AND TRADE
33 * SECRETS OF HAL COMPUTER SYSTEMS INTERNATIONAL, LTD. USE,
34 * DISCLOSURE, OR REPRODUCTION IS PROHIBITED WITHOUT THE
35 * PRIOR EXPRESS WRITTEN PERMISSION OF HAL COMPUTER SYSTEMS
38 * RESTRICTED RIGHTS LEGEND
39 * Use, duplication, or disclosure by the Government is subject
40 * to the restrictions as set forth in subparagraph (c)(l)(ii)
41 * of the Rights in Technical Data and Computer Software clause
42 * at DFARS 252.227-7013.
44 * HAL COMPUTER SYSTEMS INTERNATIONAL, LTD.
51 #include "dynhash/data_t.h"
53 //memory_pool data_t::data_t_space_pool;
55 extern memory_pool g_memory_pool;
58 atoi_larson* data_t::larson_convertor_ptr;
59 atoi_pearson* data_t::pearson_convertor_ptr;
61 atoi_larson data_t::larson_convertor;
62 atoi_pearson data_t::pearson_convertor(SHRT_MAX, 256);
65 data_t::data_t(data_t& d)
73 key.int_key = d.key.int_key ;
79 int sz = strlen(d.key.str_key);
80 key.str_key = new char[sz+1];
81 *((char *) memcpy(key.str_key, d.key.str_key, sz) + sz) = '\0';
94 data_t::data_t(int t, voidPtr d) : dt(d)
101 data_t::data_t(const char* str, int sz, voidPtr d) : dt(d)
103 flag = data_t::STRING;
105 key.str_key = new char[sz+1];
108 int len = MIN(strlen(str), (unsigned int) sz);
109 *((char *) memcpy(key.str_key, str, len) + len) = '\0';
121 return 2 + strlen(form("%d", key.int_key)) + sizeof(dt);
124 return 2 + strlen(key.str_key) + sizeof(dt);
130 int data_t::operator==(data_t& d)
132 if ( flag != d.flag ) {
140 throw(stringException("data_t type mismatches in operator==()"));
145 return key.int_key == d.key.int_key ;
147 return strcmp(key.str_key, d.key.str_key) == 0 ;
149 throw(stringException("VOID type in operator==()"));
155 data_t& data_t::operator =(data_t& d)
162 key.int_key = d.key.int_key ;
168 unsigned int d_sz = strlen(d.key.str_key);
169 if ( strlen(key.str_key) < d_sz ) {
171 key.str_key = new char[d_sz+1];
173 *((char *) memcpy(key.str_key, d.key.str_key, d_sz) + d_sz) = '\0';
197 static char buf[BUFSIZ];
199 istream& operator >>(istream& i, data_t& d)
201 if ( !i.getline(buf, BUFSIZ) || buf[0] == '\n' )
204 char* key_ptr = strchr(buf, '\t');
205 char* voidPtr_ptr = strrchr(buf, '\t');
213 //////////////////////////
215 //////////////////////////
216 if ( d.flag == data_t::STRING )
217 delete d.key.str_key;
219 d.flag = (data_t::flag_type)atoi(buf);
220 d.dt = (voidPtr)(size_t)atoi(voidPtr_ptr);
222 if ( d.flag == data_t::INT )
223 d.key.int_key = atoi(key_ptr);
225 if ( d.flag == data_t::STRING ) {
226 int sz = strlen(key_ptr);
227 d.key.str_key = new char[sz+1];
228 *((char *) memcpy(d.key.str_key, key_ptr, sz) + sz) = '\0';
234 ostream& operator <<(ostream& o, data_t& d)
236 if ( d.flag == data_t::VOID )
252 o << " " << (long)(d.dt);
256 Boolean data_t::binaryIn(buffer& buf)
259 flag = (data_t::flag_type)c;
269 buf.get(*(unsigned int*)&key.int_key);
275 key.str_key = new char[sz+1];
276 buf.get(key.str_key, sz);
286 Boolean data_t::binaryOut(buffer& buf)
296 buf.put((unsigned int)key.int_key);
300 sz = strlen(key.str_key);
303 buf.put(key.str_key, sz);
312 ostream& data_t::asciiOut(ostream& o, print_func_ptr_t print_f)
318 int data_t::bucket_num(int k, int p, int M)
322 return abs( key.int_key * k ) % p % M ;
324 //return abs( larson_convertor.atoi(key.str_key) * k ) % p % M ;
325 //return abs( pearson_convertor.atoi(key.str_key, strlen(key.str_key), k
326 return abs( pearson_convertor.atoi(key.str_key, strlen(key.str_key), k
329 throw(stringException("VOID type in bucket_num()"));
333 int data_t::slot_num(int k, int rotate, int prime, int M )
338 x = ( abs( k * key.int_key ) % prime + rotate ) % M ;
341 x = ( abs( pearson_convertor.atoi(key.str_key, strlen(key.str_key), k, prime)) + rotate ) % M ;
344 throw(stringException("VOID type in slot_num()"));
349 void* data_t::operator new( size_t x )
351 //return (void*)data_t_space_pool.alloc(x);
352 return (void*)g_memory_pool.alloc(x);
355 void data_t::operator delete( void* ptr )
357 //data_t_space_pool.free((char*)ptr);
358 g_memory_pool.free((char*)ptr);