54774bbf618b8004078e4e30d1f8944ec65988a9
[scilab.git] / scilab / modules / ast / src / cpp / types / file.cpp
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2010-2010 - DIGITEO - Antoine ELIAS
4 *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13 *
14 */
15 #include <fstream>
16 #include "file.hxx"
17
18 extern "C"
19 {
20 #include "charEncoding.h"
21 #include "sci_malloc.h"
22 }
23
24 namespace types
25 {
26
27 File::File()
28 {
29     m_fileDesc = NULL;
30     m_iSwap = 0;
31     m_pstMode = "";
32     m_iFortranMode = -1; // see clunit.f
33     m_iType = 0; // 1 : fortran open   2 : c open   3 : std::err std::out std::in
34     m_stFilename = "";
35 }
36
37 File::~File()
38 {
39 }
40
41 void File::setFileDesc(FILE* _fileDesc)
42 {
43     m_fileDesc = _fileDesc;
44 }
45
46 FILE* File::getFiledesc()
47 {
48     return m_fileDesc;
49 }
50
51 void File::setFileMode(const std::string& _pstMode)
52 {
53     m_pstMode = _pstMode;
54 }
55
56 std::string& File::getFileMode()
57 {
58     return m_pstMode;
59 }
60
61 int File::getFileModeAsInt()
62 {
63     int iMode  = 0;
64     int iPlus  = 0;
65     int iBin   = 0;
66
67     for (int i = 0 ; i < (int)strlen(m_pstMode.c_str()) ; i++)
68     {
69         if (m_pstMode[i] == 'r')
70         {
71             iMode = 1;
72         }
73         else if (m_pstMode[i] == 'w')
74         {
75             iMode = 2;
76         }
77         else if (m_pstMode[i] == 'a')
78         {
79             iMode = 3;
80         }
81         else if (m_pstMode[i] == '+')
82         {
83             iPlus = 1;
84         }
85         else if (m_pstMode[i] == 'b')
86         {
87             iBin = 1;
88         }
89     }
90
91     return 100 * iMode + 10 * iPlus + iBin;
92 }
93
94 void File::setFileModeAsInt(int _iMode)
95 {
96     int iMode  = (int)(_iMode / 100);
97     int iPlus  = (int)((_iMode - iMode * 100) / 10);
98     int iBin   = _iMode - iMode * 100 - iPlus * 10;
99
100     m_pstMode = "";
101
102     switch (iMode)
103     {
104         case 2 :
105             m_pstMode += "w";
106             break;
107         case 3 :
108             m_pstMode += "a";
109             break;
110         default:
111             m_pstMode += "r"; // default mode "rb"
112     }
113
114     if (iPlus)
115     {
116         m_pstMode += "+";
117     }
118
119     if (iBin)
120     {
121         m_pstMode += "b";
122     }
123 }
124
125 void File::setFileFortranMode(int _iMode)
126 {
127     m_iFortranMode = _iMode;
128 }
129
130 int File::getFileFortranMode()
131 {
132     return m_iFortranMode;
133 }
134
135 void File::setFileSwap(int _iSwap)
136 {
137     m_iSwap = _iSwap;
138 }
139
140 int File::getFileSwap()
141 {
142     return m_iSwap;
143 }
144
145 void File::setFileType(int _iType)
146 {
147     m_iType = _iType;
148 }
149
150 int File::getFileType()
151 {
152     return m_iType;
153 }
154
155 std::string File::getFileTypeAsString()
156 {
157     switch (getFileType())
158     {
159         case 1 :
160             return "F";
161             break;
162         case 2 :
163             return "C";
164             break;
165         case 3 :
166             return "STD";
167             break;
168         default :
169             return "Error";
170             break;
171     }
172 }
173
174 void File::setFilename(const std::string& _stFilename)
175 {
176     m_stFilename = _stFilename;
177 }
178
179 std::string& File::getFilename()
180 {
181     return m_stFilename;
182 }
183
184 int File::getCountLines()
185 {
186     std::ifstream in(m_stFilename);
187     std::string stLine;
188     int iLines = 0;
189
190     while (std::getline(in, stLine))
191     {
192         iLines++;
193     }
194
195     in.close();
196     return iLines;
197 }
198
199 }