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

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

correction petit bug ds datacard.cc (ajout fclose(fip)) et numero de version - Reza 22/9/2000

File size: 2.5 KB
Line 
1// This may look like C code, but it is really -*- C++ -*-
2//
3// $Id: datacards.h,v 1.3 2000-09-22 10:37:44 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();
50 bool HasKey(string const& key);
51 int NbParam(string const& key);
52 string SParam(string const& key, int numero = 0, string def="");
53 long IParam(string const& key, int numero = 0, long def = 0);
54 double DParam(string const& key, int numero = 0, double def = 0);
55
56 void Print(ostream& s) const;
57
58protected:
59 struct Card {
60 string kw;
61 vector<string> tokens;
62 bool operator == (Card const & b) const { return(kw == b.kw); }
63 bool operator < (Card const & b) const { return(kw < b.kw); }
64 };
65 struct CrdPF {
66 ProcCard pf;
67 string patt;
68 bool operator == (CrdPF const & b) const { return(pf == b.pf); }
69 bool operator < (CrdPF const & b) const { return(pf == b.pf); }
70 };
71
72 void DoReadFile(string const& fn);
73
74 int ApplyPF(CrdPF & cpf, string const& key, string const& toks);
75 int ApplyPFL(string const& key, string const& toks);
76
77 void RemoveCard(string const& key);
78
79 Card* FindKey(string const& key);
80
81 typedef list<Card> CardList;
82 typedef list<CrdPF> CrdPFList;
83 CardList cards;
84 CrdPFList cpfs;
85
86 struct KeyEq : binary_function<Card, string, bool> {
87 bool operator()(const Card& x, const string& y) const { return x.kw == y; }
88 };
89};
90
91//! operator << overloading - calls Print()
92inline ostream& operator << (ostream& s, DataCards const & c)
93{ c.Print(s); return s; }
94
95} // namespace SOPHYA
96
97#endif
Note: See TracBrowser for help on using the repository browser.