source: Sophya/trunk/SophyaLib/SUtils/datacards.h@ 2706

Last change on this file since 2706 was 1258, checked in by ansari, 25 years ago

Nouvelles methodes ds datacard.cc et pb commentaires ds gnumd5.c , Reza 24/10/2000

File size: 2.7 KB
Line 
1// This may look like C code, but it is really -*- C++ -*-
2//
3// $Id: datacards.h,v 1.4 2000-10-24 17:35:04 ansari Exp $
4//
5// Datacards, acquisition EROS II
6//
7//
8// Eric Aubourg, Decembre 95
9// Reza Ansari, Aout 96
10//
11// DAPNIA/SPP (Saclay) / CEA LAL - IN2P3/CNRS (Orsay)
12
13#ifndef DATACARDS_SEEN
14#define DATACARDS_SEEN
15
16#include "machdefs.h"
17#include <string.h>
18#include <string>
19#include <functional>
20#include <list>
21#include <vector>
22
23
24namespace SOPHYA {
25
26typedef int (*ProcCard)(string const& key, string const& toks);
27
28//! Class for decoding parameters from an ascii file.
29
30class DataCards {
31public:
32
33 DataCards();
34 DataCards(string const& fn);
35
36 // nom dans variable d'environnement SOPHYA_DATACARDS
37 // par defaut, sophya.datacards
38 // Si pas chemin complet, on tente dans repertoire
39 // en cours, puis dans SOPHYA_WORK
40
41 virtual ~DataCards() {}
42
43 void AddProcF(ProcCard f, string const& mtch="*");
44
45 void Clear();
46 void ReadFile(string const& fn);
47 void AppendCard(string const& line);
48
49 int NbCards() const;
50 bool HasKey(string const& key) const;
51 int NbParam(string const& key) const;
52 string GetKey(int num) const;
53 string GetParams(string const& key) const;
54 string SParam(string const& key, int numero = 0, string def="") const;
55 long IParam(string const& key, int numero = 0, long def = 0) const;
56 double DParam(string const& key, int numero = 0, double def = 0) const;
57
58 void Print(ostream& s) const;
59
60protected:
61 struct Card {
62 string kw;
63 vector<string> tokens;
64 bool operator == (Card const & b) const { return(kw == b.kw); }
65 bool operator < (Card const & b) const { return(kw < b.kw); }
66 };
67 struct CrdPF {
68 ProcCard pf;
69 string patt;
70 bool operator == (CrdPF const & b) const { return(pf == b.pf); }
71 bool operator < (CrdPF const & b) const { return(pf == b.pf); }
72 };
73
74 void DoReadFile(string const& fn);
75
76 int ApplyPF(CrdPF & cpf, string const& key, string const& toks);
77 int ApplyPFL(string const& key, string const& toks);
78
79 void RemoveCard(string const& key);
80
81 Card* FindKey(string const& key) ;
82
83 typedef list<Card> CardList;
84 typedef list<CrdPF> CrdPFList;
85
86 CardList::const_iterator FindKeyC(string const& key) const;
87
88 CardList cards;
89 CrdPFList cpfs;
90
91 struct KeyEq : binary_function<Card, string, bool> {
92 bool operator()(const Card& x, const string& y) const { return x.kw == y; }
93 };
94};
95
96//! operator << overloading - calls Print()
97inline ostream& operator << (ostream& s, DataCards const & c)
98{ c.Print(s); return s; }
99
100} // namespace SOPHYA
101
102#endif
Note: See TracBrowser for help on using the repository browser.