Arquivos
hhvm/hphp/runtime/ext/asio/static_result_wait_handle.cpp
T
jan 1da3705450 Cleanup Static{Result,Exception}WaitHandle construction interfaces
Provide a Static{Result,Exception}WaitHandle::Create() static method for
internal use, use it by GenArrayWaitHandle.

Avoids one inc/decref (Array -> Variant -> m_resultOrException) if
GenArray received an array of finished dependencies.
2013-03-28 12:28:17 -07:00

59 linhas
2.2 KiB
C++

/*
+----------------------------------------------------------------------+
| HipHop for PHP |
+----------------------------------------------------------------------+
| Copyright (c) 2010- Facebook, Inc. (http://www.facebook.com) |
| Copyright (c) 1997-2010 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
*/
#include <runtime/ext/ext_asio.h>
#include <system/lib/systemlib.h>
namespace HPHP {
///////////////////////////////////////////////////////////////////////////////
namespace {
StaticString s_staticResult("<static-result>");
}
c_StaticResultWaitHandle::c_StaticResultWaitHandle(VM::Class* cb)
: c_StaticWaitHandle(cb) {
setState(STATE_SUCCEEDED);
}
c_StaticResultWaitHandle::~c_StaticResultWaitHandle() {
tvRefcountedDecRefCell(&m_resultOrException);
}
void c_StaticResultWaitHandle::t___construct() {
Object e(SystemLib::AllocInvalidOperationExceptionObject(
"Use StaticResultWaitHandle::create() instead of constructor"));
throw e;
}
Object c_StaticResultWaitHandle::ti_create(const char* cls, CVarRef result) {
return Create(result.asTypedValue());
}
p_StaticResultWaitHandle c_StaticResultWaitHandle::Create(const TypedValue* result) {
p_StaticResultWaitHandle wh = NEWOBJ(c_StaticResultWaitHandle)();
tvReadCell(result, &wh->m_resultOrException);
return wh;
}
String c_StaticResultWaitHandle::getName() {
return s_staticResult;
}
///////////////////////////////////////////////////////////////////////////////
}