LCOV - code coverage report
Current view: top level - /Users/moyix/git/vrml - file_handler.cpp (source / functions) Coverage Total Hit
Test: vrml_testfiles.info Lines: 88.5 % 78 69
Test Date: 2024-03-08 16:12:17 Functions: 90.0 % 10 9

            Line data    Source code
       1              : #include "file_handler.h"
       2              : 
       3              : using namespace std;
       4              : 
       5              : 
       6              : vector<string> *token_stack = NULL;
       7              : ifstream *fp = NULL;
       8              : 
       9            3 : void init_token_stack()
      10              : {
      11            3 :     if (token_stack == NULL) {
      12            3 :         token_stack = new vector<string>;
      13            3 :     }
      14            3 : }
      15              : 
      16            0 : void close_file(ifstream *fp)
      17              : {
      18              : 
      19            0 :     fp->close();
      20              : 
      21            0 : }
      22              : 
      23              : 
      24            3 : ifstream *open_file(string file_name)
      25              : {
      26              : 
      27            3 :     fp = new ifstream();
      28            3 :     fp->open(file_name.c_str());
      29              : 
      30            3 :     if (fp->is_open()) {
      31            3 :         init_token_stack();
      32            3 :         return fp;
      33              : 
      34              :     } else {
      35            0 :         cout << "Unable to open file" << endl;
      36            0 :         close_file(fp);
      37            0 :         return NULL;
      38              :     }
      39            3 : }
      40              : 
      41              : 
      42              : 
      43              : 
      44            3 : void empty_token_stack()
      45              : {
      46              :     // opote adeiazei to stack to programma paei kai tsimpaei nea grammi
      47              :     // apo to arxeio
      48            3 :     token_stack->erase(token_stack->begin(), token_stack->end());
      49            3 : }
      50              : 
      51          749 : void trim(string *s)
      52              : {
      53          749 :     size_t p = s->find_first_not_of(" \t");
      54          749 :     s->erase(0, p);
      55              : 
      56          749 :     p = s->find_last_not_of(" \t");
      57          749 :     if (string::npos != p)
      58          748 :     s->erase(p+1);
      59          749 : }
      60              : 
      61          749 : string *read_line(string *line)
      62              : {
      63              : 
      64          749 :     if (fp->good()) {
      65              : 
      66          749 :         getline(*fp, *line);
      67          749 :         trim(line);
      68              : 
      69              :         //cout << "line: " << *line << endl;
      70              : 
      71          749 :     } else {
      72            0 :         line->clear();
      73              :     }
      74          749 :     return line;
      75              : }
      76              : 
      77            3 : void go_to_next_line()
      78              : {
      79            3 :     empty_token_stack();
      80            3 : }
      81              : 
      82              : 
      83         2460 : int is_blank(string token)
      84              : {
      85         2460 :     size_t value = 0;
      86              : 
      87         2460 :     if (token.find_first_not_of("\t\n ") == string::npos) {
      88              :         //string is blank
      89            0 :         value = 1;
      90            0 :     }
      91              : 
      92         2460 :     return value;
      93              : 
      94              : }
      95              : 
      96              : 
      97              : 
      98          748 : void tokenize_line(string line)
      99              : {
     100              : 
     101          748 :     size_t  next = 0;
     102          748 :     size_t  prev = 0;
     103          748 :     string delimiter = " ";
     104          748 :     string substring;
     105              : 
     106         7781 :     while ((next = line.find_first_of(delimiter, prev)) != string::npos) {
     107              : 
     108         7033 :         if (next - prev != 0) {
     109              : 
     110         1712 :             substring = line.substr(prev, next - prev);
     111              : 
     112         1712 :             if (!is_blank(substring)) {
     113              : 
     114         1712 :                 token_stack->push_back(substring);
     115         1712 :             }
     116         1712 :         }
     117         7033 :         prev = next + 1;
     118              :     }
     119              : 
     120          748 :     if (prev < line.size()) {
     121              : 
     122          748 :         substring = line.substr(prev);
     123              : 
     124          748 :         if (!is_blank(substring)) {
     125              : 
     126          748 :             token_stack->push_back(substring);
     127              : 
     128          748 :         }
     129          748 :     }
     130          748 : }
     131              : 
     132              : 
     133         2433 : string get_token()
     134              : {
     135              : 
     136         2433 :     string value, line;
     137              : 
     138              : 
     139         2433 :     if (!token_stack->empty()) {
     140         1684 :         value = token_stack->front();
     141         1684 :         token_stack->erase(token_stack->begin());
     142         1684 :     } else {
     143          749 :         read_line(&line);
     144          749 :         if (line.size() != 0) {
     145          748 :             tokenize_line(line);
     146          748 :             value = token_stack->front();
     147          748 :             token_stack->erase(token_stack->begin());
     148          748 :         }
     149              :     }
     150              : 
     151              :     //cout << "tokn: " << value << endl;
     152         2433 :     return value;
     153              : 
     154         2433 : }
        

Generated by: LCOV version 2.0-1