设为首页 加入收藏

TOP

4.10.2 用法
2013-10-07 15:01:55 来源: 作者: 【 】 浏览:72
Tags:4.10.2 用法

4.10.2  用法

uuid是一个很小的类,目标是尽量简单,便于高效率地操作。因此它特意被设计为没有构造函数,可以像POD数据类型一样使用。

uuid内部使用一个16字节的数组data作为UUID值的存储,这个数组是public的,因此可以任意访问,比如拷贝或者赋值。基于data数组,uuid提供了begin()和end()的迭代器支持,可以像一个容器一样操作UUID值的每个字节。成员函数size()和静态成员函数static_size()可以获得UUID的长度,是一个固定值,总大小为16。因此,某种程度上可以把uuid看作是一个容量固定为16、元素类型为unsigned char的容器。

示范uuid容器用法的代码如下:

  1. #include "uuids.hpp"                                //自定义头文件  
  2. using namespace boost::uuids;                       //名字空间  
  3. int main()  
  4. {  
  5.     uuid u ;                                        //声明一个uuid对象  
  6.     assert(uuid::static_size() == 16);              //uuid的长度总是16  
  7.     assert(u.size() == 16);  
  8.  
  9.     vector<unsigned char> v(16, 7);                 //一个vector对象  
  10.     std::copy(v.begin(), v.end(), u.begin());       //使用标准拷贝算法  
  11.     assert(u.data[0] == u.data[1]                   //数组方式访问  
  12.             && u.data[15] == 7);  
  13.  
  14.     //流输出:07070707-0707-0707-0707-070707070707  
  15.     cout << u << endl;  
  16.     std::fill_n(u.data+ 10,6, 8);                   //标准算法fill_n直接操纵数组  
  17.  
  18.     //流输出:07070707-0707-0707-0707-080808080808  
  19.     cout << u << endl;  
  20. }  

uuid内部定义的枚举类型variant_type标识了UUID的变体号,表示了UUID的布局类型,成员函数variant()可以获得这个UUID的变体号。

UUID的生成有不同的算法,这些算法使用枚举version_type来标识,version()函数可以获得UUID的算法版本。uuid类可以识别现有的五种生成算法,分别是:

基于时间和MAC的算法(version_time_based);

分布计算环境算法(dce_security);

MD5摘要算法(version_name_based_md5);

随机数算法(version_random_number_based);

SHA1摘要算法(version_name_based_sha1)。

在数量庞大的UUID中有一个特殊的全零值nil,它表示一个无效的UUID,成员函数is_nil()可以检测uuid是否是nil。

示范uuid用于表示UUID用法的代码如下:

  1. uuid u ;  
  2. std::fill_n(u.begin(), u.size(), 0xab);         //直接填入0xab  
  3. assert(!u.is_nil());                                //不是无效UUID  
  4. assert(u.variant() == u.variant_rfc_4122);      //4122变体类型  
  5. assert(u.version() == u.version_unknown);       //生成算法未知  
  6. cout << u << endl;                              //一串ab值  
  7.  
  8. std::memset(u.data, 0, 16);                     //可以使用memset操纵数组  
  9. assert(u.is_nil());                             //此时是一个无效的UUID  

uuid还支持各种比较操作,例如:
  1. uuid u1 ,u2;                                        //两个uuid变量  
  2.  
  3. std::fill_n(u1.begin(), u1.size(), 0xab);       //全0xab  
  4. std::fill_n(u2.begin(), u2.size(), 0x10);       //全0x10  
  5. assert(u1 != u2 && u1 > u2);                        // u1 > u2  
  6.  
  7. u2.data[0] = 0xff;                              //u2的第一个字节改为0xff  
  8. assert( u1 < u2);                                   //此时u1 < u2 
  9.  
  10. std::memset(u1.data, 0, 16);                        //两个uuid都置为全0  
  11. std::memset(u2.data, 0, 16);  
  12. assert(u1 == u2);                                   //两者相等  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.10.1 类摘要 下一篇4.12.2 BOOST_CURRENT_FUNCTION

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: