1 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2    Copyright (c) 2012-2021 The plumed team
3    (see the PEOPLE file at the root of the distribution for a list of names)
4 
5    See http://www.plumed.org for more information.
6 
7    This file is part of plumed, version 2.
8 
9    plumed is free software: you can redistribute it and/or modify
10    it under the terms of the GNU Lesser General Public License as published by
11    the Free Software Foundation, either version 3 of the License, or
12    (at your option) any later version.
13 
14    plumed is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU Lesser General Public License for more details.
18 
19    You should have received a copy of the GNU Lesser General Public License
20    along with plumed.  If not, see <http://www.gnu.org/licenses/>.
21 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
22 #ifndef __PLUMED_tools_Citations_h
23 #define __PLUMED_tools_Citations_h
24 
25 #include <vector>
26 #include <string>
27 #include <iosfwd>
28 
29 namespace PLMD {
30 
31 /**
32 \ingroup TOOLBOX
33 Class taking care of bibliography.
34 
35 This class contains a vector of citations. To add a new citations, use cite(). To print
36 the entire bibliography, just dump on a ostream. Everytime cite is used, a string
37 containing the number of the citation is returned. If the same citation is added twice,
38 the same string is returned, so that this example will produce only two bibliographic items:
39 \verbatim
40 #include "Citations.h"
41 #include <iostream>
42 int main(int argc,char**argv){
43   PLMD::Citations citations;
44   std::cout << citations.cite("Pinco e Pallino, Il Piccolo 33, 444 (2012)") << "\n";
45   std::cout << citations.cite("Other cite") << "\n";
46   std::cout << citations.cite("Pinco e Pallino, Il Piccolo 33, 444 (2012)") << "\n";
47 
48   std::cout << "Bibliography\n"<< citations;
49   return 0;
50 }
51 \endverbatim
52 */
53 
54 class Citations {
55   std::vector<std::string> items;
56 public:
57 /// Add a citation.
58 /// It returns a string containing the reference number, something like "[10]"
59   std::string cite(const std::string &);
60 /// Dumps the bibliography.
61 /// It writes on the ostream the list of all the bibliographic items
62 /// prefixed with their reference number
63   friend std::ostream &operator<<(std::ostream &,const Citations&);
64 /// Delete all references
65   void clear();
66 /// Check if bibliography is empty
67   bool empty()const;
68 };
69 
70 std::ostream & operator<<(std::ostream &,const Citations&);
71 
72 }
73 
74 #endif
75