source: to-imperative/trunk/library/String/create_string.hh @ 900

Last change on this file since 900 was 900, checked in by orlov, 18 years ago
  • Fixes for getting string sample compile.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 1.3 KB
Line 
1// $Source$
2// $Revision: 900 $
3// $Date: 2003-06-29 20:16:57 +0000 (Sun, 29 Jun 2003) $
4// $Author: orlov $
5
6#include <rf_core.hh>
7//#include <rf_string.hh>
8//#include <rf_char.hh>
9//#include <rf_word.hh>
10#include <pxx_sys_error.ih>
11
12namespace refal
13{
14using namespace rfrt;
15using namespace rftype;
16
17namespace String
18{
19
20
21inline static
22WString::String create_string(const Expr &e_Sourse)//, const char *fname)
23{
24  uintptr_t len = 0;
25  Term* p = e_Sourse.get_first();
26
27  for (; p < e_Sourse.get_last(); p++)
28  {
29    if (p->get_type() == type_char)
30      len++;
31    else
32    if (p->get_type() == type_word)
33      len += ((Word*)p)->get_len();
34    else
35    if (p->get_type() == type_string)
36      len += ((WString*)p)->get_length();
37    else
38      RF_LIB_ERROR("Invalid argument");
39  }
40
41  try
42  {
43    WString string(len);
44
45    for (p = e_Sourse.get_first(); p < e_Sourse.get_last(); p++)
46    {
47       string = string + WString(*p);
48#if 0
49      if (p->get_type() == type_char)
50      {
51      }
52      else
53      if (p->get_type() == type_word)
54      {
55        string = string + WString(*p);
56      }
57      else // p points to String
58      {
59        String s = *p;
60        string = string + s;
61        i += s.get_len();
62      }
63#endif
64
65    }
66    return string;
67  }
68  catch (const pxx::SysError &err)
69  {
70    if (err.get_code() == ENOMEM)
71      RF_LIB_ERROR("Size limit excedeed");
72    throw;
73  }
74
75}
76
77}
78
79}
80   
81
Note: See TracBrowser for help on using the repository browser.