aboutsummaryrefslogtreecommitdiff
path: root/nix/boost/format/free_funcs.cc
blob: 151db37a0ac939d1c0581565472115389ddeea63 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// -*- 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 Rüdiger Loos's format class
// and Karl Nelson's ofstream (also took its parsing code as basis for printf parsing)

// ------------------------------------------------------------------------------
// free_funcs.hpp :  implementation of the free functions declared in namespace format
// ------------------------------------------------------------------------------

#ifndef BOOST_FORMAT_FUNCS_HPP
#define BOOST_FORMAT_FUNCS_HPP

#include "boost/format.hpp"
#include "boost/throw_exception.hpp"

namespace boost {

namespace io {
  inline 
  std::string str(const basic_format& f) 
    // adds up all pieces of strings and converted items, and return the formatted string
  {
    return f.str();
  }
}   // - namespace io

BOOST_IO_STD ostream& 
operator<<( BOOST_IO_STD ostream& os, 
            const boost::basic_format& f) 
  // effect: "return os << str(f);" but we can try to do it faster
{
  typedef boost::basic_format   format_t;
  if(f.items_.size()==0) 
    os << f.prefix_;
  else {
    if(f.cur_arg_ < f.num_args_)
      if( f.exceptions() & io::too_few_args_bit )
        boost::throw_exception(io::too_few_args()); // not enough variables have been supplied !
    if(f.style_ & format_t::special_needs) 
        os << f.str();
    else {
    // else we dont have to count chars output, so we dump directly to os :
      os << f.prefix_;
      for(unsigned long i=0; i<f.items_.size(); ++i) 
        {
          const format_t::format_item_t& item = f.items_[i];
          os << item.res_;
          os << item.appendix_;

        }
    }
  }
  f.dumped_=true;
  return os;
}



} // namespace boost


#endif // BOOST_FORMAT_FUNCS_HPP
n. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (test-import-utils) #:use-module (guix tests) #:use-module (guix import utils) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix build-system) #:use-module (gnu packages) #:use-module (srfi srfi-64) #:use-module (ice-9 match)) (test-begin "import-utils") (test-equal "beautify-description: use double spacing" "This is a package. It is great. Trust me Mr. Hendrix." (beautify-description "This is a package. It is great. Trust me Mr. Hendrix.")) (test-equal "beautify-description: transform fragment into sentence" "This package provides a function to establish world peace" (beautify-description "A function to establish world peace")) (test-equal "license->symbol" 'license:lgpl2.0 (license->symbol license:lgpl2.0)) (test-equal "recursive-import" '((package ;package expressions in topological order (name "bar")) (package (name "foo") (inputs `(("bar" ,bar))))) (recursive-import "foo" 'repo #:repo->guix-package (match-lambda* (("foo" 'repo) (values '(package (name "foo") (inputs `(("bar" ,bar)))) '("bar"))) (("bar" 'repo) (values '(package (name "bar")) '()))) #:guix-name identity)) (test-assert "alist->package with simple source" (let* ((meta '(("name" . "hello") ("version" . "2.10") ("source" . ;; Use a 'file://' URI so that we don't cause a download. ,(string-append "file://" (search-path %load-path "guix.scm"))) ("build-system" . "gnu") ("home-page" . "https://gnu.org") ("synopsis" . "Say hi") ("description" . "This package says hi.") ("license" . "GPL-3.0+"))) (pkg (alist->package meta))) (and (package? pkg) (license:license? (package-license pkg)) (build-system? (package-build-system pkg)) (origin? (package-source pkg))))) (test-assert "alist->package with explicit source" (let* ((meta '(("name" . "hello") ("version" . "2.10") ("source" . (("method" . "url-fetch") ("uri" . "mirror://gnu/hello/hello-2.10.tar.gz") ("sha256" . (("base32" . "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))) ("build-system" . "gnu") ("home-page" . "https://gnu.org") ("synopsis" . "Say hi") ("description" . "This package says hi.") ("license" . "GPL-3.0+"))) (pkg (alist->package meta))) (and (package? pkg) (license:license? (package-license pkg)) (build-system? (package-build-system pkg)) (origin? (package-source pkg)) (equal? (origin-sha256 (package-source pkg)) (base32 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))) (test-equal "alist->package with false license" ;<https://bugs.gnu.org/30470> 'license-is-false (let* ((meta '(("name" . "hello") ("version" . "2.10") ("source" . (("method" . "url-fetch") ("uri" . "mirror://gnu/hello/hello-2.10.tar.gz") ("sha256" . (("base32" . "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))) ("build-system" . "gnu") ("home-page" . "https://gnu.org") ("synopsis" . "Say hi") ("description" . "This package says hi.") ("license" . #f)))) ;; Note: Use 'or' because comparing with #f otherwise succeeds when ;; there's an exception instead of an actual #f. (or (package-license (alist->package meta)) 'license-is-false))) (test-equal "alist->package with dependencies" `(("gettext" ,(specification->package "gettext"))) (let* ((meta '(("name" . "hello") ("version" . "2.10") ("source" . (("method" . "url-fetch") ("uri" . "mirror://gnu/hello/hello-2.10.tar.gz") ("sha256" . (("base32" . "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))) ("build-system" . "gnu") ("home-page" . "https://gnu.org") ("synopsis" . "Say hi") ("description" . "This package says hi.") ; ;; Note: As with Guile-JSON 3.x, JSON arrays are represented ;; by vectors. ("native-inputs" . #("gettext")) ("license" . #f)))) (package-native-inputs (alist->package meta)))) (test-end "import-utils")