&{AMQP_MethodVersionMap.cpp}
/*
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 *
 */

/*
 * This file is auto-generated by ${GENERATOR} - do not modify.
 * Supported AMQP versions:
%{VLIST} *   ${major}-${minor}
 */

#include <sstream>

#include <AMQP_MethodVersionMap.h>

namespace qpid
{
namespace framing
{

AMQP_MethodVersionMap::AMQP_MethodVersionMap()
{
%{CLIST} ${mc_create_method_body_map_entry}	
}
	
AMQMethodBody* AMQP_MethodVersionMap::createMethodBody(u_int16_t classId, u_int16_t methodId, u_int8_t major, u_int8_t minor)
{
	iterator itr = find(createMapKey(classId, methodId, major, minor));
	if (itr == end())
	{
		std::stringstream ss;
		ss << "Unable to find MethodBody class for classId = " << classId << ", methodId = " <<
		    methodId << ", AMQ protocol version = " << major << "-" << minor << ".";
   		throw ProtocolVersionException(ss.str());
   	}
   	return (itr->second)(major, minor);		
}

u_int64_t AMQP_MethodVersionMap::createMapKey(u_int16_t classId, u_int16_t methodId, u_int8_t major, u_int8_t minor)
{
	return ((u_int64_t)classId<<48) + ((u_int64_t)methodId<<32) + ((u_int64_t)major<<16) + minor;
}

} /* namespace framing */
} /* namespace qpid */
