Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1999, Microsoft Corp. All rights reserved.
//
// FILE
//
// attrdnry.cpp
//
// SYNOPSIS
//
// Defines the class AttributeDictionary.
//
// MODIFICATION HISTORY
//
// 02/04/2000 Original version.
// 04/17/2000 Port to new dictionary API.
//
///////////////////////////////////////////////////////////////////////////////
#include <proxypch.h>
#include <iastlutl.h>
#include <iasutil.h>
#include <attrdnry.h>
///////////////////////////////////////////////////////////////////////////////
//
//
// Various functions used for defining the indices.
//
///////////////////////////////////////////////////////////////////////////////
ULONG WINAPI HashById( const AttributeDefinition& def ) throw () { return def.id; }
BOOL WINAPI EqualById( const AttributeDefinition& def1, const AttributeDefinition& def2 ) throw () { return def1.id == def2.id; }
ULONG WINAPI HashByVendorInfo( const AttributeDefinition& def ) throw () { return def.vendorID | def.vendorType; }
BOOL WINAPI EqualByVendorInfo( const AttributeDefinition& def1, const AttributeDefinition& def2 ) throw () { return def1.vendorID == def2.vendorID && def1.vendorType == def2.vendorType; }
BOOL WINAPI FilterByVendorInfo( const AttributeDefinition& def ) throw () { return def.vendorID != 0; }
AttributeDictionary::~AttributeDictionary() throw () { delete[] first; }
HRESULT AttributeDictionary::FinalConstruct() throw () { try { initialize(); } CATCH_AND_RETURN();
return S_OK; }
void AttributeDictionary::initialize() { // Names of various columns in the dictionary.
const PCWSTR COLUMNS[] = { L"ID", L"Syntax", L"VendorID", L"VendorTypeID", NULL };
IASTL::IASDictionary dnary(COLUMNS);
using _com_util::CheckError;
// Allocate memory to hold the definitions.
first = last = new AttributeDefinition[dnary.getNumRows()];
// Iterate through the dictionary and process each definition.
while (dnary.next()) { // Process each database column.
last->id = (ULONG)dnary.getLong(0); last->syntax = (ULONG)dnary.getLong(1); last->vendorID = (ULONG)dnary.getLong(2); last->vendorType = (ULONG)dnary.getLong(3);
++last; }
/////////
// Initialize the indices.
/////////
byID.create( first, last, HashById, EqualById );
byVendorInfo.create( first, last, HashByVendorInfo, EqualByVendorInfo, FilterByVendorInfo ); }
const AttributeDefinition* AttributeDictionary::findByID(ULONG id) const throw () { AttributeDefinition key; key.id = id; return byID.find(key); }
const AttributeDefinition* AttributeDictionary::findByVendorInfo( ULONG vendorID, ULONG vendorType ) const throw () { AttributeDefinition key; key.vendorID = vendorID; key.vendorType = vendorType; return byVendorInfo.find(key); }
|