Version: 9.16.0
UNV_Utilities.hxx
Go to the documentation of this file.
1// Copyright (C) 2007-2026 CEA, EDF, OPEN CASCADE
2//
3// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5//
6// This library is free software; you can redistribute it and/or
7// modify it under the terms of the GNU Lesser General Public
8// License as published by the Free Software Foundation; either
9// version 2.1 of the License, or (at your option) any later version.
10//
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// Lesser General Public License for more details.
15//
16// You should have received a copy of the GNU Lesser General Public
17// License along with this library; if not, write to the Free Software
18// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19//
20// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21//
22
23#ifndef UNV_Utilities_HeaderFile
24#define UNV_Utilities_HeaderFile
25
26#include "SMESH_DriverUNV.hxx"
27
28#include <iostream>
29#include <sstream>
30#include <fstream>
31#include <string>
32#include <stdexcept>
33#include <cassert>
34#include <cstdlib>
35
36namespace UNV {
37
38 const size_t theMaxLineLen = 82; // 80 for text + 2 for "\r\n"
39
41 static int myCounter;
42 public:
45
46 static std::string GetPrefix();
47 };
48
54 inline bool beginning_of_dataset(std::istream& in_file, const std::string& ds_name)
55 {
56 assert (in_file.good());
57 assert (!ds_name.empty());
58
59 std::string olds, news;
60
61 in_file.seekg(0);
62 while(true)
63 {
64 in_file >> olds >> news;
65 /*
66 * a "-1" followed by a number means the beginning of a dataset
67 * stop combing at the end of the file
68 */
69 while( ((olds != "-1") || (news == "-1")))
70 {
71 olds = news;
72 in_file >> news;
73
74 if ( in_file.eof() || in_file.fail() )
75 {
76 in_file.clear();
77 return false;
78 }
79 }
80 if (news == ds_name)
81 return true;
82
83 olds.clear();
84 }
85 // should never end up here
86 return false;
87 }
88
95 inline double D_to_e(std::string& number)
96 {
97 /* find "D" in string, start looking at
98 * 6th element, to improve speed.
99 * We don't expect a "D" earlier
100 */
101 const size_t position = number.find("D",6);
102 if ( position != std::string::npos )
103 number.replace(position, 1, "e");
104
105 return atof (number.c_str());
106 }
107
113 inline bool check_file(const std::string theFileName)
114 {
115 std::ifstream in_stream(theFileName.c_str());
116 if (!in_stream)
117 return false;
118 std::string olds, news;
119 while (!in_stream.eof()){
120 olds = news;
121 std::getline(in_stream, news, '\n');
122 }
123 return (olds == " -1");
124 }
125
133 inline std::string read_line(std::ifstream& in_stream, const bool next=true)
134 {
135 std::string resLine;
136 std::getline( in_stream, resLine );
137 if ( next )
138 std::getline( in_stream, resLine );
139
140 if ( resLine.size() > 0 && resLine[ resLine.size()-1 ] == '\r' )
141 resLine.resize( resLine.size()-1 );
142 return resLine;
143 }
144}
145
146
147#ifndef MESSAGE
148
149#define MESSAGE(msg) std::cout<<__FILE__<<"["<<__LINE__<<"]::"<<msg<<endl;
150
151#define BEGMSG(msg) std::cout<<UNV::PrefixPrinter::GetPrefix()<<msg
152
153#define ADDMSG(msg) std::cout<<msg
154
155#endif
156
157
158#ifndef EXCEPTION
159
160#define EXCEPTION(TYPE, MSG) {\
161 std::ostringstream aStream;\
162 aStream<<__FILE__<<"["<<__LINE__<<"]::"<<MSG;\
163 throw TYPE(aStream.str());\
164}
165
166#endif
167
168#endif
#define MESHDRIVERUNV_EXPORT
Definition: SMESH_DriverUNV.hxx:37
Definition: UNV_Utilities.hxx:40
static int myCounter
Definition: UNV_Utilities.hxx:41
Definition: UNV_Utilities.hxx:36
double D_to_e(std::string &number)
Method for converting exponential notation from "D" to "e", for example 3.141592654D+00 --> 3....
Definition: UNV_Utilities.hxx:95
bool check_file(const std::string theFileName)
Definition: UNV_Utilities.hxx:113
bool beginning_of_dataset(std::istream &in_file, const std::string &ds_name)
Definition: UNV_Utilities.hxx:54
const size_t theMaxLineLen
Definition: UNV_Utilities.hxx:38
std::string read_line(std::ifstream &in_stream, const bool next=true)
reads a whole line
Definition: UNV_Utilities.hxx:133