15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright 2011 Google Inc. All Rights Reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * you may not use this file except in compliance with the License. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * You may obtain a copy of the License at 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * distributed under the License is distributed on an "AS IS" BASIS, 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See the License for the specific language governing permissions and 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * limitations under the License. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SFNTLY_CPP_SRC_SFNTLY_MATH_FONT_MATH_H_ 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SFNTLY_CPP_SRC_SFNTLY_MATH_FONT_MATH_H_ 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "sfntly/port/type.h" 21a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 22a3f7b4e666c476898878fa745f637129375cd889Ben Murdochnamespace sfntly { 23a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 24a3f7b4e666c476898878fa745f637129375cd889Ben Murdochclass FontMath { 25a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch public: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int32_t Log2(int32_t a) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int r = 0; // r will be lg(a) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (a != 0) { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) a >>= 1; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r++; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return r - 1; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calculates the amount of padding needed. The values provided need to be in 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the same units. So, if the size is given as the number of bytes then the 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // alignment size must also be specified as byte size to align to. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // @param size the size of the data that may need padding 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // @param alignmentSize the number of units to align to 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // @return the number of units needing to be added for alignment 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int32_t PaddingRequired(int32_t size, int32_t alignment_size) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t padding = alignment_size - (size % alignment_size); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return padding == alignment_size ? 0 : padding; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace sfntly 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // SFNTLY_CPP_SRC_SFNTLY_MATH_FONT_MATH_H_ 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)