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 */ 34 WebInspector.CompletionDictionary = function() { } 35 36 WebInspector.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 reset: function() { } 66 } 67 68 /** 69 * @constructor 70 * @implements {WebInspector.CompletionDictionary} 71 */ 72 WebInspector.SampleCompletionDictionary = function() { 73 this._words = {}; 74 } 75 76 WebInspector.SampleCompletionDictionary.prototype = { 77 /** 78 * @param {string} word 79 */ 80 addWord: function(word) 81 { 82 if (!this._words[word]) 83 this._words[word] = 1; 84 else 85 ++this._words[word]; 86 }, 87 88 /** 89 * @param {string} word 90 */ 91 removeWord: function(word) 92 { 93 if (!this._words[word]) 94 return; 95 if (this._words[word] === 1) 96 delete this._words[word]; 97 else 98 --this._words[word]; 99 }, 100 101 /** 102 * @param {string} prefix 103 * @return {!Array.<string>} 104 */ 105 wordsWithPrefix: function(prefix) 106 { 107 var words = []; 108 for(var i in this._words) { 109 if (i.startsWith(prefix)) 110 words.push(i); 111 } 112 return words; 113 }, 114 115 /** 116 * @param {string} word 117 * @return {boolean} 118 */ 119 hasWord: function(word) 120 { 121 return !!this._words[word]; 122 }, 123 124 /** 125 * @param {string} word 126 * @return {number} 127 */ 128 wordCount: function(word) 129 { 130 return this._words[word] ? this._words[word] : 0; 131 }, 132 133 reset: function() 134 { 135 this._words = {}; 136 } 137 } 138