本文整理汇总了C++中VRefParam::assignIfRef方法的典型用法代码示例。如果您正苦于以下问题:C++ VRefParam::assignIfRef方法的具体用法?C++ VRefParam::assignIfRef怎么用?C++ VRefParam::assignIfRef使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VRefParam
的用法示例。
在下文中一共展示了VRefParam::assignIfRef方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HHVM_FUNCTION
bool HHVM_FUNCTION(pcntl_sigprocmask,
int how,
const Array& set,
VRefParam oldset) {
if (how != SIG_BLOCK && how != SIG_UNBLOCK && how != SIG_SETMASK) {
goto invalid_argument;
}
{ // Variable scope so that goto doesn't cross definitions
sigset_t cset;
sigset_t coldset;
sigemptyset(&cset);
for (ArrayIter iter(set); iter; ++iter) {
auto value = iter.second().toInt64();
if (sigaddset(&cset, value) == -1) {
goto invalid_argument;
}
}
int result = pthread_sigmask(how, &cset, &coldset);
if (result != 0) {
return false;
}
Array aoldset;
for (int signum = 1; signum < NSIG; ++signum) {
result = sigismember(&coldset, signum);
if (result == 1) {
aoldset.append(signum);
} else if (result == -1) {
// invalid signal number
break;
}
}
oldset.assignIfRef(aoldset);
return true;
}
invalid_argument:
raise_warning("pcntl_sigprocmask(): Invalid argument");
return false;
}
示例2: HHVM_FUNCTION
void HHVM_FUNCTION(passthru,
const String& command,
VRefParam return_var /* = null */) {
ShellExecContext ctx;
FILE *fp = ctx.exec(command);
if (!fp) return;
char buffer[1024];
while (true) {
int len = read(fileno(fp), buffer, sizeof(buffer) - 1);
if (len == -1 && errno == EINTR) continue;
if (len <= 0) break; // break on error or EOF
buffer[len] = '\0';
g_context->write(String(buffer, len, CopyString));
}
int ret = ctx.exit();
if (WIFEXITED(ret)) ret = WEXITSTATUS(ret);
return_var.assignIfRef(ret);
}
示例3: preg_replace_callback_array_impl
static Variant preg_replace_callback_array_impl(
const Variant& patterns_and_callbacks,
const Array& subjects,
int limit,
VRefParam count) {
Array ret = Array::Create();
auto key = 0;
auto total_replacement_count = 0;
for (ArrayIter s_iter(subjects); s_iter; ++s_iter) {
assert(s_iter.second().isString());
auto subj = s_iter.second();
for (ArrayIter pc_iter(patterns_and_callbacks.toArray());
pc_iter; ++pc_iter) {
Variant pattern(pc_iter.first());
assert(pattern.isString());
Variant callback(pc_iter.second());
subj = HHVM_FN(preg_replace_callback)(pattern, callback, subj, limit,
count);
// If we got an error on the replacement, the subject will be null,
// and then we will return null.
if (subj.isNull()) {
return init_null();
}
if (count.isReferenced()) {
total_replacement_count += count.toInt64();
}
}
ret.add(key++, subj);
}
// If count was passed in as an explicit reference, we will assign it to our
// total replacement count; otherwise, count will just remained unassigned
count.assignIfRef(total_replacement_count);
// If there were no replacements (i.e., matches) return original subject(s)
if (ret.empty()) {
return subjects;
}
return ret;
}
示例4: HHVM_FUNCTION
bool HHVM_FUNCTION(pcntl_sigprocmask,
int how,
const Array& set,
VRefParam oldset) {
auto const invalid_argument = [&] {
raise_warning("pcntl_sigprocmask(): Invalid argument");
return false;
};
if (how != SIG_BLOCK && how != SIG_UNBLOCK && how != SIG_SETMASK) {
return invalid_argument();
}
sigset_t cset;
sigset_t coldset;
sigemptyset(&cset);
for (ArrayIter iter(set); iter; ++iter) {
auto value = iter.second().toInt64();
if (sigaddset(&cset, value) == -1) {
return invalid_argument();
}
}
if (pthread_sigmask(how, &cset, &coldset)) {
return false;
}
auto aoldset = Array::Create();
for (int signum = 1; signum < NSIG; ++signum) {
auto const result = sigismember(&coldset, signum);
if (result == 1) {
aoldset.append(signum);
} else if (result == -1) {
// Invalid signal number.
break;
}
}
oldset.assignIfRef(aoldset);
return true;
}
示例5: HHVM_FUNCTION
bool HHVM_FUNCTION(msg_send,
const Resource& queue,
int64_t msgtype,
const Variant& message,
bool serialize /* = true */,
bool blocking /* = true */,
VRefParam errorcode /* = null */) {
auto q = cast<MessageQueue>(queue);
if (!q) {
raise_warning("Invalid message queue was specified");
return false;
}
hhvm_msgbuf *buffer = nullptr;
String data;
if (serialize) {
data = HHVM_FN(serialize)(message);
} else {
data = message.toString();
}
int len = data.length();
buffer = (hhvm_msgbuf *)calloc(len + sizeof(hhvm_msgbuf), 1);
ScopedMem deleter(buffer);
buffer->mtype = msgtype;
memcpy(buffer->mtext, data.c_str(), len + 1);
int result = msgsnd(q->id, buffer, len, blocking ? 0 : IPC_NOWAIT);
if (result < 0) {
int err = errno;
raise_warning("Unable to send message: %s",
folly::errnoStr(err).c_str());
errorcode.assignIfRef(err);
return false;
}
return true;
}
示例6: HHVM_FUNCTION
bool HHVM_FUNCTION(getmxrr, const String& hostname,
VRefParam mxhostsRef,
VRefParam weightsRef /* = null */) {
IOStatusHelper io("dns_get_mx", hostname.data());
int count, qdc;
unsigned short type, weight;
unsigned char ans[MAXPACKET];
char buf[255 + 1]; // IETF STD 13 section 3.1; 255 bytes
unsigned char *cp, *end;
Array mxhosts;
Array weights;
SCOPE_EXIT {
mxhostsRef.assignIfRef(mxhosts);
weightsRef.assignIfRef(weights);
};
/* Go! */
struct __res_state *res;
res = ResolverInit::s_res.get()->getResolver();
if (res == NULL) {
return false;
}
int i = res_nsearch(res, hostname.data(), C_IN, DNS_T_MX,
(unsigned char*)&ans, sizeof(ans));
if (i < 0) {
res_nclose(res);
php_dns_free_res(res);
return false;
}
if (i > (int)sizeof(ans)) {
i = sizeof(ans);
}
HEADER *hp = (HEADER *)&ans;
cp = (unsigned char *)&ans + HFIXEDSZ;
end = (unsigned char *)&ans +i;
for (qdc = ntohs((unsigned short)hp->qdcount); qdc--; cp += i + QFIXEDSZ) {
if ((i = dn_skipname(cp, end)) < 0 ) {
res_nclose(res);
php_dns_free_res(res);
return false;
}
}
count = ntohs((unsigned short)hp->ancount);
while (--count >= 0 && cp < end) {
if ((i = dn_skipname(cp, end)) < 0 ) {
res_nclose(res);
php_dns_free_res(res);
return false;
}
cp += i;
GETSHORT(type, cp);
cp += INT16SZ + INT32SZ;
GETSHORT(i, cp);
if (type != DNS_T_MX) {
cp += i;
continue;
}
GETSHORT(weight, cp);
if ((i = dn_expand(ans, end, cp, buf, sizeof(buf)-1)) < 0) {
res_nclose(res);
php_dns_free_res(res);
return false;
}
cp += i;
mxhosts.append(String(buf, CopyString));
weights.append(weight);
}
res_nclose(res);
php_dns_free_res(res);
return true;
}
示例7: HHVM_METHOD
//.........这里部分代码省略.........
}
Array hash = arr.toArray();
if (hash.size() == 0) {
return true;
}
// Preallocate sort keys buffer
size_t sortKeysOffset = 0;
size_t sortKeysLength = DEF_SORT_KEYS_BUF_SIZE;
char* sortKeys = (char*)req::malloc(sortKeysLength);
if (!sortKeys) {
throw Exception("Out of memory");
}
SCOPE_EXIT{ req::free(sortKeys); };
// Preallocate index buffer
size_t sortIndexPos = 0;
size_t sortIndexLength = DEF_SORT_KEYS_INDX_BUF_SIZE;
auto sortIndex = (collator_sort_key_index_t*)req::malloc(
sortIndexLength * sizeof(collator_sort_key_index_t));
if (!sortIndex) {
throw Exception("Out of memory");
}
SCOPE_EXIT{ req::free(sortIndex); };
// Translate input hash to sortable index
auto pos_limit = hash->iter_end();
for (ssize_t pos = hash->iter_begin(); pos != pos_limit;
pos = hash->iter_advance(pos)) {
Variant val(hash->getValue(pos));
// Convert to UTF16
icu::UnicodeString strval;
if (val.isString()) {
UErrorCode error = U_ZERO_ERROR;
strval = u16(val.toString(), error);
if (U_FAILURE(error)) {
return false;
}
}
// Generate sort key
int sortkey_len =
ucol_getSortKey(data->collator(),
strval.getBuffer(), strval.length(),
(uint8_t*)(sortKeys + sortKeysOffset),
sortKeysLength - sortKeysOffset);
// Check for key buffer overflow
if (sortkey_len > (sortKeysLength - sortKeysOffset)) {
int32_t inc = (sortkey_len > DEF_SORT_KEYS_BUF_INCREMENT)
? sortkey_len : DEF_SORT_KEYS_BUF_INCREMENT;
sortKeysLength += inc;
sortKeys = (char*)req::realloc(sortKeys, sortKeysLength);
if (!sortKeys) {
throw Exception("Out of memory");
}
sortkey_len =
ucol_getSortKey(data->collator(),
strval.getBuffer(), strval.length(),
(uint8_t*)(sortKeys + sortKeysOffset),
sortKeysLength - sortKeysOffset);
assert(sortkey_len <= (sortKeysLength - sortKeysOffset));
}
// Check for index buffer overflow
if ((sortIndexPos + 1) > sortIndexLength) {
sortIndexLength += DEF_SORT_KEYS_INDX_BUF_INCREMENT;
sortIndex = (collator_sort_key_index_t*)req::realloc(sortIndex,
sortIndexLength * sizeof(collator_sort_key_index_t));
if (!sortIndex) {
throw Exception("Out of memory");
}
}
// Initially store offset into buffer, update later to deal with reallocs
sortIndex[sortIndexPos].key = (char*)sortKeysOffset;
sortKeysOffset += sortkey_len;
sortIndex[sortIndexPos].valPos = pos;
++sortIndexPos;
}
// Update keys to location in realloc'd buffer
for (int i = 0; i < sortIndexPos; ++i) {
sortIndex[i].key = sortKeys + (ptrdiff_t)sortIndex[i].key;
}
zend_qsort(sortIndex, sortIndexPos,
sizeof(collator_sort_key_index_t),
collator_cmp_sort_keys, nullptr);
Array ret = Array::Create();
for (int i = 0; i < sortIndexPos; ++i) {
ret.append(hash->getValue(sortIndex[i].valPos));
}
arr.assignIfRef(ret);
return true;
}