Changeset 1168


Ignore:
Timestamp:
Aug 12, 2003, 11:13:33 PM (17 years ago)
Author:
sveta
Message:
  • Functions modification for Integer-index.
Location:
to-imperative/trunk/library/Vector
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/library/Vector/subvector.cc

    r1114 r1168  
    1414RF_FUNC (Subvector, (RF_ARG _vector, _index, _length), (RF_RES _result))
    1515
    16   if (_vector.get_len() == 1) {
    17     Term* p_vector = _vector.get_first();
    18     rftype::Vector* v = p_vector->cast_to<rftype::Vector>(type_vector);
    19     if (!v)
     16  if (_vector.get_len() != 1)
     17    RF_LIB_ERROR("Invalid argument");
     18  Term* p_vector = _vector.get_first();
     19  rftype::Vector* v = p_vector->cast_to<rftype::Vector>(type_vector);
     20  if (!v)
     21    RF_LIB_ERROR("Invalid argument");
     22  intptr_t ind = 0;
     23  Term* p_index = _index.get_first();
     24  if (p_index->get_type() == type_int) {
     25    Integer* Ind = static_cast<Integer*>(p_index);
     26    if (Ind->cmp(0) < 0 || Ind->cmp(SIZE_MAX) > 0)
    2027      RF_LIB_ERROR("Invalid argument");
    21     Term* t = _index.get_first();
    22     rftype::Int32* p = t->cast_to<rftype::Int32>(type_int32);
    23     if (!p)
    24       RF_LIB_ERROR("Invalid argument");
    25     size_t ind = p->to_int();
    26     t = _length.get_first();
    27     p = t->cast_to<rftype::Int32>(type_int32);
    28     if (!p)
     28    ind = Ind->to_int();
     29  } else {
     30    if (p_index->get_type() != type_int32)
    2931      RF_LIB_ERROR("Invalid argument");
    30     size_t len = p->to_int();   
    31     if (ind + len > v->get_length())
    32       RF_LIB_ERROR("Index out of range");
    33     _result = Expr (new rftype::Vector(*v, ind, len));
    34   } else
     32    intptr_t i = static_cast<Int32*>(p_index)->to_int();
     33    if (i < 0 || uintptr_t(i) > SIZE_MAX)
     34      RF_LIB_ERROR("Invalid Argument");
     35    ind = i;
     36  }
     37  intptr_t len = 0;
     38  Term* p_length = _length.get_first();
     39  if (p_length->get_type() == type_int) {
     40    Integer* Len = static_cast<Integer*>(p_length);
     41    if (Len->cmp(0) < 0 || Len->cmp(SIZE_MAX) > 0)
    3542      RF_LIB_ERROR("Invalid argument");
     43    len = Len->to_int();
     44  } else {
     45    if (p_length->get_type() != type_int32)
     46      RF_LIB_ERROR("Invalid argument");
     47    intptr_t i = static_cast<Int32*>(p_length)->to_int();
     48    if (i < 0 || uintptr_t(i) > SIZE_MAX)
     49      RF_LIB_ERROR("Invalid Argument");
     50    len = i;
     51  }
     52  if ((size_t)(ind + len) > v->get_length())
     53    RF_LIB_ERROR("Index out of range");
     54  _result = Expr (new rftype::Vector(*v, ind, len));
    3655
    3756RF_END
  • to-imperative/trunk/library/Vector/subvector_fill.cc

    r1121 r1168  
    1414RF_FUNC (Subvector_m_Fill, (RF_ARG _vector, _index, _length, _fill), ())
    1515
    16   if (_vector.get_len() == 1) {
    17     Term* p_vector = _vector.get_first();
    18     rftype::Vector* v = p_vector->cast_to<rftype::Vector>(type_vector);
    19     if (!v)
     16  if (_vector.get_len() != 1)
     17    RF_LIB_ERROR("Invalid argument");
     18  Term* p_vector = _vector.get_first();
     19  rftype::Vector* v = p_vector->cast_to<rftype::Vector>(type_vector);
     20  if (!v)
     21    RF_LIB_ERROR("Invalid argument");
     22  intptr_t ind = 0;
     23  intptr_t len = 0;
     24  Term* p_index = _index.get_first();
     25  if (p_index->get_type() == type_int) {
     26    Integer* Ind = static_cast<Integer*>(p_index);
     27    if (Ind->cmp(0) < 0 || Ind->cmp(SIZE_MAX) > 0)
    2028      RF_LIB_ERROR("Invalid argument");
    21     Term* t = _index.get_first();
    22     rftype::Int32* p = t->cast_to<rftype::Int32>(type_int32);
    23     if (!p)
    24       RF_LIB_ERROR("Invalid argument");
    25     size_t ind = p->to_int();
    26     t = _length.get_first();
    27     p = t->cast_to<rftype::Int32>(type_int32);
    28     if (!p)
     29    ind = Ind->to_int();
     30  } else {
     31    if (p_index->get_type() != type_int32)
    2932      RF_LIB_ERROR("Invalid argument");
    30     size_t len = p->to_int();   
    31     if (ind + len > v->get_length())
    32       RF_LIB_ERROR("Index out of range");
    33     for (size_t i = 0; i < len; i++)
    34       (*v)[ind + i] = _fill();
    35   } else
     33    intptr_t i = static_cast<Int32*>(p_index)->to_int();
     34    if (i < 0 || uintptr_t(i) > SIZE_MAX)
     35      RF_LIB_ERROR("Invalid Argument");
     36    ind = i;
     37  }
     38  Term* p_length = _length.get_first();
     39  if (p_length->get_type() == type_int) {
     40    Integer* Len = static_cast<Integer*>(p_length);
     41    if (Len->cmp(0) < 0 || Len->cmp(SIZE_MAX) > 0)
    3642      RF_LIB_ERROR("Invalid argument");
     43    len = Len->to_int();
     44  } else {
     45    if (p_length->get_type() != type_int32)
     46      RF_LIB_ERROR("Invalid argument");
     47    intptr_t i = static_cast<Int32*>(p_length)->to_int();
     48    if (i < 0 || uintptr_t(i) > SIZE_MAX)
     49      RF_LIB_ERROR("Invalid Argument");
     50    len = i;
     51  }
     52  if ( (size_t) (ind + len) > v->get_length())
     53    RF_LIB_ERROR("Index out of range");
     54  for (size_t i = 0; i < (size_t) len; i++)
     55    (*v)[ ((size_t) ind) + i] = _fill();
    3756
    3857RF_END
  • to-imperative/trunk/library/Vector/vector_init.cc

    r1121 r1168  
    1515RF_FUNC (Vector_m_Init, (RF_ARG _vector, _length, _fill), ())
    1616 
    17   if (_vector.get_len() == 1) {
    18     Term* p_vector = _vector.get_first();
    19     printf("init1 ");
    20     rftype::Vector* v = p_vector->cast_to<rftype::Vector>(type_vector);
    21     printf("init2 ");
    22     if (!v)
     17  if (_vector.get_len() != 1)
     18    RF_LIB_ERROR("Invalid argument");
     19  Term* p_vector = _vector.get_first();
     20  rftype::Vector* v = p_vector->cast_to<rftype::Vector>(type_vector);
     21  if (!v)
     22    RF_LIB_ERROR("Invalid argument");
     23  intptr_t len = 0;
     24  Term* p_length = _length.get_first();
     25  if (p_length->get_type() == type_int) {
     26    Integer* Len = static_cast<Integer*>(p_length);
     27    if (Len->cmp(0) < 0 || Len->cmp(SIZE_MAX) > 0)
    2328      RF_LIB_ERROR("Invalid argument");
    24     Term* p_length = _length.get_first();
    25     printf("init3 ");
    26     rftype::Int32* len = p_length->cast_to<rftype::Int32>(type_int32);
    27     if (!len)
    28       RF_LIB_ERROR("Invalid argument");
    29     printf("init4 ");
    30     size_t l = len->to_int(); 
    31     rftype::Vector temp(l,_fill());
    32     (*v) = temp;
    33   } else
     29    len = Len->to_int();
     30  } else {
     31    if (p_length->get_type() != type_int32)
    3432      RF_LIB_ERROR("Invalid argument");
    35 
     33    intptr_t i = static_cast<Int32*>(p_length)->to_int();
     34    if (i < 0 || uintptr_t(i) > SIZE_MAX)
     35      RF_LIB_ERROR("Invalid Argument");
     36    len = i;
     37  }
     38  rftype::Vector temp((size_t)len,_fill());
     39  (*v) = temp;
     40 
    3641RF_END
    3742
  • to-imperative/trunk/library/Vector/vector_ref.cc

    r1114 r1168  
    1414RF_FUNC (Vector_m_Ref, (RF_ARG _vector, _index), (RF_RES _exp))
    1515
    16   if (_vector.get_len() == 1) {
    17     Term* p_vector = _vector.get_first();
    18     rftype::Vector* v = p_vector->cast_to<rftype::Vector>(type_vector);
    19     if (!v)
     16  if (_vector.get_len() != 1)
     17    RF_LIB_ERROR("Invalid argument");
     18  Term* p_vector = _vector.get_first();
     19  rftype::Vector* v = p_vector->cast_to<rftype::Vector>(type_vector);
     20  if (!v)
     21    RF_LIB_ERROR("Invalid argument");
     22  intptr_t ind = 0;
     23  Term* p_index = _index.get_first();
     24  if (p_index->get_type() == type_int) {
     25    Integer* Ind = static_cast<Integer*>(p_index);
     26    if (Ind->cmp(0) < 0 || Ind->cmp(SIZE_MAX) > 0)
    2027      RF_LIB_ERROR("Invalid argument");
    21     Term* p_index = _index.get_first();
    22     rftype::Int32* number = p_index->cast_to<rftype::Int32>(type_int32);
    23     if (!number)
    24       RF_LIB_ERROR("Invalid argument");
    25     else {
    26       size_t n = number->to_int();
    27       if (n > v->get_length())
    28         RF_LIB_ERROR("Index out of range");
    29       _exp = (*v)[n];
    30     }
    31   } else
     28    ind = Ind->to_int();
     29  } else {
     30    if (p_index->get_type() != type_int32)
    3231      RF_LIB_ERROR("Invalid argument");
    33 
     32    intptr_t i = static_cast<Int32*>(p_index)->to_int();
     33    if (i < 0 || uintptr_t(i) > SIZE_MAX)
     34      RF_LIB_ERROR("Invalid Argument");
     35    ind = i;
     36  }
     37  if ( (size_t)ind > v->get_length())
     38    RF_LIB_ERROR("Index out of range");
     39  _exp = (*v)[ind];
     40 
    3441RF_END
    3542
  • to-imperative/trunk/library/Vector/vector_replace.cc

    r1121 r1168  
    4040    rftype::Vector temp(_source, length);
    4141    (*p_vector) = temp;
     42    temp.decrease(length);
    4243  } else
    4344    RF_LIB_ERROR("Invalid argument");
  • to-imperative/trunk/library/Vector/vector_set.cc

    r1114 r1168  
    1414RF_FUNC (Vector_m_Set, (RF_ARG _vector, _index, _exp), ())
    1515
    16   if (_vector.get_len() == 1) {
    17     Term* p_vector = _vector.get_first();
    18     rftype::Vector* v = p_vector->cast_to<rftype::Vector>(type_vector);
    19     if (!v)
     16  if (_vector.get_len() != 1)
     17    RF_LIB_ERROR("Invalid argument");
     18  Term* p_vector = _vector.get_first();
     19  rftype::Vector* v = p_vector->cast_to<rftype::Vector>(type_vector);
     20  if (!v)
     21    RF_LIB_ERROR("Invalid argument");
     22  intptr_t ind = 0;
     23  Term* p_index = _index.get_first();
     24  if (p_index->get_type() == type_int) {
     25    Integer* Ind = static_cast<Integer*>(p_index);
     26    if (Ind->cmp(0) < 0 || Ind->cmp(SIZE_MAX) > 0)
    2027      RF_LIB_ERROR("Invalid argument");
    21     Term* p_index = _index.get_first();
    22     rftype::Int32* numb = p_index->cast_to<rftype::Int32>(type_int32);
    23     if (!numb)
    24       RF_LIB_ERROR("Invalid argument");
    25     else {
    26       size_t index = numb->to_int();
    27       if (index < v->get_length())
    28         (*v)[index] = _exp;
    29       else
    30         RF_LIB_ERROR("Index out of range");
    31     }
    32   } else
     28    ind = Ind->to_int();
     29  } else {
     30    if (p_index->get_type() != type_int32)
    3331      RF_LIB_ERROR("Invalid argument");
     32    intptr_t i = static_cast<Int32*>(p_index)->to_int();
     33    if (i < 0 || uintptr_t(i) > SIZE_MAX)
     34      RF_LIB_ERROR("Invalid Argument");
     35    ind = i;
     36  }
     37  if ((size_t)ind > v->get_length())
     38    RF_LIB_ERROR("Index out of range");
     39  (*v)[ind] = _exp;
    3440
    3541RF_END
Note: See TracChangeset for help on using the changeset viewer.