Updates to latest TommyDS library.

This commit is contained in:
Andrea Mazzoleni 2014-03-28 21:30:21 +01:00
parent 44ef039a13
commit e85be13d3b
4 changed files with 30 additions and 19 deletions

View file

@ -1,32 +1,41 @@
/*
* Copyright (C) 2011 Andrea Mazzoleni
* Copyright 2010 Andrea Mazzoleni. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY ANDREA MAZZOLENI AND CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL ANDREA MAZZOLENI OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include "cmdline/portable.h"
#include "cmdline/util.h" /* for safe_malloc */
#include "cmdline/util.h" /* for malloc_nofail() */
/* redefine the malloc for tommy use */
#define tommy_malloc malloc_nofail
#define tommy_free free
/* include tommy source */
#include "tommylist.c"
#include "tommyhash.c"
#include "tommyhashdyn.c"
#include "tommyarray.c"
#include "tommyarrayblk.c"
#include "tommyarrayblkof.c"
#include "tommylist.c"
#include "tommyhashdyn.c"

View file

@ -31,7 +31,8 @@
* This array is able to grow dynamically upon request.
*
* The resize involve an allocation of a new array block, without reallocating
* the already allocated memory, and then not increasing the heap fragmentation.
* the already allocated memory, and then not increasing the heap fragmentation,
* and minimize the space occupation.
* This means that the address of the allocated blocks never change.
*
* Allocated blocks are always of the same fixed size of 64 Ki pointers.
@ -88,7 +89,7 @@ tommy_inline void** tommy_arrayblk_ref(tommy_arrayblk* array, unsigned pos)
assert(pos < array->size);
ptr = tommy_array_get(&array->block, pos / TOMMY_ARRAYBLK_SIZE);
ptr = tommy_cast(void**, tommy_array_get(&array->block, pos / TOMMY_ARRAYBLK_SIZE));
return &ptr[pos % TOMMY_ARRAYBLK_SIZE];
}

View file

@ -90,7 +90,7 @@ tommy_inline void* tommy_arrayblkof_ref(tommy_arrayblkof* array, unsigned pos)
assert(pos < array->size);
base = tommy_array_get(&array->block, pos / TOMMY_ARRAYBLKOF_SIZE);
base = tommy_cast(unsigned char*, tommy_array_get(&array->block, pos / TOMMY_ARRAYBLKOF_SIZE));
return base + (pos % TOMMY_ARRAYBLKOF_SIZE) * array->element_size;
}

View file

@ -271,6 +271,7 @@ typedef void tommy_foreach_arg_func(void* arg, void* obj);
#if defined(_MSC_VER) && !defined(__cplusplus)
#include <intrin.h>
#pragma intrinsic(_BitScanReverse)
#pragma intrinsic(_BitScanForward)
#endif
/** \internal
@ -337,7 +338,7 @@ tommy_inline unsigned tommy_ilog2_u32(tommy_uint32_t value)
*
* If no bit is set, the result is undefined.
* \param value Value to scan. 0 is not allowed.
* \return The index of the least significan bit set.
* \return The index of the least significant bit set.
*/
tommy_inline unsigned tommy_ctz_u32(tommy_uint32_t value)
{