windows-nt/Source/XPSP1/NT/com/rpc/runtime/mtrt/sset.cxx
2020-09-26 16:20:57 +08:00

127 lines
2.3 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1990 - 1999
//
// File: sset.cxx
//
//--------------------------------------------------------------------------
/* --------------------------------------------------------------------
File : sset.cxx
Title : Simple set implementation.
Description :
History :
-------------------------------------------------------------------- */
#include <precomp.hxx>
#include <sset.hxx>
#include <memory.h>
SIMPLE_SET::SIMPLE_SET (
)
{
cSetSlots = INITIALSETSLOTS;
iNextItem = 0;
SetSlots = InitialSetSlots;
memset(SetSlots, 0, sizeof(void *) * cSetSlots);
}
SIMPLE_SET::~SIMPLE_SET (
)
{
delete SetSlots;
}
int
SIMPLE_SET::Insert (
void * Item
)
{
int iSetSlots;
void * * NewSetSlots;
for (iSetSlots = 0; iSetSlots < cSetSlots; iSetSlots++)
{
if (SetSlots[iSetSlots] == 0)
{
SetSlots[iSetSlots] = Item;
return(0);
}
}
NewSetSlots = (void * *) new
unsigned char[sizeof(void *) * cSetSlots * 2];
if (NewSetSlots == 0)
return(-1);
memset(NewSetSlots, 0, sizeof(void *) * cSetSlots * 2);
memcpy((void *)NewSetSlots, (void *)SetSlots, sizeof(void *) * cSetSlots);
NewSetSlots[cSetSlots] = Item;
if (SetSlots != InitialSetSlots)
delete SetSlots;
SetSlots = NewSetSlots;
return(0);
}
int
SIMPLE_SET::Delete (
void * Item
)
{
int iSetSlots;
for (iSetSlots = 0; iSetSlots < cSetSlots; iSetSlots++)
{
if (SetSlots[iSetSlots] == Item)
{
SetSlots[iSetSlots] = 0;
return(0);
}
}
return(-1);
}
int
SIMPLE_SET::MemberP (
void * Item
)
{
int iSetSlots;
for (iSetSlots = 0; iSetSlots < cSetSlots; iSetSlots++)
{
if (SetSlots[iSetSlots] == Item)
{
return(1);
}
}
return(0);
}
void *
SIMPLE_SET::Next (
)
{
for ( ; iNextItem < cSetSlots; iNextItem++)
{
if (SetSlots[iNextItem])
{
iNextItem++;
return(SetSlots[iNextItem-1]);
}
}
iNextItem = 0;
return(0);
}