Feb 25, 2014

[c++][session id gen][note] Generate Session Id

#include <vector>                                                                            
#include <random>                                                                            
#include <limits>                                                                            
#include <algorithm>                                                                         
#include <iostream>                                                                          
                                                                                             
                                                                                             
class RandomGenerator                                                                        
{                                                                                            
private:                                                                                     
using Uniform_Dist_ushort_t = std::uniform_int_distribution<unsigned short>;                 
                                                                                             
public:                                                                                      
   unsigned long long GenSessionId()                                                         
   {                                                                                         
      std::vector<unsigned int> argv{                                                        
         ushort_dist(mt),                                                                    
         ushort_dist(mt),                                                                    
         ushort_dist(mt),                                                                    
         ushort_dist(mt)};                                                                   
                                                                                             
      std::shuffle(argv.begin(), argv.end(), mt);                                            
                                                                                             
      sessionID_u seid;                                                                      
      seid.a = argv[0];                                                                      
      seid.b = argv[1];                                                                      
      seid.c = argv[2];                                                                      
      seid.d = argv[3];                                                                      
                                                                                             
      return seid.id;                                                                        
   }                                                                                         
                                                                                             
private:                                                                                     
   union sessionID_u                                                                         
   {                                                                                         
      struct{                                                                                
         unsigned short a;                                                                   
         unsigned short b;                                                                   
         unsigned short c;                                                                   
         unsigned short d;                                                                   
      };                                                                                     
      unsigned long long id;                                                                 
   };                                                                                        
                                                                                             
   sessionID_u seid;                                                                         
                                                                                             
private:                                                                                     
   std::random_device rd;                                                                    
   std::mt19937 mt{rd()};                                                                    
   Uniform_Dist_ushort_t ushort_dist{0, std::numeric_limits<unsigned short>::max()};         
};                                                                                           
                                                                                             
                                                                                             
int main()                                                                                   
{                                                                                            
   std::cout << RandomGenerator().GenSessionId() << std::endl;                               
} 

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.