前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将位序列存储为整数

将位序列存储为整数

作者头像
用户7741497
发布2022-08-03 09:35:09
4260
发布2022-08-03 09:35:09
举报
文章被收录于专栏:hml_知识记录hml_知识记录

将位序列存储为整数

如果要将一系列布尔参数传递给方法,一种常见的方法是将它们作为编码为单个整数的位序列传递。

例如,Security.System.ExportAll() 方法用于从 IRIS 实例中导出安全设置。如果查看此方法的类引用,将看到它的定义如下:

代码语言:javascript
复制
classmethod ExportAll(FileName As %String = "SecurityExport.xml", 
ByRef NumExported As %String, Flags As %Integer = -1) as %Status

第三个参数 Flags 是一个整数,其中每个位代表一种可以导出的安全记录。

代码语言:javascript
复制
Flags - What type of records to export to the file, -1 = ALL
Bit 0 - System
Bit 1 - Events
Bit 2 - Services
Bit 4 - Resources
Bit 5 - Roles
Bit 6 - Users
Bit 7 - Applications
Bit 8 - SSL Configs
Bit 9 - PhoneProvider
Bit 10 - X509Credential
Bit 11 - OpenAMIdentityService
Bit 12 - SQL privileges
Bit 13 - X509Users
Bit 14 - DocDBs
Bit 15 - LDAPConfig
Bit 16 - KMIPServer

存储为整数的位串中的位 0 表示 20,位 1 表示 2^1,依此类推。如果要导出与位 5678101113 对应的类型的安全记录,可以通过将 Flags 设置为 2^5 +2^6 + 2^7+ 2^8 + 2^10 + 2^11 + 2^13 = 11744 来完成.

在 ObjectScript 中,这可能看起来像:

代码语言:javascript
复制
set flags = (2**5) + (2**6) + (2**7) + (2**8) + (2**10) + (2**11) + (2**13)
set status = ##class(Security.System).ExportAll("SecurityExport.xml", .numExported, flags)

一些 API 定义了宏以使代码更易于阅读。一种这样的情况是在 DataMove 实用程序中,其中 DataMove 对象是使用 DataMove.Data.CreateFromMapEdits() 方法创建的。无需过多介绍细节,该方法在类参考中定义如下:

代码语言:javascript
复制
classmethod CreateFromMapEdits(Name As %String, ByRef Properties As %String, 
ByRef Warnings As %String, ByRef Errors As %String) as %Status

它有以下参数:

  • Name - 要创建的 DataMove 对象的名称。
  • Properties - 用于创建对象的属性数组。可以选择指定以下属性。
  • Properties("Description")- 数据移动操作的描述,默认 =""
  • Properties("Flags") - 描述操作的标志,默认 = 0
  • Properties("LogFile")- 日志文件的目录和文件名,默认 = \iris\mgr\DataMovename.log

为了使 Properties("Flags") 更容易定义,这些宏可供使用:

控制数据移动的位标志。

  • $$$BitNoSrcJournal - 允许不记录源数据库
  • $$$BitNoWorkerJobs - 在复制数据期间不要使用“worker”作业
  • $$$BitBatchMode - 在“批处理”模式下运行复制作业
  • $$$BitCheckActivate - 在 Activate() 期间调用 $$CheckActivate^ZDATAMOVE()

这些宏定义为特定位的计算值,允许设置正确的位,而无需记住哪个位代表哪个标志:

#;DataMove 标志属性的定义

  • #define BitNoSrcJournal 1
  • #define BitNoWorkerJobs 512
  • #define BitBatchMode 2048
  • #define BitCheckActivate 4096

在代码中,可以使用此代码片段来设置标志并创建一个 DataMove 对象:

代码语言:javascript
复制
// Set properties("Flags") to 6657
set properties("Flags") = $$$BitNoSrcJournal + $$$BitNoWorkerJobs + $$$BitBatchMode + $$$BitCheckActivate
set status = ##class(DataMove.Data).CreateFromMapEdits("dm", .properties, .warnings, .errors)

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 将位序列存储为整数
相关产品与服务
批量计算
批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档