// -*- C++ -*- // Boost general library 'format' --------------------------- // See http://www.boost.org for updates, documentation, and revision history. // (C) Samuel Krempp 2001 // krempp@crans.ens-cachan.fr // Permission to copy, use, modify, sell and // distribute this software is granted provided this copyright notice appears // in all copies. This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // ideas taken from Rudiger Loos's format class // and Karl Nelson's ofstream (also took its parsing code as basis for printf parsing) // ------------------------------------------------------------------------------ // parsing.hpp : implementation of the parsing member functions // ( parse, parse_printf_directive) // ------------------------------------------------------------------------------ #ifndef BOOST_FORMAT_PARSING_HPP #define BOOST_FORMAT_PARSING_HPP #include #include
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2023-10-16 09:09:52 +0200
committerLudovic Courtès <ludo@gnu.org>2023-11-15 11:36:20 +0100
commit975350fab742f0c723e8b4b41321a919fafc0fbf (patch)
treef0b203a5bd681f953fad2c50ec296509c6e5a1c9 /etc/time-travel-manifest.scm
parentd117c6b42217ee8b3c813578eb799800aa45bd10 (diff)
downloadguix-975350fab742f0c723e8b4b41321a919fafc0fbf.tar.gz
guix-975350fab742f0c723e8b4b41321a919fafc0fbf.zip
gnu: ucx: Update to 1.15.0.
* gnu/packages/fabric-management.scm (ucx): Update to 1.15.0. * gnu/packages/patches/ucx-tcp-iface-ioctl.patch: Update for 1.15.0.
Diffstat (limited to 'etc/time-travel-manifest.scm')
0 files changed, 0 insertions, 0 deletions
s_ |= std::ios::left; break; case '=': fpar->pad_scheme_ |= format_item_t::centered; break; case ' ': fpar->pad_scheme_ |= format_item_t::spacepad; break; case '+': fpar->ref_state_.flags_ |= std::ios::showpos; break; case '0': fpar->pad_scheme_ |= format_item_t::zeropad; // need to know alignment before really setting flags, // so just add 'zeropad' flag for now, it will be processed later. break; case '#': fpar->ref_state_.flags_ |= std::ios::showpoint | std::ios::showbase; break; default: goto parse_width; } ++i1; } // loop on flag. if( i1>=buf.size()) { maybe_throw_exception(exceptions); return true; } parse_width: // handle width spec skip_asterisk(buf, &i1, os); // skips 'asterisk fields' : *, or *N$ i0 = i1; // save position before digits while (i1ref_state_.width_ = str2int( buf,i0, os, std::streamsize(0) ); } parse_precision: if( i1>=buf.size()) { maybe_throw_exception(exceptions); return true; } // handle precision spec if (buf[i1]=='.') { ++i1; skip_asterisk(buf, &i1, os); i0 = i1; // save position before digits while (i1ref_state_.precision_ = 0; else fpar->ref_state_.precision_ = str2int(buf,i0, os, std::streamsize(0) ); } // handle formatting-type flags : while( i1=buf.size()) { maybe_throw_exception(exceptions); return true; } if( in_brackets && buf[i1]=='|' ) { ++i1; return true; } switch (buf[i1]) { case 'X': fpar->ref_state_.flags_ |= std::ios::uppercase; case 'p': // pointer => set hex. case 'x': fpar->ref_state_.flags_ &= ~std::ios::basefield; fpar->ref_state_.flags_ |= std::ios::hex; break; case 'o': fpar->ref_state_.flags_ &= ~std::ios::basefield; fpar->ref_state_.flags_ |= std::ios::oct; break; case 'E': fpar->ref_state_.flags_ |= std::ios::uppercase; case 'e': fpar->ref_state_.flags_ &= ~std::ios::floatfield; fpar->ref_state_.flags_ |= std::ios::scientific; fpar->ref_state_.flags_ &= ~std::ios::basefield; fpar->ref_state_.flags_ |= std::ios::dec; break; case 'f': fpar->ref_state_.flags_ &= ~std::ios::floatfield; fpar->ref_state_.flags_ |= std::ios::fixed; case 'u': case 'd': case 'i': fpar->ref_state_.flags_ &= ~std::ios::basefield; fpar->ref_state_.flags_ |= std::ios::dec; break; case 'T': ++i1; if( i1 >= buf.size()) maybe_throw_exception(exceptions); else fpar->ref_state_.fill_ = buf[i1]; fpar->pad_scheme_ |= format_item_t::tabulation; fpar->argN_ = format_item_t::argN_tabulation; break; case 't': fpar->ref_state_.fill_ = ' '; fpar->pad_scheme_ |= format_item_t::tabulation; fpar->argN_ = format_item_t::argN_tabulation; break; case 'G': fpar->ref_state_.flags_ |= std::ios::uppercase; break; case 'g': // 'g' conversion is default for floats. fpar->ref_state_.flags_ &= ~std::ios::basefield; fpar->ref_state_.flags_ |= std::ios::dec; // CLEAR all floatield flags, so stream will CHOOSE fpar->ref_state_.flags_ &= ~std::ios::floatfield; break; case 'C': case 'c': fpar->truncate_ = 1; break; case 'S': case 's': fpar->truncate_ = fpar->ref_state_.precision_; fpar->ref_state_.precision_ = -1; break; case 'n' : fpar->argN_ = format_item_t::argN_ignored; break; default: maybe_throw_exception(exceptions); } ++i1; if( in_brackets ) { if( i1= buf.size() ) { if(exceptions() & io::bad_format_string_bit) boost::throw_exception(io::bad_format_string()); // must not end in "bla bla %" else break; // stop there, ignore last '%' } if(buf[i1+1] == buf[i1] ) { i1+=2; continue; } // escaped "%%" / "##" ++i1; // in case of %N% directives, dont count it double (wastes allocations..) : while(i1 < buf.size() && io::detail::wrap_isdigit(buf[i1],oss_)) ++i1; if( i1 < buf.size() && buf[i1] == arg_mark ) ++ i1; ++num_items; } items_.assign( num_items, format_item_t() ); // B: Now the real parsing of the format string : num_items=0; i1 = 0; string_t::size_type i0 = i1; bool special_things=false; int cur_it=0; while( (i1=buf.find(arg_mark,i1)) != string::npos ) { string_t & piece = (cur_it==0) ? prefix_ : items_[cur_it-1].appendix_; if( buf[i1+1] == buf[i1] ) // escaped mark, '%%' { piece += buf.substr(i0, i1-i0) + buf[i1]; i1+=2; i0=i1; continue; } BOOST_ASSERT( static_cast(cur_it) < items_.size() || cur_it==0); if(i1!=i0) piece += buf.substr(i0, i1-i0); ++i1; bool parse_ok; parse_ok = io::detail::parse_printf_directive(buf, &i1, &items_[cur_it], oss_, exceptions()); if( ! parse_ok ) continue; // the directive will be printed verbatim i0=i1; items_[cur_it].compute_states(); // process complex options, like zeropad, into stream params. int argN=items_[cur_it].argN_; if(argN == format_item_t::argN_ignored) continue; if(argN ==format_item_t::argN_no_posit) ordered_args=false; else if(argN == format_item_t::argN_tabulation) special_things=true; else if(argN > max_argN) max_argN = argN; ++num_items; ++cur_it; } // loop on %'s BOOST_ASSERT(cur_it == num_items); // store the final piece of string string_t & piece = (cur_it==0) ? prefix_ : items_[cur_it-1].appendix_; piece += buf.substr(i0); if( !ordered_args) { if(max_argN >= 0 ) // dont mix positional with non-positionnal directives { if(exceptions() & io::bad_format_string_bit) boost::throw_exception(io::bad_format_string()); // else do nothing. => positionnal arguments are processed as non-positionnal } // set things like it would have been with positional directives : int non_ordered_items = 0; for(int i=0; i< num_items; ++i) if(items_[i].argN_ == format_item_t::argN_no_posit) { items_[i].argN_ = non_ordered_items; ++non_ordered_items; } max_argN = non_ordered_items-1; } // C: set some member data : items_.resize(num_items); if(special_things) style_ |= special_needs; num_args_ = max_argN + 1; if(ordered_args) style_ |= ordered; else style_ &= ~ordered; } } // namespace boost #endif // BOOST_FORMAT_PARSING_HPP