JBoolean
JMemoryManager::RecordFilter::Match
	(
	const JMMRecord& record
	)
	const
{
	JBoolean match = kJTrue;

	if (!includeInternal && record.IsManagerMemory())
		{
		match = kJFalse;
		}

	if (record.GetSize() < minSize)
		{
		match = kJFalse;
		}

	const JSize newFileLength = strlen(record.GetNewFile());
	if (match && fileName != NULL && newFileLength == fileName->GetLength())
		{
		if (record.GetNewFile() != *fileName)
			{
			match = kJFalse;
			}
		}
	else if (match && fileName != NULL)
		{
		const JCharacter *s1, *s2;
		JSize l1, l2;
		if (newFileLength > fileName->GetLength())
			{
			s1 = record.GetNewFile();
			l1 = newFileLength;
			s2 = *fileName;
			l2 = fileName->GetLength();
			}
		else
			{
			s1 = *fileName;
			l1 = fileName->GetLength();
			s2 = record.GetNewFile();
			l2 = newFileLength;
			}

		if (*(s1 + l1 - l2 - 1) != ACE_DIRECTORY_SEPARATOR_CHAR ||
			strcmp(s1 + l1 - l2, s2) != 0)
			{
			match = kJFalse;
			}
		}

	return match;
}
void
JMMErrorPrinter::HandleMultipleAllocation
	(
	const JMMRecord& thisRecord,
	const JMMRecord& firstRecord
	)
{
	if (itsPrintErrorsFlag)
		{
		cout << "*** memory error: item allocated as "
		     << thisRecord.DeleteTypeName() << " at\n                     "
		     << thisRecord.GetNewFile() << ":" << thisRecord.GetNewLine()
		     << "\n                  was first allocated as "
		     << firstRecord.DeleteTypeName() << " at\n                     "
		     << firstRecord.GetNewFile() << ":" << firstRecord.GetNewLine()
		     << endl;
		}
}
void
JMMErrorPrinter::HandleArrayDeletedAsObject
	(
	const JMMRecord& record
	)
{
	if (itsPrintErrorsFlag)
		{
		cout << "*** memory error: Block allocated as array at\n                     "
		     << record.GetNewFile() << ":" << record.GetNewLine()
		     << "\n                  was deleted as object at\n                     "
		     << record.GetDeleteFile()
		     << ":" << record.GetDeleteLine() << endl;
		}
}