Alien-Judy
view release on metacpan or search on metacpan
src/judy-1.0.5/src/JudyCommon/JudyDecascade.c view on Meta::CPAN
// Copyright (C) 2000 - 2002 Hewlett-Packard Company
//
// This program is free software; you can redistribute it and/or modify it
// under the term of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 2 of the License, or (at your
// option) any later version.
//
// 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 Lesser General Public License
// for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program; if not, write to the Free Software Foundation,
// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// _________________
// @(#) $Revision: 4.25 $ $Source: /judy/src/JudyCommon/JudyDecascade.c $
//
// "Decascade" support functions for JudyDel.c: These functions convert
// smaller-index-size leaves to larger-index-size leaves, and also, bitmap
// leaves (LeafB1s) to Leaf1s, and some types of branches to smaller branches
// at the same index size. Some "decascading" occurs explicitly in JudyDel.c,
// but rare or large subroutines appear as functions here, and the overhead to
// call them is negligible.
//
// Compile with one of -DJUDY1 or -DJUDYL. Note: Function names are converted
// to Judy1 or JudyL specific values by external #defines.
#if (! (defined(JUDY1) || defined(JUDYL)))
#error: One of -DJUDY1 or -DJUDYL must be specified.
#endif
#ifdef JUDY1
#include "Judy1.h"
#endif
#ifdef JUDYL
#include "JudyL.h"
#endif
#include "JudyPrivate1L.h"
DBGCODE(extern void JudyCheckSorted(Pjll_t Pjll, Word_t Pop1, long IndexSize);)
// ****************************************************************************
// __ J U D Y C O P Y 2 T O 3
//
// Copy one or more 2-byte Indexes to a series of 3-byte Indexes.
FUNCTION static void j__udyCopy2to3(
uint8_t * PDest, // to where to copy 3-byte Indexes.
uint16_t * PSrc, // from where to copy 2-byte indexes.
Word_t Pop1, // number of Indexes to copy.
Word_t MSByte) // most-significant byte, prefix to each Index.
{
Word_t Temp; // for building 3-byte Index.
assert(Pop1);
do {
Temp = MSByte | *PSrc++;
JU_COPY3_LONG_TO_PINDEX(PDest, Temp);
PDest += 3;
} while (--Pop1);
} // j__udyCopy2to3()
#ifdef JU_64BIT
// ****************************************************************************
// __ J U D Y C O P Y 3 T O 4
//
// Copy one or more 3-byte Indexes to a series of 4-byte Indexes.
FUNCTION static void j__udyCopy3to4(
uint32_t * PDest, // to where to copy 4-byte Indexes.
uint8_t * PSrc, // from where to copy 3-byte indexes.
Word_t Pop1, // number of Indexes to copy.
( run in 1.357 second using v1.01-cache-2.11-cpan-e1769b4cff6 )