Click here to Skip to main content
15,895,709 members
Articles / Programming Languages / C#

An extensible math expression parser with plug-ins

Rate me:
Please Sign up or sign in to vote.
4.92/5 (147 votes)
13 Mar 2008CPOL51 min read 1.5M   29K   364  
Design and code for an extensible, maintainable, robust, and easy to use math parser.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>MTParserLib: MTUnicodeANSIDefs.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.4 -->
<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a></div>
<h1>MTUnicodeANSIDefs.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#include "<a class="code" href="MTUnicodeANSIDefs_8h.html">MTUnicodeANSIDefs.h</a>"</span>
<a name="l00002"></a>00002 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>             <span class="comment">// for the wcstombs function</span>
<a name="l00003"></a>00003 
<a name="l00004"></a><a class="code" href="MTUnicodeANSIDefs_8h.html#a7">00004</a> std::string MTUnicodeToANSI(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span> *pStr)
<a name="l00005"></a>00005 {
<a name="l00006"></a>00006         std::string str;
<a name="l00007"></a>00007 
<a name="l00008"></a>00008         <span class="keywordflow">if</span>( pStr == NULL )
<a name="l00009"></a>00009         {
<a name="l00010"></a>00010                 <span class="keywordflow">return</span> str;
<a name="l00011"></a>00011         }
<a name="l00012"></a>00012         
<a name="l00013"></a>00013         <span class="comment">// Get the required buffer size</span>
<a name="l00014"></a>00014         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size = wcstombs(NULL, pStr, 0);
<a name="l00015"></a>00015         <span class="keywordtype">char</span> *pBuffer = <span class="keyword">new</span> <span class="keywordtype">char</span>[size+1];
<a name="l00016"></a>00016         <span class="keywordflow">if</span>( pBuffer == NULL )
<a name="l00017"></a>00017         {
<a name="l00018"></a>00018                 <span class="comment">// out of memory</span>
<a name="l00019"></a>00019                 <span class="keywordflow">return</span> str;
<a name="l00020"></a>00020         }
<a name="l00021"></a>00021         pBuffer[size] = 0;
<a name="l00022"></a>00022         
<a name="l00023"></a>00023         <span class="keywordflow">if</span>( wcstombs(pBuffer, pStr, size) != (size_t)-1 )
<a name="l00024"></a>00024         {
<a name="l00025"></a>00025                 str = pBuffer;
<a name="l00026"></a>00026         }
<a name="l00027"></a>00027         <span class="keyword">delete</span> []pBuffer;
<a name="l00028"></a>00028         <span class="keywordflow">return</span> str;
<a name="l00029"></a>00029 }
<a name="l00030"></a>00030 
<a name="l00031"></a><a class="code" href="MTUnicodeANSIDefs_8h.html#a8">00031</a> std::wstring MTANSIToUnicode(<span class="keyword">const</span> <span class="keywordtype">char</span> *pStr)
<a name="l00032"></a>00032 {
<a name="l00033"></a>00033         std::wstring str;
<a name="l00034"></a>00034         
<a name="l00035"></a>00035         <span class="comment">// Get the required buffer size</span>
<a name="l00036"></a>00036         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size = mbstowcs(NULL, pStr, 0);
<a name="l00037"></a>00037         <span class="keywordtype">wchar_t</span> *pBuffer = <span class="keyword">new</span> <span class="keywordtype">wchar_t</span>[size+1];
<a name="l00038"></a>00038         <span class="keywordflow">if</span>( pBuffer == NULL )
<a name="l00039"></a>00039         {
<a name="l00040"></a>00040                 <span class="comment">// out of memory</span>
<a name="l00041"></a>00041                 <span class="keywordflow">return</span> str;
<a name="l00042"></a>00042         }
<a name="l00043"></a>00043         pBuffer[size] = 0;
<a name="l00044"></a>00044         
<a name="l00045"></a>00045         <span class="keywordflow">if</span>( mbstowcs(pBuffer, pStr, size) != (size_t)-1 )
<a name="l00046"></a>00046         {
<a name="l00047"></a>00047                 str = pBuffer;
<a name="l00048"></a>00048         }
<a name="l00049"></a>00049         <span class="keyword">delete</span> []pBuffer;
<a name="l00050"></a>00050         <span class="keywordflow">return</span> str;
<a name="l00051"></a>00051 
<a name="l00052"></a>00052 }
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Mar 9 17:39:36 2008 for MTParserLib by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address>
</body>
</html>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Canada Canada
Software Engineer working at a fun and smart startup company

Comments and Discussions