// File: /workspace/github_cpp_makefile_star2_O2/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 0x201b7
movq %rdi, %rbx
leaq 0x45ff(%rip), %rcx      # 0x24420
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x80(%rax)
jmp 0x1fe3c
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x50(%rax)
jmp 0x1fe6f
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x40(%rax)
jmp 0x1fe9f
movq (%rdx), %rdi
callq 0x96b0
leaq 0x18(%rsp), %rdi
leaq 0x17(%rsp), %rdx
movq %rax, %rsi
callq 0xb070
addq $0x28, %rbx
leaq 0x18(%rsp), %r14
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20058
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movq %r14, %rsi
callq *0x58(%rax)
jmp 0x1fee0
movq (%rdx), %rdi
callq 0x96b0
leaq 0x18(%rsp), %rdi
leaq 0x17(%rsp), %rdx
movq %rax, %rsi
callq 0xb070
addq $0x28, %rbx
leaq 0x18(%rsp), %r14
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20058
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movq %r14, %rsi
callq *0x48(%rax)
jmp 0x1ff1e
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x38(%rax)
jmp 0x1ff4b
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x88(%rax)
jmp 0x1ff7b
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x70(%rax)
jmp 0x1ffae
movq (%rdx), %rdi
callq 0x9450
movq %rax, %r14
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movq %r14, %rsi
callq *0x60(%rax)
jmp 0x1ffdb
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x78(%rax)
jmp 0x20004
movq (%rdx), %rdi
callq 0x96b0
leaq 0x18(%rsp), %rdi
leaq 0x17(%rsp), %rdx
movq %rax, %rsi
callq 0xb070
addq $0x28, %rbx
leaq 0x18(%rsp), %r14
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20058
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movq %r14, %rsi
callq *0x28(%rax)
jmp 0x20041
leaq 0x18(%rsp), %rdi
callq 0x9710
addq $0x38, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x68(%rax)
jmp 0x2007f
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x90(%rax)
jmp 0x200ab
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x18(%rax)
jmp 0x200da
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x30(%rax)
jmp 0x20106
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x20(%rax)
jmp 0x20136
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x10(%rax)
jmp 0x20166
movq (%rdx), %rdi
callq 0x9430
movsd %xmm0, 0x8(%rsp)
addq $0x28, %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x20062
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movsd 0x8(%rsp), %xmm0
callq *0x98(%rax)
jmp 0x20196
pushq $0x10
popq %rdi
callq 0x91e0
movq %rax, %r14
leaq 0x19dff(%rip), %rsi     # 0x39fc8
leaq 0x18(%rsp), %rdi
movq %r15, %rdx
callq 0x202ae
movb $0x1, %bpl
leaq 0x18(%rsp), %rsi
movq %r14, %rdi
callq 0x90d0
xorl %ebp, %ebp
movq 0x18df9(%rip), %rsi     # 0x38fe8
movq 0x18dd2(%rip), %rdx     # 0x38fc8
movq %r14, %rdi
callq 0x9390
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x9710
testb %bpl, %bpl
jne 0x20215
jmp 0x20239
movq %rax, %rbx
movq %r14, %rdi
callq 0x9530
jmp 0x20239
jmp 0x20223
jmp 0x20223
movq %rax, %rbx
jmp 0x20239
jmp 0x2022c
jmp 0x2022c
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x9710
movq %rbx, %rdi
callq 0x93b0
nop