Esempio n. 1
0
complex_item* types_visitor::deserialize_complex_item()
{    
    uint type;
    is->read((char*)&type, sizeof(uint));
    complex_item* ci = create_complex_item(type);
    simple_item* new_si;

    if(is_simple(type))
    {
        new_si = deserialize_simple_item(type);
        ci->type = COMPLEX_SIMPLE;
        ci->data._simple = new_si;
        return ci;
    }

    vector< complex_item* >* new_tuple;
    set< complex_item* >* new_bag;
    map< simple_item*, complex_item* >* new_map;
    
    (void)new_tuple;
    (void)new_bag;
    (void)new_map;

    switch(type)
    {
    case COMPLEX_TUPLE:  new_tuple = deserialize_tuple();
                         ci->type = COMPLEX_TUPLE;
                         ci->data._tuple = new_tuple;
                         break;
    case COMPLEX_BAG:    new_bag = deserialize_bag();
                         ci->type = COMPLEX_BAG;
                         ci->data._bag = new_bag;
                         break;
    case COMPLEX_MAP:    new_map = deserialize_map();
                         ci->type = COMPLEX_MAP;
                         ci->data._map = new_map;
                         break;
    default:             cerr << "encountered unknown type";
                         break; // TODO: throw something here
    }
    return ci;
}
Esempio n. 2
0
 inline bool operator()( const NodeType & src , MapType & dest ) const
 {
     return deserialize_map( src, dest );
 }