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


C++ Number::get_value方法代码示例

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


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

示例1: if

shared_ptr<Block> netlist::ForState::unfold() {
  // set up the initial assignment
  if(!init) {
    G_ENV->error(loc, "ELAB-FOR-0");
    return shared_ptr<Block>();
  } else if(!init->rexp->is_valuable()) {
    G_ENV->error(init->loc, "ELAB-FOR-1", toString(*(init->rexp)));
    return shared_ptr<Block>();
  } else if(init->lval->size() != 1) {
    G_ENV->error(init->loc, "ELAB-FOR-2", toString(*(init->lval)));
    return shared_ptr<Block>();
  }

  VIdentifier& var = init->lval->front();
  Number num = init->rexp->get_value();
  
  // unfold the for statement
  shared_ptr<Expression> m_cond(cond->deep_copy(NULL));
  m_cond->replace_variable(var, num);
  m_cond->reduce();
  if(!m_cond->is_valuable()) {
    G_ENV->error(cond->loc, "ELAB-FOR-3", toString(*cond));
    return shared_ptr<Block>();
  }

  // the new body
  shared_ptr<Block> newBody(new Block(body->loc));
  
  while(m_cond->get_value().is_true()) {
    // replace the index variable in the body
    shared_ptr<Block> m_blk(body->deep_copy(NULL));
    m_blk->replace_variable(var, num);

    // set up the new name if needed
    if(body->is_named()) {
      string locPrefix = body->name.get_name() + num.get_value().get_str(10);
      m_blk->name.add_prefix(locPrefix);
    }

    // unfold the block
    m_blk = m_blk->unfold();

    // copy the statements in the body to the new body
    newBody->elab_add_block(m_blk);

    // increment
    if(!incr || incr->lval->size() != 1 || incr->lval->front() != var) {
      G_ENV->error(cond->loc, "ELAB-FOR-4", toString(*incr));
      return shared_ptr<Block>();
    }
    shared_ptr<Assign> m_incr(incr->deep_copy(NULL));
    m_incr->rexp->replace_variable(var, num);
    m_incr->rexp->reduce();
    if(!m_incr->rexp->is_valuable()) {
      G_ENV->error(cond->loc, "ELAB-FOR-4", toString(*incr));
      return shared_ptr<Block>();
    }
    
    // update num
    num = m_incr->rexp->get_value();
    m_cond.reset(cond->deep_copy(NULL));
    m_cond->replace_variable(var, num);
    m_cond->reduce();
  }

  return newBody;

}
开发者ID:JamesLinus,项目名称:Asynchronous-Verilog-Synthesiser,代码行数:68,代码来源:for.cpp


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