// File: /workspace/github_cpp_makefile_star2_O3/errantlinguist[P]Forecast/src/forecast_io/parsers/NotifyingSynchronicDataPointParser.cpp
// Function: forecast_io::parsers::NotifyingSynchronicDataPointParser::parseAttribute(forecast_io::parsers::DataPointAttribute const&, json_object* const&)
void NotifyingSynchronicDataPointParser::parseAttribute(
		const DataPointAttribute& attribute, json_object* const & pValue)
{
	switch (attribute)
	{
	case APPARENT_TEMPERATURE:
	{
		const double apparentTemperature(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyApparentTemperature(apparentTemperature);
		}
		break;
	}
	case CLOUD_COVER:
	{
		const double cloudCover(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyCloudCover(cloudCover);
		}
		break;
	}
	case DEW_POINT:
	{
		const double dewPoint(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyDewPoint(dewPoint);
		}
		break;
	}
	case HUMIDITY:
	{
		const double humidity(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyHumidity(humidity);
		}
		break;
	}
	case ICON:
	{
		const std::string iconName(json_object_get_string(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyIcon(iconName);
		}
		break;
	}
	case NEAREST_STORM_BEARING:
	{
		const double bearing(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyNearestStormBearing(bearing);
		}
		break;
	}
	case NEAREST_STORM_DISTANCE:
	{
		const double distance(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyNearestStormDistance(distance);
		}
		break;
	}
	case OZONE:
	{
		const double ozone(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyOzone(ozone);
		}
		break;
	}
	case PRECIPITATION_INTENSITY:
	{
		const double precipitationIntensity(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyPrecipitationIntensity(precipitationIntensity);
		}
		break;
	}
	case PRECIPITATION_PROBABILITY:
	{
		const double precipitationProbability(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyPrecipitationProbability(precipitationProbability);
		}
		break;
	}
	case PRECIPITATION_TYPE:
	{
		// NOTE: "currently" data blocks often don't have this attribute
		const std::string precipitationType(json_object_get_string(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyPrecipitationType(precipitationType);
		}
		break;
	}
	case PRESSURE:
	{
		const double pressure(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyPressure(pressure);
		}
		break;
	}
	case SUMMARY:
	{
		const std::string summary(json_object_get_string(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifySummary(summary);
		}
		break;
	}
	case DataPointAttribute::TEMPERATURE:
	{
		const double temperature(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyTemperature(temperature);
		}
		break;
	}
	case TIME:
	{
		const time_t time(static_cast<time_t>(json_object_get_int64(pValue)));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyTime(time);
		}
		break;
	}
	case VISIBILITY:
	{
		const double visibility(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyVisibility(visibility);
		}
		break;
	}
	case WIND_BEARING:
	{
		const double windBearing(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyWindBearing(windBearing);
		}
		break;
	}
	case WIND_SPEED:
	{
		const double windSpeed(json_object_get_double(pValue));
		for (listeners::SynchronicDataPointDetailsListener* const & pListener : getListeners())
		{
			pListener->notifyWindSpeed(windSpeed);
		}
		break;
	}
	default:
	{
		throw std::logic_error(
				createUndefinedAttributeErrorMessage(DataPointAttribute_NAME,
						attribute));
	}
	}

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x38, %rsp
movq %rsi, %r15
movl (%rsi), %eax
cmpq $0x1f, %rax
ja 0x28026
movq %rdi, %rbx
leaq 0x4893(%rip), %rcx      # 0x2c490
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x80(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27c21
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x50(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27c5c
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x40(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27c94
jmp 0x2801b
movq (%rdx), %rdi
callq 0x96c0
leaq 0x18(%rsp), %rdi
leaq 0x17(%rsp), %rdx
movq %rax, %rsi
callq 0xc40a
addq $0x28, %rbx
leaq 0x18(%rsp), %r14
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x27e7c
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movq %r14, %rsi
callq *0x58(%rax)
jmp 0x27cd4
movq (%rdx), %rdi
callq 0x96c0
leaq 0x18(%rsp), %rdi
leaq 0x17(%rsp), %rdx
movq %rax, %rsi
callq 0xc40a
addq $0x28, %rbx
leaq 0x18(%rsp), %r14
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x27e7c
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movq %r14, %rsi
callq *0x48(%rax)
jmp 0x27d12
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x38(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27d48
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x88(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27d80
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x70(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27dbb
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9430
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movq %rax, %r14
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movq %r14, %rsi
callq *0x60(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27df0
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x78(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27e25
jmp 0x2801b
movq (%rdx), %rdi
callq 0x96c0
leaq 0x18(%rsp), %rdi
leaq 0x17(%rsp), %rdx
movq %rax, %rsi
callq 0xc40a
addq $0x28, %rbx
leaq 0x18(%rsp), %r14
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x27e7c
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movq %r14, %rsi
callq *0x28(%rax)
jmp 0x27e65
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2801b
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x90a0
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x68(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27ebb
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x90(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27ef3
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x18(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27f2e
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x30(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27f66
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x20(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27f9e
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x10(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x27fcf
jmp 0x2801b
movq (%rdx), %rdi
callq 0x9410
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
je 0x2801b
movsd %xmm0, 0x8(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x98(%rax)
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x28000
addq $0x38, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x91c0
movq %rax, %r14
leaq 0x17f8e(%rip), %rsi     # 0x3ffc8
leaq 0x18(%rsp), %rdi
movq %r15, %rdx
callq 0x28180
movb $0x1, %bpl
leaq 0x18(%rsp), %rsi
movq %r14, %rdi
callq 0x90d0
xorl %ebp, %ebp
movq 0x16f88(%rip), %rsi     # 0x3efe8
movq 0x16f61(%rip), %rdx     # 0x3efc8
movq %r14, %rdi
callq 0x9370
movq %rax, %rbx
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2808d
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x90a0
testb %bpl, %bpl
jne 0x28097
jmp 0x280cc
movq %rax, %rbx
movq %r14, %rdi
callq 0x9510
jmp 0x280cc
jmp 0x280a5
jmp 0x280a5
movq %rax, %rbx
jmp 0x280cc
jmp 0x280ae
jmp 0x280ae
movq %rax, %rbx
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x280cc
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x90a0
movq %rbx, %rdi
callq 0x9390