当前位置: 首页>>代码示例>>C++>>正文


C++ TypeManager::create_type方法代码示例

本文整理汇总了C++中TypeManager::create_type方法的典型用法代码示例。如果您正苦于以下问题:C++ TypeManager::create_type方法的具体用法?C++ TypeManager::create_type怎么用?C++ TypeManager::create_type使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在TypeManager的用法示例。


在下文中一共展示了TypeManager::create_type方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: thePosVarExpr

forlet_clause::forlet_clause(
    static_context* sctx,
    CompilerCB* ccb,
    const QueryLoc& loc,
    flwor_clause::ClauseKind kind,
    var_expr* varExpr,
    expr* domainExpr,
    var_expr* posVarExpr,
    var_expr* scoreVarExpr,
    bool isAllowingEmpty,
    bool lazy)
  :
  forletwin_clause(sctx, ccb, loc, kind, varExpr, domainExpr),
  thePosVarExpr(posVarExpr),
  theScoreVarExpr(scoreVarExpr),
  theAllowingEmpty(isAllowingEmpty),
  theLazyEval(lazy)
{
  if (thePosVarExpr != NULL)
    thePosVarExpr->set_flwor_clause(this);

  if (theScoreVarExpr != NULL)
    theScoreVarExpr->set_flwor_clause(this);

  if (varExpr != NULL && sctx != NULL)
  {
    RootTypeManager& rtm = GENV_TYPESYSTEM;
    TypeManager* tm = sctx->get_typemanager();

    xqtref_t declaredType = varExpr->get_type();

    if (declaredType != NULL)
    {
      if (kind == flwor_clause::for_clause && declaredType->is_empty())
      {
        RAISE_ERROR(err::XPTY0004, loc,
        ERROR_PARAMS(ZED(BadType_23o), "empty-sequence"));
      }

      xqtref_t domainType = domainExpr->get_return_type();

      if (!TypeOps::is_equal(tm, *rtm.ITEM_TYPE_STAR, *declaredType, loc))
      {
        if (kind == flwor_clause::for_clause)
        {
          SequenceType::Quantifier domQuant = domainType->get_quantifier();
          SequenceType::Quantifier declQuant = declaredType->get_quantifier();

          if (theAllowingEmpty &&
              (declQuant == SequenceType::QUANT_ONE ||
               declQuant == SequenceType::QUANT_PLUS))
          {
            declaredType = tm->create_type(*declaredType, SequenceType::QUANT_PLUS);
          }
          else
          {
            declaredType = tm->create_type(*declaredType, domQuant);
          }
        }

        if (!TypeOps::is_subtype(tm, *domainType, *declaredType, loc))
        {
          xqtref_t varType = TypeOps::intersect_type(*domainType, *declaredType, tm);

          if (TypeOps::is_equal(tm, *varType, *rtm.NONE_TYPE, loc))
          {
            RAISE_ERROR(err::XPTY0004, loc,
            ERROR_PARAMS(ZED(BadType_23o), *domainType, ZED(NoTreatAs_4), *declaredType));
          }

          domainExpr = theCCB->theEM->
          create_treat_expr(sctx,
                            domainExpr->get_udf(),
                            loc,
                            domainExpr,
                            declaredType,
                            TREAT_TYPE_MATCH);

          set_expr(domainExpr);
        }
      }
    }
  }
}
开发者ID:zorba-processor,项目名称:zorba,代码行数:84,代码来源:flwor_expr.cpp


注:本文中的TypeManager::create_type方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。