/*
 * Copyright (c) 2019, Infosys Ltd.
 *
 * 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 __MmeDetachProcedureCtxtManager__
#define __MmeDetachProcedureCtxtManager__
/******************************************************
 * mmeDetachProcedureCtxtManager.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 MmeDetachProcedureCtxt;
	class MmeDetachProcedureCtxtManager
	{
	public:
		/****************************************
		* MmeDetachProcedureCtxtManager
		*  constructor
		****************************************/
		MmeDetachProcedureCtxtManager(int numOfBlocks);
		
		/****************************************
		* MmeDetachProcedureCtxtManager
		*    Destructor
		****************************************/
		~MmeDetachProcedureCtxtManager();
		
		/******************************************
		 * allocateMmeDetachProcedureCtxt
		 *  allocate MmeDetachProcedureCtxt data block
		 ******************************************/
		MmeDetachProcedureCtxt* allocateMmeDetachProcedureCtxt();
		
		/******************************************
		 * deallocateMmeDetachProcedureCtxt
		 *  deallocate a MmeDetachProcedureCtxt data block
		 ******************************************/
		void deallocateMmeDetachProcedureCtxt(MmeDetachProcedureCtxt* MmeDetachProcedureCtxtp );
	
	private:
		cmn::memPool::MemPoolManager<MmeDetachProcedureCtxt> poolManager_m;
	};
};

#endif
		
		
