source: Sophya/trunk/SophyaLib/HiStats/basedtable.h@ 2699

Last change on this file since 2699 was 2699, checked in by ansari, 20 years ago

1/ Corrections diverses ds BaseDataTable, en particulier GetSegment() -> GetCstSegment(), et ameliorations/debug divers
2/ Classe SWPPFDataTable debugge, rendu +/- operationnelle
3/ Gestionnaire PPersist de DataTable et SWPPFDataTable fusionnee en une seule
classe ObjFileIO<BaseDataTable> - mis ds fio_dtable.cc
4/ mis a jour histats.h avec swppfdtable.h, objlist.list et histinit.cc

Reza, 27 Avril 2005

File size: 5.9 KB
Line 
1// This may look like C code, but it is really -*- C++ -*-
2// Class BaseDataTable
3// R. Ansari - Avril 2005
4// (C) LAL-IN2P3/CNRS CEA-DAPNIA
5
6#ifndef BASEDTABLE_H_SEEN
7#define BASEDTABLE_H_SEEN
8
9#include "machdefs.h"
10
11#include <iostream>
12#include <string>
13#include <vector>
14
15#include "ntupintf.h"
16#include "dvlist.h"
17#include "segdatablock.h"
18
19namespace SOPHYA {
20class BaseDataTable : public AnyDataObj , public NTupleInterface {
21public:
22 // ===> DO NOT CHANGE EXISTING enum type VALUES !!!
23 enum FieldType {IntegerField=1, LongField=2,
24 FloatField=3, DoubleField=4,
25 ComplexField=5, DoubleComplexField=6,
26 StringField=7, DateField=8};
27 // <=====================================================>
28
29 static string ColTypeToString(FieldType ft, bool fgl=false);
30
31 // constructeur , destructeur
32 BaseDataTable(sa_size_t segsz=512);
33 virtual ~BaseDataTable();
34
35 inline sa_size_t AddIntegerColumn(const char * cnom)
36 { return AddColumn(IntegerField, cnom); }
37 inline sa_size_t AddIntegerColumn(string const & cnom)
38 { return AddColumn(IntegerField, cnom); }
39 inline sa_size_t AddFloatColumn(const char * cnom)
40 { return AddColumn(FloatField, cnom); }
41 inline sa_size_t AddFloatColumn(string const & cnom)
42 { return AddColumn(FloatField, cnom); }
43 inline sa_size_t AddDoubleColumn(const char * cnom)
44 { return AddColumn(DoubleField, cnom); }
45 inline sa_size_t AddDoubleColumn(string const & cnom)
46 { return AddColumn(DoubleField, cnom); }
47
48 inline sa_size_t AddColumn(FieldType ft, const char * cnom)
49 { string nom = cnom; return AddColumn(ft, nom); }
50
51 //! Pure virtual method for adding a new column to the Data Table
52 virtual sa_size_t AddColumn(FieldType ft, string const & cnom) = 0;
53 //! Duplicate the data table structure from the source Table
54 virtual sa_size_t CopyStructure(BaseDataTable const & a);
55 //! Checks if the two table have the same column structure
56 virtual bool CompareStructure(BaseDataTable const & a);
57
58 // Verifie la validite du nom de colonne:envoie une exception
59 // si nom en double ou non valide
60 virtual bool CheckColName(string const & cnom);
61
62 // Acces to various counts and parameters
63 inline sa_size_t NEntry() const { return mNEnt ; }
64 inline sa_size_t NVar() const { return mNames.size() ; }
65 inline sa_size_t NVars() const { return mNames.size() ; }
66 inline sa_size_t SegmentSize() const { return mSegSz ; }
67 inline sa_size_t NbSegments() const { return mNSeg ; }
68
69 // Filling data structures (adding lines)
70 virtual sa_size_t AddLine(const r_8* data);
71 virtual sa_size_t AddLine(const MuTyV * data);
72
73 inline sa_size_t Fill(const r_8* data)
74 { return AddLine(data); }
75 inline sa_size_t Fill(const MuTyV * data);
76
77 virtual sa_size_t Extend();
78
79 // Getting a given line (record) information
80 virtual MuTyV * GetLine(sa_size_t n) const ;
81
82 sa_size_t IndexNom(char const* nom) const ;
83 inline sa_size_t IndexNom(string const & nom) const
84 { return IndexNom(nom.c_str()); }
85 string NomIndex(sa_size_t k) const ;
86
87 //! Copy or merges the data from \b a into the data table (cp=true -> copy)
88 virtual void CopyMerge(BaseDataTable const& a, bool cp=false) ;
89
90 //! Clear/reset the table content and structure.
91 virtual void Clear() = 0;
92
93 // ---- ASCII I/O
94 void Print(int num, int nmax=1) const ;
95
96 void Show(ostream& os) const ;
97 inline void Show() const { Show(cout) ; }
98
99 DVList& Info() const ;
100
101 // Remplissage depuis fichier ASCII
102 int FillFromASCIIFile(string const& fn);
103
104 //-------------------------------------------------------------
105 //----------- Declaration de l interface NTuple --------------
106
107 virtual sa_size_t NbLines() const ;
108 virtual sa_size_t NbColumns() const ;
109 virtual r_8 * GetLineD(sa_size_t n) const ;
110 virtual r_8 GetCell(sa_size_t n, sa_size_t k) const ;
111 virtual r_8 GetCell(sa_size_t n, string const & nom) const ;
112 virtual string GetCelltoString(sa_size_t n, sa_size_t k) const ;
113 virtual void GetMinMax(sa_size_t k, double& min, double& max) const ;
114 virtual void GetMinMax(string const & nom, double& min, double& max) const ;
115 virtual sa_size_t ColumnIndex(string const & nom) const ;
116 virtual string ColumnName(sa_size_t k) const;
117 virtual string VarList_C(const char* nomx=NULL) const ;
118 virtual string LineHeaderToString() const;
119 virtual string LineToString(sa_size_t n) const;
120
121 // Pour la gestion de persistance PPF
122 friend class ObjFileIO<BaseDataTable> ;
123
124protected:
125 uint_8 mNEnt ; // nb total d'entrees
126 uint_8 mSegSz ; // taille bloc/segment
127 uint_8 mNSeg; // Nb total de segments
128 mutable r_8 * mVarD; // Pour retourner une ligne de la table
129 mutable MuTyV * mVarMTV; // Pour retourner une ligne de la table en MuTyV
130
131 typedef struct {
132 string nom;
133 FieldType type;
134 sa_size_t ser;
135 } colst;
136 std::vector<colst> mNames;
137
138 mutable DVList* mInfo; // Infos (variables) attachees au NTuple
139
140 // Pour calculer et garder le min/max
141 mutable std::vector<r_8> mMin;
142 mutable std::vector<r_8> mMax;
143 mutable std::vector<uint_8> mMinMaxNEnt;
144
145 // Les pointeurs des SegDataBlock ...
146 std::vector< SegDBInterface<int_4> * > mIColsP;
147 std::vector< sa_size_t > mIColIdx;
148 std::vector< SegDBInterface<int_8> * > mLColsP;
149 std::vector< sa_size_t > mLColIdx;
150 std::vector< SegDBInterface<r_4> * > mFColsP;
151 std::vector< sa_size_t > mFColIdx;
152 std::vector< SegDBInterface<r_8> * > mDColsP;
153 std::vector< sa_size_t > mDColIdx;
154 std::vector< SegDBInterface<string> * > mSColsP;
155 std::vector< sa_size_t > mSColIdx;
156
157};
158/*! Prints table information (Column name and type, min/max) on stream \b s (bd.Show(s)) */
159inline ostream& operator << (ostream& s, BaseDataTable const & bd)
160 { bd.Show(s); return(s); }
161
162} // namespace SOPHYA
163
164#endif
Note: See TracBrowser for help on using the repository browser.