| //===-------------------------- random.cpp --------------------------------===// | 
 | // | 
 | //                     The LLVM Compiler Infrastructure | 
 | // | 
 | // This file is distributed under the University of Illinois Open Source | 
 | // License. See LICENSE.TXT for details. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #include "random" | 
 | #include "system_error" | 
 |  | 
 | #include <fcntl.h> | 
 | #include <unistd.h> | 
 | #include <errno.h> | 
 |  | 
 | _LIBCPP_BEGIN_NAMESPACE_STD | 
 |  | 
 | random_device::random_device(const string& __token) | 
 |     : __f_(open(__token.c_str(), O_RDONLY)) | 
 | { | 
 |     if (__f_ <= 0) | 
 |         __throw_system_error(errno, ("random_device failed to open " + __token).c_str()); | 
 | } | 
 |  | 
 | random_device::~random_device() | 
 | { | 
 |     close(__f_); | 
 | } | 
 |  | 
 | unsigned | 
 | random_device::operator()() | 
 | { | 
 |     unsigned r; | 
 |     read(__f_, &r, sizeof(r)); | 
 |     return r; | 
 | } | 
 |  | 
 | double | 
 | random_device::entropy() const | 
 | { | 
 |     return 0; | 
 | } | 
 |  | 
 | _LIBCPP_END_NAMESPACE_STD |