--- parser3/src/classes/table.C 2001/05/08 08:16:40 1.75 +++ parser3/src/classes/table.C 2001/05/11 17:45:10 1.80 @@ -5,7 +5,7 @@ Author: Alexander Petrosyan (http://design.ru/paf) - $Id: table.C,v 1.75 2001/05/08 08:16:40 paf Exp $ + $Id: table.C,v 1.80 2001/05/11 17:45:10 parser Exp $ */ #include "pa_config_includes.h" @@ -195,7 +195,7 @@ static void _offset(Request& r, const St Table& table=static_cast(r.self)->table(); if(params->size()) { Value& offset_expr=params->get_junction(0, "offset must be expression"); - table.shift((int)r.process(offset_expr).as_double()); + table.shift(r.process(offset_expr).as_int()); } else { Value& value=*new(pool) VInt(pool, table.current()); r.write_no_lang(value); @@ -273,16 +273,9 @@ static void table_row_to_hash(Array::Ite Row_info& ri=*static_cast(info); Pool& pool=ri.table->pool(); - Value *result; - if(ri.value_fields->size()==1) { // key=value [not valueS] - int value_field=ri.value_fields->get_int(0); - if(value_fieldsize(); i++) { int value_field=ri.value_fields->get_int(i); if(value_fieldput(*row.get_string(ri.key_field), &result); } - - if(ri.key_fieldput(*row.get_string(ri.key_field), result); } static void _hash(Request& r, const String& method_name, MethodParams *params) { Table& table=static_cast(r.self)->table(); @@ -333,7 +323,7 @@ static void _hash(Request& r, const Stri } /// used by table: _sort / sort_cmp_string|sort_cmp_double -struct Seq_item { +struct Table_seq_item { Array *row; union { char *c_str; @@ -342,13 +332,13 @@ struct Seq_item { }; static int sort_cmp_string(const void *a, const void *b) { return strcmp( - static_cast(a)->value.c_str, - static_cast(b)->value.c_str + static_cast(a)->value.c_str, + static_cast(b)->value.c_str ); } static int sort_cmp_double(const void *a, const void *b) { - double va=static_cast(a)->value.d; - double vb=static_cast(b)->value.d; + double va=static_cast(a)->value.d; + double vb=static_cast(b)->value.d; if(vavb) @@ -369,7 +359,7 @@ static void _sort(Request& r, const Stri if(!table.size()) return; - Seq_item *seq=(Seq_item *)malloc(sizeof(Seq_item)*table.size()); + Table_seq_item *seq=(Table_seq_item *)malloc(sizeof(Table_seq_item)*table.size()); int i; // calculate key values @@ -388,7 +378,7 @@ static void _sort(Request& r, const Stri seq[i].value.d=value.as_double(); } // sort keys - _qsort(seq, table.size(), sizeof(Seq_item), + _qsort(seq, table.size(), sizeof(Table_seq_item), key_values_are_strings?sort_cmp_string:sort_cmp_double); // reorder table as they require in 'seq' @@ -667,10 +657,8 @@ MTable::MTable(Pool& apool) : Methoded(a // ^table.record[] add_native_method("record", Method::CT_DYNAMIC, _record, 0, 0); - /** @fn _hash - ^table:hash[key field name] - ^table:hash[key field name][value field name;...] - */ + // ^table:hash[key field name] + // ^table:hash[key field name][value field name;...] add_native_method("hash", Method::CT_DYNAMIC, _hash, 1, 1000); // ^table.sort{string-key-maker} ^table.sort{string-key-maker}[asc|desc]