//-------------------------------------------------------------------------------------
// CpuTopology.h
// 
// CpuToplogy class declaration.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-------------------------------------------------------------------------------------
#pragma once
#ifndef CPU_TOPOLOGY_H
#define CPU_TOPOLOGY_H

#include "winlite.h"

class ICpuTopology;

//---------------------------------------------------------------------------------
// Name: CpuToplogy
// Desc: This class constructs a supported cpu topology implementation object on
//       initialization and forwards calls to it.  This is the Abstraction class
//       in the traditional Bridge Pattern.
//---------------------------------------------------------------------------------
class CpuTopology
{
public:
                CpuTopology( BOOL bForceCpuid = FALSE );
                ~CpuTopology();

    BOOL        IsDefaultImpl() const;
    DWORD       NumberOfProcessCores() const;
    DWORD       NumberOfSystemCores() const;
    DWORD_PTR   CoreAffinityMask( DWORD coreIdx ) const;

    void        ForceCpuid( BOOL bForce );
private:
    void        Destroy_();

    ICpuTopology* m_pImpl;
};

#endif  // CPU_TOPOLOGY_H