Variant HHVM_FUNCTION(constant, const String& name) { if (!name.get()) return init_null(); const char *data = name.data(); int len = name.length(); char *colon; if ((colon = (char*)memchr(data, ':', len)) && colon[1] == ':') { // class constant int classNameLen = colon - data; char *constantName = colon + 2; Class* cls = getClassByName(data, classNameLen); if (cls) { String cnsName(constantName, data + len - constantName, CopyString); Cell cns = cls->clsCnsGet(cnsName.get()); if (cns.m_type != KindOfUninit) { return cellAsCVarRef(cns); } } } else { auto const cns = Unit::loadCns(name.get()); if (cns) return tvAsCVarRef(cns); } raise_warning("constant(): Couldn't find constant %s", data); return init_null(); }
bool f_defined(const String& name, bool autoload /* = true */) { if (!name.get()) return false; const char *data = name.data(); int len = name.length(); // slice off starting backslash bool hadInitialBackslash = false; if (len > 0 && data[0] == '\\') { data += 1; len -= 1; hadInitialBackslash = true; } char *colon; if ((colon = (char*)memchr(data, ':', len)) && colon[1] == ':') { // class constant int classNameLen = colon - data; char *constantName = colon + 2; Class* cls = getClassByName(data, classNameLen); if (cls) { String cnsName(constantName, data + len - constantName, CopyString); return cls->clsCnsGet(cnsName.get()).m_type != KindOfUninit; } return false; } else { auto* cb = autoload ? Unit::loadCns : Unit::lookupCns; if (hadInitialBackslash) { String s(data, len, CopyString); return cb(s.get()); } else { return cb(name.get()); } } }
bool CommandCenter::addCommand(const std::string& classname, osg::ref_ptr<ParameterBase> p, const std::string& sourceActionName, bool keep) { if (_commandQueue.size() > 1) { BaseCommand* curCommand = _commandQueue.at(_commandQueue.size() - 1); if (curCommand->GetClassInfo()->GetClassName() == classname) { if (curCommand->isRegisterHandle()) curCommand->registerHandle(sourceActionName); _operationQueue->add(curCommand); return true; } } osg::ref_ptr<CommandClassObject> cmd = getClassByName(classname, p); if (cmd.valid()) { osg::ref_ptr<BaseCommand> command = (BaseCommand*)(cmd.get()); SystemViewContext* currentContext = getSystemViewContext(this); unsigned int viewid = currentContext->_viewID; command->initCommand(viewid); if (!keep) { command->_actionEndCallback = _actionEndCallback; addCommand(command, sourceActionName); } else { command->setKeep(true); _operationQueue->add(command); } return true; } return false; }
bool HHVM_FUNCTION(defined, const String& name, bool autoload /* = true */) { if (!name.get()) return false; const char *data = name.data(); int len = name.length(); char *colon; if ((colon = (char*)memchr(data, ':', len)) && colon[1] == ':') { // class constant int classNameLen = colon - data; char *constantName = colon + 2; Class* cls = getClassByName(data, classNameLen); if (cls) { String cnsName(constantName, data + len - constantName, CopyString); return cls->clsCnsGet(cnsName.get()).m_type != KindOfUninit; } return false; } else { auto* cb = autoload ? Unit::loadCns : Unit::lookupCns; return cb(name.get()); } }
Variant f_constant(const String& name) { if (!name.get()) return uninit_null(); const char *data = name.data(); int len = name.length(); // slice off starting backslash bool hadInitialBackslash = false; if (len > 0 && data[0] == '\\') { data += 1; len -= 1; hadInitialBackslash = true; } char *colon; if ((colon = (char*)memchr(data, ':', len)) && colon[1] == ':') { // class constant int classNameLen = colon - data; char *constantName = colon + 2; Class* cls = getClassByName(data, classNameLen); if (cls) { String cnsName(constantName, data + len - constantName, CopyString); Cell cns = cls->clsCnsGet(cnsName.get()); if (cns.m_type != KindOfUninit) { return cellAsCVarRef(cns); } } raise_warning("Couldn't find constant %s", data); } else { TypedValue* cns; if (hadInitialBackslash) { String s(data, len, CopyString); cns = Unit::loadCns(s.get()); } else { cns = Unit::loadCns(name.get()); } if (cns) return tvAsVariant(cns); } return uninit_null(); }