/* Code generated by IfcQuery EXPRESS generator, www.ifcquery.com */

#include <sstream>
#include <limits>
#include <map>
#include "ifcpp/reader/ReaderUtil.h"
#include "ifcpp/writer/WriterUtil.h"
#include "ifcpp/model/BasicTypes.h"
#include "ifcpp/model/BuildingException.h"
#include "ifcpp/IFC4/include/IfcLaborResourceTypeEnum.h"

// TYPE IfcLaborResourceTypeEnum = ENUMERATION OF	(ADMINISTRATION	,CARPENTRY	,CLEANING	,CONCRETE	,DRYWALL	,ELECTRIC	,FINISHING	,FLOORING	,GENERAL	,HVAC	,LANDSCAPING	,MASONRY	,PAINTING	,PAVING	,PLUMBING	,ROOFING	,SITEGRADING	,STEELWORK	,SURVEYING	,USERDEFINED	,NOTDEFINED);
IfcLaborResourceTypeEnum::~IfcLaborResourceTypeEnum() {}
shared_ptr<BuildingObject> IfcLaborResourceTypeEnum::getDeepCopy( BuildingCopyOptions& options )
{
	shared_ptr<IfcLaborResourceTypeEnum> copy_self( new IfcLaborResourceTypeEnum() );
	copy_self->m_enum = m_enum;
	return copy_self;
}
void IfcLaborResourceTypeEnum::getStepParameter( std::stringstream& stream, bool is_select_type ) const
{
	if( is_select_type ) { stream << "IFCLABORRESOURCETYPEENUM("; }
	switch( m_enum )
	{
		case ENUM_ADMINISTRATION:	stream << ".ADMINISTRATION."; break;
		case ENUM_CARPENTRY:	stream << ".CARPENTRY."; break;
		case ENUM_CLEANING:	stream << ".CLEANING."; break;
		case ENUM_CONCRETE:	stream << ".CONCRETE."; break;
		case ENUM_DRYWALL:	stream << ".DRYWALL."; break;
		case ENUM_ELECTRIC:	stream << ".ELECTRIC."; break;
		case ENUM_FINISHING:	stream << ".FINISHING."; break;
		case ENUM_FLOORING:	stream << ".FLOORING."; break;
		case ENUM_GENERAL:	stream << ".GENERAL."; break;
		case ENUM_HVAC:	stream << ".HVAC."; break;
		case ENUM_LANDSCAPING:	stream << ".LANDSCAPING."; break;
		case ENUM_MASONRY:	stream << ".MASONRY."; break;
		case ENUM_PAINTING:	stream << ".PAINTING."; break;
		case ENUM_PAVING:	stream << ".PAVING."; break;
		case ENUM_PLUMBING:	stream << ".PLUMBING."; break;
		case ENUM_ROOFING:	stream << ".ROOFING."; break;
		case ENUM_SITEGRADING:	stream << ".SITEGRADING."; break;
		case ENUM_STEELWORK:	stream << ".STEELWORK."; break;
		case ENUM_SURVEYING:	stream << ".SURVEYING."; break;
		case ENUM_USERDEFINED:	stream << ".USERDEFINED."; break;
		case ENUM_NOTDEFINED:	stream << ".NOTDEFINED."; break;
	}
	if( is_select_type ) { stream << ")"; }
}
const std::wstring IfcLaborResourceTypeEnum::toString() const
{
	switch( m_enum ) 
	{
		case ENUM_ADMINISTRATION:	return L"ADMINISTRATION";
		case ENUM_CARPENTRY:	return L"CARPENTRY";
		case ENUM_CLEANING:	return L"CLEANING";
		case ENUM_CONCRETE:	return L"CONCRETE";
		case ENUM_DRYWALL:	return L"DRYWALL";
		case ENUM_ELECTRIC:	return L"ELECTRIC";
		case ENUM_FINISHING:	return L"FINISHING";
		case ENUM_FLOORING:	return L"FLOORING";
		case ENUM_GENERAL:	return L"GENERAL";
		case ENUM_HVAC:	return L"HVAC";
		case ENUM_LANDSCAPING:	return L"LANDSCAPING";
		case ENUM_MASONRY:	return L"MASONRY";
		case ENUM_PAINTING:	return L"PAINTING";
		case ENUM_PAVING:	return L"PAVING";
		case ENUM_PLUMBING:	return L"PLUMBING";
		case ENUM_ROOFING:	return L"ROOFING";
		case ENUM_SITEGRADING:	return L"SITEGRADING";
		case ENUM_STEELWORK:	return L"STEELWORK";
		case ENUM_SURVEYING:	return L"SURVEYING";
		case ENUM_USERDEFINED:	return L"USERDEFINED";
		case ENUM_NOTDEFINED:	return L"NOTDEFINED";
	}
	return L"";
}
shared_ptr<IfcLaborResourceTypeEnum> IfcLaborResourceTypeEnum::createObjectFromSTEP( const std::wstring& arg, const std::map<int,shared_ptr<BuildingEntity> >& map )
{
	if( arg.compare( L"$" ) == 0 ) { return shared_ptr<IfcLaborResourceTypeEnum>(); }
	if( arg.compare( L"*" ) == 0 ) { return shared_ptr<IfcLaborResourceTypeEnum>(); }
	shared_ptr<IfcLaborResourceTypeEnum> type_object( new IfcLaborResourceTypeEnum() );
	if( boost::iequals( arg, L".ADMINISTRATION." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_ADMINISTRATION;
	}
	else if( boost::iequals( arg, L".CARPENTRY." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_CARPENTRY;
	}
	else if( boost::iequals( arg, L".CLEANING." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_CLEANING;
	}
	else if( boost::iequals( arg, L".CONCRETE." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_CONCRETE;
	}
	else if( boost::iequals( arg, L".DRYWALL." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_DRYWALL;
	}
	else if( boost::iequals( arg, L".ELECTRIC." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_ELECTRIC;
	}
	else if( boost::iequals( arg, L".FINISHING." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_FINISHING;
	}
	else if( boost::iequals( arg, L".FLOORING." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_FLOORING;
	}
	else if( boost::iequals( arg, L".GENERAL." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_GENERAL;
	}
	else if( boost::iequals( arg, L".HVAC." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_HVAC;
	}
	else if( boost::iequals( arg, L".LANDSCAPING." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_LANDSCAPING;
	}
	else if( boost::iequals( arg, L".MASONRY." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_MASONRY;
	}
	else if( boost::iequals( arg, L".PAINTING." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_PAINTING;
	}
	else if( boost::iequals( arg, L".PAVING." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_PAVING;
	}
	else if( boost::iequals( arg, L".PLUMBING." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_PLUMBING;
	}
	else if( boost::iequals( arg, L".ROOFING." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_ROOFING;
	}
	else if( boost::iequals( arg, L".SITEGRADING." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_SITEGRADING;
	}
	else if( boost::iequals( arg, L".STEELWORK." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_STEELWORK;
	}
	else if( boost::iequals( arg, L".SURVEYING." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_SURVEYING;
	}
	else if( boost::iequals( arg, L".USERDEFINED." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_USERDEFINED;
	}
	else if( boost::iequals( arg, L".NOTDEFINED." ) )
	{
		type_object->m_enum = IfcLaborResourceTypeEnum::ENUM_NOTDEFINED;
	}
	return type_object;
}
