Beispiel #1
0
	BlitzConn::BlitzConn(): Network::TcpClient(Network::ResolveAddress(cfg.GetBlitzDAddr().c_str()), cfg.GetBlitzDPort())
	{
		_Register(&RealmTCPServer::GetSingleton(), false);

		byte p = 0x65;
		Send(&p, 1);
	}
Beispiel #2
0
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);
        }
Beispiel #3
0
void
TfWeakBase::EnableNotification2() const
{
    _Register()->_notify2 = true;
}
Beispiel #4
0
void const*
TfWeakBase::GetUniqueIdentifier() const
{
    return _Register()->_GetUniqueIdentifier();
}
Beispiel #5
0
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;
}
Beispiel #6
0
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;
}