Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(135)

Side by Side Diff: chrome/third_party/hunspell/google/bdict_writer.cc

Issue 18041: The first step towards Turkish spell-checker.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/third_party/hunspell/src/hunspell/hashmgr.cxx » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2008 Google Inc. All Rights Reserved. 1 // Copyright 2008 Google Inc. All Rights Reserved.
2 2
3 #include "chrome/third_party/hunspell/google/bdict_writer.h" 3 #include "chrome/third_party/hunspell/google/bdict_writer.h"
4 4
5 #include "base/logging.h" 5 #include "base/logging.h"
6 #include "base/string_util.h" 6 #include "base/string_util.h"
7 #include "chrome/third_party/hunspell/google/bdict.h" 7 #include "chrome/third_party/hunspell/google/bdict.h"
8 8
9 namespace hunspell { 9 namespace hunspell {
10 10
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 } 154 }
155 155
156 // Recursively fills in the storage strategy for this node and each of its 156 // Recursively fills in the storage strategy for this node and each of its
157 // children. This must be done before actually serializing because the storage 157 // children. This must be done before actually serializing because the storage
158 // mode will depend on the size of the children. 158 // mode will depend on the size of the children.
159 size_t ComputeTrieStorage(DicNode* node) { 159 size_t ComputeTrieStorage(DicNode* node) {
160 if (node->is_leaf()) { 160 if (node->is_leaf()) {
161 // The additional affix list holds affixes when there is more than one. Each 161 // The additional affix list holds affixes when there is more than one. Each
162 // entry is two bytes, plus an additional FFFF terminator. 162 // entry is two bytes, plus an additional FFFF terminator.
163 size_t supplimentary_size = 0; 163 size_t supplimentary_size = 0;
164 if (node->affix_indices.size() > 1 || 164 if (node->affix_indices[0] > BDict::LEAF_NODE_MAX_FIRST_AFFIX_ID) {
165 node->affix_indices[0] > BDict::LEAF_NODE_MAX_FIRST_AFFIX_ID) 165 // We cannot store the first affix ID of the affix list into a leaf node.
166 // In this case, we have to store all the affix IDs and a terminator
167 // into a supplimentary list.
168 supplimentary_size = node->affix_indices.size() * 2 + 2;
169 } else if (node->affix_indices.size() > 1) {
170 // We can store the first affix ID of the affix list into a leaf node.
171 // In this case, we need to store the remaining affix IDs and a
172 // terminator into a supplimentary list.
166 supplimentary_size = node->affix_indices.size() * 2; 173 supplimentary_size = node->affix_indices.size() * 2;
174 }
167 175
168 if (node->leaf_addition.empty()) { 176 if (node->leaf_addition.empty()) {
169 node->storage = DicNode::LEAF; 177 node->storage = DicNode::LEAF;
170 return 2 + supplimentary_size; 178 return 2 + supplimentary_size;
171 } 179 }
172 node->storage = DicNode::LEAFMORE; 180 node->storage = DicNode::LEAFMORE;
173 // Signature & affix (2) + null for leaf_addition (1) = 3 181 // Signature & affix (2) + null for leaf_addition (1) = 3
174 return 3 + node->leaf_addition.size() + supplimentary_size; 182 return 3 + node->leaf_addition.size() + supplimentary_size;
175 } 183 }
176 184
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 // Add the header now that we know the offsets. 495 // Add the header now that we know the offsets.
488 hunspell::BDict::AffHeader* header = 496 hunspell::BDict::AffHeader* header =
489 reinterpret_cast<hunspell::BDict::AffHeader*>(&(*output)[header_offset]); 497 reinterpret_cast<hunspell::BDict::AffHeader*>(&(*output)[header_offset]);
490 header->affix_group_offset = static_cast<uint32>(affix_group_offset); 498 header->affix_group_offset = static_cast<uint32>(affix_group_offset);
491 header->affix_rule_offset = static_cast<uint32>(affix_rule_offset); 499 header->affix_rule_offset = static_cast<uint32>(affix_rule_offset);
492 header->rep_offset = static_cast<uint32>(rep_offset); 500 header->rep_offset = static_cast<uint32>(rep_offset);
493 header->other_offset = static_cast<uint32>(other_offset); 501 header->other_offset = static_cast<uint32>(other_offset);
494 } 502 }
495 503
496 } // namespace hunspell 504 } // namespace hunspell
OLDNEW
« no previous file with comments | « no previous file | chrome/third_party/hunspell/src/hunspell/hashmgr.cxx » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698