15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/indexed_db/indexed_db_param_traits.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <string> 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/indexed_db/indexed_db_key.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/indexed_db/indexed_db_key_path.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/indexed_db/indexed_db_key_range.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message_utils.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::IndexedDBKey; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::IndexedDBKeyPath; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::IndexedDBKeyRange; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyPathTypeArray; 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyPathTypeNull; 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyPathTypeString; 21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyType; 22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeArray; 23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeDate; 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeInvalid; 25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeMin; 26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeNull; 27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeNumber; 28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeString; 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKey>::Write(Message* m, const param_type& p) { 33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WriteParam(m, static_cast<int>(p.type())); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (p.type()) { 35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeArray: 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.array()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeString: 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.string()); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeDate: 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.date()); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeNumber: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.number()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeInvalid: 48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeNull: 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return; 50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeMin: 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NOTREACHED(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<IndexedDBKey>::Read(const Message* m, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &type)) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 62ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch WebIDBKeyType web_type = static_cast<WebIDBKeyType>(type); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) switch (web_type) { 65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeArray: { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<IndexedDBKey> array; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &array)) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *r = IndexedDBKey(array); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeString: { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 string; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &string)) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *r = IndexedDBKey(string); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 79ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeDate: 80ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeNumber: { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double number; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &number)) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *r = IndexedDBKey(number, web_type); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 87ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeInvalid: 88ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeNull: 8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *r = IndexedDBKey(web_type); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 91ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyTypeMin: 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NOTREACHED(); 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return false; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NOTREACHED(); 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return false; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKey>::Log(const param_type& p, std::string* l) { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("<IndexedDBKey>("); 101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LogParam(static_cast<int>(p.type()), l); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", "); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("["); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<IndexedDBKey>::const_iterator it = p.array().begin(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (it != p.array().end()) { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Log(*it, l); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++it; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (it != p.array().end()) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", "); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("], "); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.string(), l); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", "); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.date(), l); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", "); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.number(), l); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(")"); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKeyPath>::Write(Message* m, const param_type& p) { 121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WriteParam(m, static_cast<int>(p.type())); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (p.type()) { 123ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyPathTypeArray: 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.array()); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 126ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyPathTypeString: 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.string()); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyPathTypeNull: 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<IndexedDBKeyPath>::Read(const Message* m, 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &type)) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 143ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyPathTypeArray: { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<string16> array; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &array)) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 14790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *r = IndexedDBKeyPath(array); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 150ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyPathTypeString: { 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 string; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &string)) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *r = IndexedDBKeyPath(string); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 157ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch case WebIDBKeyPathTypeNull: 15890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *r = IndexedDBKeyPath(); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKeyPath>::Log(const param_type& p, std::string* l) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("<IndexedDBKeyPath>("); 167868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LogParam(static_cast<int>(p.type()), l); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", "); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.string(), l); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", "); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("["); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<string16>::const_iterator it = p.array().begin(); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (it != p.array().end()) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(*it, l); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++it; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (it != p.array().end()) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", "); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("])"); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKeyRange>::Write(Message* m, const param_type& p) { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.lower()); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.upper()); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.lowerOpen()); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.upperOpen()); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<IndexedDBKeyRange>::Read(const Message* m, 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IndexedDBKey lower; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &lower)) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IndexedDBKey upper; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &upper)) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool lower_open; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &lower_open)) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool upper_open; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &upper_open)) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *r = IndexedDBKeyRange(lower, upper, lower_open, upper_open); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKeyRange>::Log(const param_type& p, std::string* l) { 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("<IndexedDBKeyRange>(lower="); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.lower(), l); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", upper="); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.upper(), l); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", lower_open="); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.lowerOpen(), l); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", upper_open="); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.upperOpen(), l); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(")"); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace IPC 225