/*
 * Copyright 2019-present, Infosys Limited.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef __MmeProcedureCtxtManager__
#define __MmeProcedureCtxtManager__
/******************************************************
* mmeProcedureCtxtManager.h
 * This is an auto generated file.
 * Please do not edit this file.
 * All edits to be made through template source file
 * <TOP-DIR/scripts/SMCodeGen/templates/ctxtManagerTmpls/blockPoolManager.h.tt>
 ***************************************/
#include "memPoolManager.h"

namespace mme
{
	class MmeProcedureCtxt;
	class MmeProcedureCtxtManager
	{
	public:
		/****************************************
		* MmeProcedureCtxtManager
		*  constructor
		****************************************/
		MmeProcedureCtxtManager(int numOfBlocks);
		
		/****************************************
		* MmeProcedureCtxtManager
		*    Destructor
		****************************************/
		~MmeProcedureCtxtManager();
		
		/******************************************
		 * allocateMmeProcedureCtxt
		 *  allocate MmeProcedureCtxt data block
		 ******************************************/
		MmeProcedureCtxt* allocateMmeProcedureCtxt();
		
		/******************************************
		 * deallocateMmeProcedureCtxt
		 *  deallocate a MmeProcedureCtxt data block
		 ******************************************/
		void deallocateMmeProcedureCtxt(MmeProcedureCtxt* MmeProcedureCtxtp );
	
	private:
		cmn::memPool::MemPoolManager<MmeProcedureCtxt> poolManager_m;
	};
};

#endif
		
		
