/*
 * Copyright (c) 2019, 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 __MmeSvcReqProcedureCtxtManager__
#define __MmeSvcReqProcedureCtxtManager__
/******************************************************
* mmeSvcReqProcedureCtxtManager.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 MmeSvcReqProcedureCtxt;
	class MmeSvcReqProcedureCtxtManager
	{
	public:
		/****************************************
		* MmeSvcReqProcedureCtxtManager
		*  constructor
		****************************************/
		MmeSvcReqProcedureCtxtManager(int numOfBlocks);
		
		/****************************************
		* MmeSvcReqProcedureCtxtManager
		*    Destructor
		****************************************/
		~MmeSvcReqProcedureCtxtManager();
		
		/******************************************
		 * allocateMmeSvcReqProcedureCtxt
		 *  allocate MmeSvcReqProcedureCtxt data block
		 ******************************************/
		MmeSvcReqProcedureCtxt* allocateMmeSvcReqProcedureCtxt();
		
		/******************************************
		 * deallocateMmeSvcReqProcedureCtxt
		 *  deallocate a MmeSvcReqProcedureCtxt data block
		 ******************************************/
		void deallocateMmeSvcReqProcedureCtxt(MmeSvcReqProcedureCtxt* MmeSvcReqProcedureCtxtp );
	
	private:
		cmn::memPool::MemPoolManager<MmeSvcReqProcedureCtxt> poolManager_m;
	};
};

#endif
		
		
