fix library path
[scilab.git] / scilab / modules / ast / src / cpp / types / library.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
4  *
5  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #include <sstream>
14 #include "macrofile.hxx"
15 #include "library.hxx"
16 #include "localization.hxx"
17 #include "configvariable.hxx"
18 #include "scilabWrite.hxx"
19
20 extern "C"
21 {
22 #include <wchar.h>
23 #include "os_swprintf.h"
24 }
25
26 namespace types
27 {
28 Library::Library(const std::wstring& _wstPath) :
29     m_wstPath(_wstPath)
30 {
31 }
32
33 Library::~Library()
34 {
35     //delete all macrofile*
36     for (MacroMap::iterator it = m_macros.begin(); it != m_macros.end() ; ++it)
37     {
38         MacroFile* pMacro = it->second;
39         pMacro->DecreaseRef();
40         if (pMacro->isDeletable())
41         {
42             delete pMacro;
43         }
44     }
45
46     m_macros.clear();
47 }
48
49 bool Library::toString(std::wostringstream& ostr)
50 {
51     wchar_t output[1024] = {0};
52     os_swprintf(output, 1024, _W("Functions files location : %s.\n").c_str(), m_wstPath.c_str());
53
54     ostr << output << std::endl;
55
56     size_t iLineLen = (size_t)ConfigVariable::getConsoleWidth();
57
58     size_t iCurrentLen = 0;
59     MacroMap::iterator it = m_macros.begin();
60     for (int i = 0; it != m_macros.end() ; ++it, ++i)
61     {
62         if (iCurrentLen + it->first.length() + 2 > iLineLen)
63         {
64             ostr << std::endl;
65             iCurrentLen = 0;
66         }
67         ostr << it->first << "  ";
68         iCurrentLen += it->first.length() + 2;
69     }
70
71     ostr << std::endl;
72
73     return true;
74 }
75
76 InternalType* Library::clone()
77 {
78     IncreaseRef();
79     return this;
80 }
81
82 bool Library::extract(const std::wstring & name, InternalType *& out)
83 {
84     out = get(name);
85     if (out == NULL)
86     {
87         wchar_t szError[bsiz];
88         os_swprintf(szError, bsiz, _W("Unknown field : %ls.\n").c_str(), name.c_str());
89
90         throw std::wstring(szError);
91     }
92
93     return true;
94 }
95
96 void Library::add(const std::wstring& _wstName, MacroFile* _macro)
97 {
98     _macro->IncreaseRef();
99     m_macros[_wstName] = _macro;
100 }
101
102 MacroFile* Library::get(const std::wstring& _wstName)
103 {
104     MacroMap::iterator it = m_macros.find(_wstName);
105     if (it != m_macros.end())
106     {
107         return it->second;
108     }
109     return NULL;
110 }
111
112 std::list<std::wstring>* Library::getMacrosName()
113 {
114     std::list<std::wstring>* pOut = new std::list<std::wstring>;
115     MacroMap::iterator it = m_macros.begin();
116     for (; it != m_macros.end() ; ++it)
117     {
118         pOut->push_back(it->first);
119     }
120
121     return pOut;
122 }
123
124 std::wstring Library::getPath()
125 {
126     return m_wstPath;
127 }
128 }