Changeset 888


Ignore:
Timestamp:
Jun 29, 2003, 8:50:45 PM (18 years ago)
Author:
luba
Message:
  • String library function
Location:
to-imperative/trunk/library/String
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/library/String/create_string.hh

    r360 r888  
    55
    66#include <rf_core.hh>
    7 #include <rf_string.hh>
    8 #include <rf_char.hh>
    9 #include <rf_word.hh>
     7//#include <rf_string.hh>
     8//#include <rf_char.hh>
     9//#include <rf_word.hh>
    1010
    1111namespace refal
    1212{
    13 
    1413using namespace rfrt;
    1514using namespace rftype;
     
    1817{
    1918
     19
    2020inline static
    21 rf_string::String create_string(const Expr &e_Sourse, const char *fname)
     21WString::String create_string(const Expr &e_Sourse)//, const char *fname)
    2222{
    2323  uintptr_t len = 0;
     
    2626  for (; p < e_Sourse.get_last(); p++)
    2727  {
    28     if (p->get_type() == RF_TYPE(Char))
     28    if (p->get_type() == type_char)
    2929      len++;
    3030    else
    31     if (p->get_type() == RF_TYPE(Word))
    32       len += Word(*p).get_len();
     31    if (p->get_type() == type_word)
     32      len += ((Word*)p)->get_len();
    3333    else
    34     if (p->get_type() == RF_TYPE(WString))
    35       len += WString(*p).get_len();
     34    if (p->get_type() == type_string)
     35      len += ((WString*)p)->get_length();
    3636    else
    37       RF_LIB_ERROR_IN_FUNC(fname, "Invalid argument");
     37      RF_LIB_ERROR("Invalid argument");
    3838  }
    3939
     
    4242    WString string(len);
    4343
    44     WString::Iterator i = string;
    45    
    4644    for (p = e_Sourse.get_first(); p < e_Sourse.get_last(); p++)
    4745    {
    48       if (p->get_type() == RF_TYPE(Char))
     46       string = string + WString(*p);
     47#if 0
     48      if (p->get_type() == type_char)
    4949      {
    50         *i++ = Char(*p);
    5150      }
    5251      else
    53       if (p->get_type() == RF_TYPE(Word))
     52      if (p->get_type() == type_word)
    5453      {
    55         Word::Iterator wi = Word(*p);
    56         while (wi.in_bounds())
    57           *i++ = *wi++;
     54        string = string + WString(*p);
    5855      }
    5956      else // p points to String
    6057      {
    61         WString s = *p;
    62         i.fill_with_string(s);
     58        String s = *p;
     59        string = string + s;
    6360        i += s.get_len();
    6461      }
     62#endif
     63
    6564    }
    66 
    6765    return string;
    68 
    6966  }
    7067  catch (const pxx::SysError &err)
    7168  {
    7269    if (err.get_code() == ENOMEM)
    73       RF_LIB_ERROR_IN_FUNC(fname, "Size limit excedeed");
     70      RF_LIB_ERROR("Size limit excedeed");
    7471    throw;
    7572  }
     
    8077
    8178}
     79   
    8280
  • to-imperative/trunk/library/String/string.cc

    r362 r888  
    55
    66#include <rf_core.hh>
    7 #include <rf_string.hh>
    87
    98#include "create_string.hh"
     
    1918
    2019RF_FUNC (String, (RF_ARG e_Sourse), (RF_RES s_String))
     20 
     21  WString string = create_string(e_Sourse);//, __func__);
     22  //for (size_t i = 0; i < string.get_length(); i++)
     23  //  printf ("string[i] = %c\n", string[i]);
    2124
    22   s_String = create_string(e_Sourse, __func__).to_symbol();
    23 
     25  rftype::String& _str = static_cast<rftype::String&>(string);
     26  rftype::String* str_ptr = &_str;
     27  s_String = rftype::String::create_expr(str_ptr);
     28  // printf ("string end\n");   
    2429RF_END
    2530
    2631}
     32 
     33}
    2734
    28 }
     35
Note: See TracChangeset for help on using the changeset viewer.