1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <locale> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class num_get<charT, InputIterator> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// iter_type get(iter_type in, iter_type end, ios_base&, 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// ios_base::iostate& err, unsigned long& v) const; 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <locale> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <ios> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <streambuf> 2183e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "test_iterators.h" 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttypedef std::num_get<char, input_iterator<const char*> > F; 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass my_facet 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public F 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit my_facet(std::size_t refs = 0) 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : F(refs) {} 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass my_numpunct 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public std::numpunct<char> 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant my_numpunct() : std::numpunct<char>() {} 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_thousands_sep() const {return '_';} 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual std::string do_grouping() const {return std::string("\1\2\3");} 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const my_facet f(1); 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = -1; 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char str[] = "0"; 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 5222a74dcf50ff4338767607fa5a9d2916c2c85525Howard Hinnant input_iterator<const char*> iter = 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant f.get(input_iterator<const char*>(str), 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant input_iterator<const char*>(str+sizeof(str)), 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios, err, v); 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(iter.base() == str+sizeof(str)-1); 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(err == ios.goodbit); 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(v == 0); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char str[] = "1"; 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 6322a74dcf50ff4338767607fa5a9d2916c2c85525Howard Hinnant input_iterator<const char*> iter = 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant f.get(input_iterator<const char*>(str), 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant input_iterator<const char*>(str+sizeof(str)), 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios, err, v); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(iter.base() == str+sizeof(str)-1); 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(err == ios.goodbit); 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(v == 1); 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char str[] = "0xFFFFFFFF"; 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 7522a74dcf50ff4338767607fa5a9d2916c2c85525Howard Hinnant input_iterator<const char*> iter = 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant f.get(input_iterator<const char*>(str), 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant input_iterator<const char*>(str+sizeof(str)), 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios, err, v); 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(iter.base() == str+sizeof(str)-1); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(err == ios.goodbit); 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(v == 0xFFFFFFFF); 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 84