ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtutil.C
Revision: 1.12
Committed: Sat Jan 8 10:06:48 2011 UTC (13 years, 4 months ago) by sf-exg
Content type: text/plain
Branch: MAIN
Changes since 1.11: +2 -1 lines
Log Message:
Revert change from 2007-08-27.

File Contents

# Content
1 /*----------------------------------------------------------------------*
2 * File: rxvtutil.C
3 *----------------------------------------------------------------------*
4 *
5 * All portions of code are copyright by their respective author/s.
6 * Copyright (c) 2004-2006 Marc Lehmann <pcg@goof.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 *----------------------------------------------------------------------*/
22
23 #include <cstdlib>
24 #include <cstring>
25 #include <inttypes.h>
26
27 #include "rxvtutil.h"
28
29 #if !HAVE_GCC_BUILTINS
30 int rxvt_ctz (unsigned int x) CONST
31 {
32 int r = 0;
33
34 x &= -x; // this isolates the lowest bit
35
36 if (x & 0xaaaaaaaa) r += 1;
37 if (x & 0xcccccccc) r += 2;
38 if (x & 0xf0f0f0f0) r += 4;
39 if (x & 0xff00ff00) r += 8;
40 if (x & 0xffff0000) r += 16;
41
42 return r;
43 }
44
45 int rxvt_popcount (unsigned int x) CONST
46 {
47 x -= (x >> 1) & 0x55555555;
48 x = ((x >> 2) & 0x33333333) + (x & 0x33333333);
49 x = ((x >> 4) + x) & 0x0f0f0f0f;
50 x *= 0x01010101;
51
52 return x >> 24;
53 }
54 #endif
55
56 void *
57 zero_initialized::operator new (size_t s)
58 {
59 void *p = malloc (s);
60
61 memset (p, 0, s);
62 return p;
63 }
64
65 void
66 zero_initialized::operator delete (void *p, size_t s)
67 {
68 free (p);
69 }
70
71 static void *temp_buf;
72 static uint32_t temp_len;
73
74 void *
75 rxvt_temp_buf (int len)
76 {
77 if (len > temp_len)
78 {
79 free (temp_buf);
80 temp_buf = malloc (len);
81 temp_len = len;
82 }
83
84 return temp_buf;
85 }
86
87