1/* 2 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name of Google Inc. nor the names of its 15 * contributors may be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31/** 32 * @interface 33 */ 34WebInspector.CompletionDictionary = function() { } 35 36WebInspector.CompletionDictionary.prototype = { 37 /** 38 * @param {string} word 39 */ 40 addWord: function(word) { }, 41 42 /** 43 * @param {string} word 44 */ 45 removeWord: function(word) { }, 46 47 /** 48 * @param {string} word 49 * @return {boolean} 50 */ 51 hasWord: function(word) { }, 52 53 /** 54 * @param {string} prefix 55 * @return {!Array.<string>} 56 */ 57 wordsWithPrefix: function(prefix) { }, 58 59 /** 60 * @param {string} word 61 * @return {number} 62 */ 63 wordCount: function(word) { } 64} 65 66/** 67 * @constructor 68 * @implements {WebInspector.CompletionDictionary} 69 */ 70WebInspector.SampleCompletionDictionary = function() { 71 this._words = {}; 72} 73 74WebInspector.SampleCompletionDictionary.prototype = { 75 /** 76 * @param {string} word 77 */ 78 addWord: function(word) 79 { 80 if (!this._words[word]) 81 this._words[word] = 1; 82 else 83 ++this._words[word]; 84 }, 85 86 /** 87 * @param {string} word 88 */ 89 removeWord: function(word) 90 { 91 if (!this._words[word]) 92 return; 93 if (this._words[word] === 1) 94 delete this._words[word]; 95 else 96 --this._words[word]; 97 }, 98 99 /** 100 * @param {string} prefix 101 * @return {!Array.<string>} 102 */ 103 wordsWithPrefix: function(prefix) 104 { 105 var words = []; 106 for(var i in this._words) { 107 if (i.startsWith(prefix)) 108 words.push(i); 109 } 110 return words; 111 }, 112 113 /** 114 * @param {string} word 115 * @return {boolean} 116 */ 117 hasWord: function(word) 118 { 119 return !!this._words[word]; 120 }, 121 122 /** 123 * @param {string} word 124 * @return {number} 125 */ 126 wordCount: function(word) 127 { 128 return this._words[word] ? this._words[word] : 0; 129 } 130} 131