ftp.nice.ch/pub/next/developer/resources/classes/misckit/MiscKit.1.10.0.s.gnutar.gz#/MiscKit/Examples/ScrollDir/NameCache.m

This is NameCache.m in view mode; [Download] [Up]

//=============================================================================
//
//		Copyright (C) 1995-1997 by Paul S. McCarthy and Eric Sunshine.
//				Written by Paul S. McCarthy and Eric Sunshine.
//							All Rights Reserved.
//
//		This notice may not be removed from this source code.
//
//		This object is included in the MiscKit by permission from the authors
//		and its use is governed by the MiscKit license, found in the file
//		"License.rtf" in the MiscKit distribution.	Please refer to that file
//		for a list of all applicable permissions and restrictions.
//
//=============================================================================
//-----------------------------------------------------------------------------
// NameCache.m
//
//		Data structure and routines for caching user names and group names.
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// $Id: NameCache.m,v 1.1 97/01/12 15:19:44 sunshine Exp $
// $Log:		NameCache.m,v $
// Revision 1.1	 97/01/12  15:19:44	 sunshine
// v28: Name cache.
// 
//-----------------------------------------------------------------------------
#import "NameCache.h"
#import <grp.h>
#import <pwd.h>
#import <stdio.h>
#import <mach/mach_init.h>		// vm_page_size
#import <objc/HashTable.h>

static NXZone* theZone = 0;


//-----------------------------------------------------------------------------
// store_string
//-----------------------------------------------------------------------------
static char const* store_string( char const* s )
	{
	char* t = 0;
	if (s != 0)
		t = NXCopyStringBufferFromZone( s, theZone );
	return t;
	}


//-----------------------------------------------------------------------------
// str_int
//-----------------------------------------------------------------------------
static char const* str_int( int x )
	{
	static char buff[ 32 ];
	sprintf( buff, "%d", x );
	return buff;
	}



//=============================================================================
// NAME CACHE
//=============================================================================
@implementation NameCache
//-----------------------------------------------------------------------------
// + initialize
//-----------------------------------------------------------------------------
+ (id)initialize
	{
	if (theZone == 0)
		theZone = NXCreateZone( vm_page_size, vm_page_size, NO );
	return self;
	}


//-----------------------------------------------------------------------------
// - init
//-----------------------------------------------------------------------------
- (id)init
	{
	[super init];
	table = [[HashTable alloc] initKeyDesc:"i" valueDesc:"*"];
	return self;
	}


//-----------------------------------------------------------------------------
// - resolve:
//-----------------------------------------------------------------------------
- (char const*)resolve:(int)x
	{
	[self subclassResponsibility:_cmd];
	return 0;
	}


//-----------------------------------------------------------------------------
// - store:
//-----------------------------------------------------------------------------
- (char const*)store:(int)ident
	{
	char const* name = store_string( [self resolve:ident] );
	[table insertKey:(void const*)ident value:(void*)name];
	return name;
	}


//-----------------------------------------------------------------------------
// - lookup:
//-----------------------------------------------------------------------------
- (char const*)lookup:(int)ident
	{
	char const* name = 0;
	if ([table isKey:(void const*)ident])
		name = [table valueForKey:(void const*)ident];
	else
		name = [self store:ident];
	return name;
	}

@end


//=============================================================================
// OWNER CACHE
//=============================================================================
@implementation OwnerCache
//-----------------------------------------------------------------------------
// - resolve:
//-----------------------------------------------------------------------------
- (char const*)resolve:(int)uid
	{
	char const* s = 0;
	struct passwd const* const pw = getpwuid( uid );
	if (pw != 0)
		s = pw->pw_name;
	else
		s = str_int( uid );
	return s;
	}


//-----------------------------------------------------------------------------
// + commonInstance
//-----------------------------------------------------------------------------
+ (id)commonInstance
	{
	static id obj = 0;
	if (obj == 0)
		obj = [[self allocFromZone:theZone] init];
	return obj;
	}
@end


//=============================================================================
// GROUP CACHE
//=============================================================================
@implementation GroupCache
//-----------------------------------------------------------------------------
// - resolve:
//-----------------------------------------------------------------------------
- (char const*)resolve:(int)gid
	{
	char const* s = 0;
	struct group const* const gr = getgrgid( gid );
	if (gr != 0)
		s = gr->gr_name;
	else
		s = str_int( gid );
	return s;
	}


//-----------------------------------------------------------------------------
// + commonInstance
//-----------------------------------------------------------------------------
+ (id)commonInstance
	{
	static id obj = 0;
	if (obj == 0)
		obj = [[self allocFromZone:theZone] init];
	return obj;
	}
@end

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.