js引擎v8源码分析之HeapNumber(基于v8 0.1.5)

HeapNumber是保存大整形的对象。v8里有smi保存整形,但是他只有31位,超过31位的就需要用HeapNumber。

// 存储了数字的堆对象
class HeapNumber: public HeapObject {
 public:
  inline double value();
  inline void set_value(double value);

  static inline HeapNumber* cast(Object* obj);

  Object* HeapNumberToBoolean();
 
  // Layout description.
  // kSize之前的空间存储map对象的指针
  static const int kValueOffset = HeapObject::kSize;
  // kValueOffset - kSize之间存储数字的值,double型
  static const int kSize = kValueOffset + kDoubleSize;

 private:
  DISALLOW_IMPLICIT_CONSTRUCTORS(HeapNumber);
};

下面实现。
1 存取数值

// 返回double类型的值
double HeapNumber::value() {
  return READ_DOUBLE_FIELD(this, kValueOffset);
}

// 写double值到对象
void HeapNumber::set_value(double value) {
  WRITE_DOUBLE_FIELD(this, kValueOffset, value);
}

2 数字转boolean值。0和NAN是false,其余为true。

Object* HeapNumber::HeapNumberToBoolean() {
  // NaN, +0, and -0 should return the false object
  switch (fpclassify(value())) {
    case FP_NAN:  // fall through
    case FP_ZERO: return Heap::false_value();
    default: return Heap::true_value();
  }
}

// 参考ieee对浮点数的定义
int fpclassify(double x) {
  // Use the MS-specific _fpclass() for classification.
  int flags = _fpclass(x);

  // 非0正值或非0负值
  if (flags & (_FPCLASS_PN | _FPCLASS_NN)) return FP_NORMAL;
  // 正数0或负数0
  if (flags & (_FPCLASS_PZ | _FPCLASS_NZ)) return FP_ZERO;
  // 非标准化的正或负值 
  if (flags & (_FPCLASS_PD | _FPCLASS_ND)) return FP_SUBNORMAL;
  // 正负无穷
  if (flags & (_FPCLASS_PINF | _FPCLASS_NINF)) return FP_INFINITE;

  // All cases should be covered by the code above.
  // 不是数值
  ASSERT(flags & (_FPCLASS_SNAN | _FPCLASS_QNAN));
  return FP_NAN;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要下载elasticsearchhead0.1.5谷歌插件,您可以按照以下步骤进行操作: 1. 首先,打开您的Chrome浏览器,并在地址栏中输入"Chrome网上应用店"。 2. 在搜索栏中,输入"elasticsearchhead0.1.5"并点击搜索按钮。 3. 在搜索结果中,应该能找到相关的插件。请确保选择的插件是"elasticsearchhead0.1.5"。 4. 点击插件的名称或图标,进入插件的详情页面。 5. 在详情页面,您将看到一个"添加至Chrome"的按钮。点击该按钮以安装插件。 6. 安装完成后,您将收到一个确认消息,并且插件的图标将出现在Chrome浏览器的工具栏或扩展程序区域。 7. 现在,您已成功下载并安装了elasticsearchhead0.1.5谷歌插件。 请注意,插件的下载和安装过程可能因不同的Chrome浏览器版本而有所不同。如果您遇到任何问题,请参考官方文档或在相关论坛寻求帮助。 ### 回答2: Elasticsearch Head是一个用于查看和管理Elasticsearch集群的插件。虽然插件名称中包含谷歌,但实际上Elasticsearch Head插件不是谷歌官方出品的插件,它是开源社区开发的一个插件。要下载Elasticsearch Head插件,可以按照以下步骤进行操作: 1. 打开谷歌浏览器,进入插件商店。 2. 在插件商店搜索框中输入“Elasticsearch Head”并回车。 3. 在搜索结果中选择合适的插件,通常是由mobz开发的插件。 4. 点击插件卡片上的“添加至Chrome”按钮,开始下载和安装插件。 5. 下载完成后,浏览器右上角会出现一个新的插件图标。 6. 点击插件图标,弹出一个新的页面,输入Elasticsearch集群的地址和端口号。 7. 输入正确的地址和端口号后,点击连接按钮,即可访问和管理Elasticsearch集群。 需要注意的是,Elasticsearch Head插件只适用于谷歌浏览器,其他浏览器可能无法使用该插件。此外,插件下载和使用需要一定的网络条件和相关知识,对于不熟悉的用户,可以参考相关教程或向社区寻求帮助。 ### 回答3: 要下载elasticsearch-head 0.1.5插件,可以按照以下步骤进行操作: 1. 打开谷歌浏览器,并在地址栏中输入“elasticsearch-head 0.1.5谷歌插件下载”。 2. 在搜索结果页面,可以找到elasticsearch-head插件的官方下载页面或第三方站点提供的下载链接。 3. 点击相关链接,进入插件下载页面。 4. 在插件下载页面,可以选择合适的插件版本,确认选择0.1.5版本。 5. 阅读下载页面上的相关信息,了解插件的功能和适用版本。 6. 确认无误后,点击下载按钮开始下载插件。 7. 下载完成后,根据提示,将下载的插件文件保存到本地计算机的特定文件夹中。 8. 在谷歌浏览器中,点击浏览器右上方三个点的菜单按钮,选择“更多工具”->“扩展程序”。 9. 在打开的扩展程序页面上,找到“elasticsearch-head”插件,并启用它。 10. 完成上述操作后,elasticsearch-head插件将被成功安装,并在浏览器的工具栏上显示图标,点击图标即可使用该插件进行Elasticsearch相关操作。 请注意,在下载和安装插件的过程中,要确保从官方或可信赖的第三方网站下载插件,以避免安全隐患。另外,确认插件的兼容性和适用版本,以确保它能够正常运行在您的谷歌浏览器上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值