BlitzConn::BlitzConn(): Network::TcpClient(Network::ResolveAddress(cfg.GetBlitzDAddr().c_str()), cfg.GetBlitzDPort()) { _Register(&RealmTCPServer::GetSingleton(), false); byte p = 0x65; Send(&p, 1); }
void KindRegistry::_RegisterDefaults() { // Initialize builtin kind hierarchy. _Register(KindTokens->subcomponent); _Register(KindTokens->model); _Register(KindTokens->component, KindTokens->model); _Register(KindTokens->group, KindTokens->model); _Register(KindTokens->assembly, KindTokens->group); // Check plugInfo for extensions to the kind hierarchy. // // XXX We only do this once, and do not re-build the kind hierarchy // if someone manages to add more plugins while the app is running. // This allows the KindRegistry to be threadsafe without locking. const PlugPluginPtrVector& plugins = PlugRegistry::GetInstance().GetAllPlugins(); TF_FOR_ALL(plug, plugins){ JsObject kinds; const JsObject &metadata = (*plug)->GetMetadata(); if (!_GetKey(metadata, _tokens->PluginKindsKey, &kinds)) continue; TF_FOR_ALL(kindEntry, kinds){ // Each entry is a map from kind -> metadata dict. TfToken kind(kindEntry->first); JsObject kindDict; if (!_GetKey(kinds, kind, &kindDict)){ TF_RUNTIME_ERROR("Expected dict for kind '%s'", kind.GetText()); continue; } // Check for baseKind. TfToken baseKind; JsObject::const_iterator i = kindDict.find("baseKind"); if (i != kindDict.end()) { if (i->second.IsString()) { baseKind = TfToken(i->second.GetString()); } else { TF_RUNTIME_ERROR("Expected string for baseKind"); continue; } } _Register(kind, baseKind); }
void TfWeakBase::EnableNotification2() const { _Register()->_notify2 = true; }
void const* TfWeakBase::GetUniqueIdentifier() const { return _Register()->_GetUniqueIdentifier(); }
ACVar *ACDoc::_DeclPost(ACType *type,sInt usages) { ACVar *var; sPoolString test; sPoolString name; // name Scan.ScanName(name); // array while(Scan.IfToken('[')) { ACType *t2 = new ACType; t2->BaseType = type; t2->ArrayCountExpr = _Expression(); if(t2->ArrayCountExpr->Op == ACE_LITERAL && t2->ArrayCountExpr->Literal->Token==sTOK_INT) t2->ArrayCount = t2->ArrayCountExpr->Literal->ValueI; t2->Type = ACT_ARRAY; UserTypes.AddTail(t2); type = t2; Scan.Match(']'); } // func if(Scan.IfToken('(')) { ACFunc *func = new ACFunc; var = func; sBool first = 1; while(Scan.Errors==0 && Scan.Token!=')') { if(!first) Scan.Match(','); first = 0; if(Scan.Token==')') // EXTENSION (allow trailing , in parameter list) break; ACVar *member = _Decl(); if(member) { if(sFind(func->Locals[SCOPE_PARA],&ACVar::Name,member->Name)) Scan.Error(L"parameter %q defined twice",member->Name); func->Locals[SCOPE_PARA].AddTail(member); } else Scan.Error(L"nested type declarations not supported"); } Scan.Match(')'); } else { var = new ACVar; AllVariables.AddTail(var); } // semantics while(Scan.IfToken(':')) { if(Scan.Token==AC_TOK_REGISTER) { if(var->RegisterType) Scan.Error(L"more than one register binding for %q",name); _Register(var->RegisterType,var->RegisterNum); } else if(Scan.Token==AC_TOK_PIF) // EXTENSION (permutation dependend declarations) { Scan.Match(AC_TOK_PIF); Scan.Match('('); var->Permute = _Expression(); Scan.Match(')'); } else { if(!var->Semantic.IsEmpty()) Scan.Error(L"more than one semantic for %q",name); Scan.ScanName(var->Semantic); } } var->Name = name; var->Type = type; var->Usages = usages; return var; }
ACType *ACDoc::_Struct(sInt typekind) // 'struct' already scanned { ACType *type = new ACType; type->Type = typekind; if(Scan.Token==sTOK_NAME) Scan.ScanName(type->Name); sInt constreg = -1; sInt constname = 0; while(Scan.IfToken(':')) // EXTENSION: auto constant registers { if(Scan.Token==AC_TOK_REGISTER) { _Register(constname,constreg); if(constname!='c') Scan.Error(L"constant register expected, found <%c%d>!",constname,constreg); type->CRegStart = constreg; } else if(Scan.Token==sTOK_NAME && Scan.Name==L"slot") { Scan.MatchName(L"slot"); sPoolString shadertype; Scan.ScanName(shadertype); type->CSlot = Scan.ScanInt(); if(type->CSlot<0 || type->CSlot>=sCBUFFER_MAXSLOT) Scan.Error(L"cbuffer slot out of range (max is %d)",(sInt)sCBUFFER_MAXSLOT); if(shadertype==L"vs") type->CSlot |= sCBUFFER_VS; else if(shadertype==L"hs") type->CSlot |= sCBUFFER_HS; else if(shadertype==L"ds") type->CSlot |= sCBUFFER_DS; else if(shadertype==L"gs") type->CSlot |= sCBUFFER_GS; else if(shadertype==L"ps") type->CSlot |= sCBUFFER_PS; else if(shadertype==L"cs") type->CSlot |= sCBUFFER_CS; else Scan.Error(L"unknown shader type %q",shadertype); } else { Scan.Error(L"don't understand semantik"); } } Scan.Match('{'); while(!Scan.Errors && Scan.Token!='}') { if(Scan.Token==AC_TOK_EXTERN) { type->Externs.AddTail(_Extern()); } else { ACVar *var = _Decl(); if(sFind(type->Members,&ACVar::Name,var->Name)) Scan.Error(L"member %q defined twice",var->Name); type->Members.AddTail(var); while(Scan.IfToken(',')) { ACVar *var2 = _DeclPost(var->Type,var->Usages); if(sFind(type->Members,&ACVar::Name,var2->Name)) Scan.Error(L"member %q defined twice",var2->Name); type->Members.AddTail(var2); } if(typekind==ACT_CBUFFER && (var->Usages & ~(ACF_ROWMAJOR|ACF_COLMAJOR)) ) Scan.Error(L"usages not allowed in cbuffer"); if(typekind==ACT_CBUFFER && !var->Semantic.IsEmpty()) Scan.Error(L"semantics not allowed in cbuffer"); if(constname && var->RegisterType) Scan.Error(L"automatic register binding and explicit register binding at the same time"); if(constname) { var->RegisterType = 'c'; var->RegisterNum = constreg; sInt c,r; var->Type->SizeOf(c,r); if((var->Usages & ACF_ROWMAJOR) && c>1 && r>1) { if(var->Type->Type==ACT_ARRAY) { // transpose before calculating array size var->Type->BaseType->SizeOf(c,r); sSwap(c,r); r = 4; if(var->Type->ArrayCount==0) Scan.Error(L"could not determine array count"); c *= var->Type->ArrayCount; } else sSwap(c,r); } constreg += c; } Scan.Match(';'); } } if(constname) type->CRegCount = constreg-type->CRegStart; Scan.Match('}'); return type; }