SkPackBits.h revision 0910916c0f7b951ee55c4b7c6358295b9bca0565
10910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 30910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 50910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * you may not use this file except in compliance with the License. 60910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * You may obtain a copy of the License at 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * See the License for the specific language governing permissions and 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * limitations under the License. 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkPackBits_DEFINED 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkPackBits_DEFINED 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTypes.h" 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkPackBits { 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Given the number of 16bit values that will be passed to Pack16, 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project returns the worst-case size needed for the dst[] buffer. 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static size_t ComputeMaxSize16(int count); 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Given the number of 8bit values that will be passed to Pack8, 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project returns the worst-case size needed for the dst[] buffer. 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static size_t ComputeMaxSize8(int count); 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Write the src array into a packed format. The packing process may end 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project up writing more bytes than it read, so dst[] must be large enough. 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param src Input array of 16bit values 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param count Number of entries in src[] 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param dst Buffer (allocated by caller) to write the packed data 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project into 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @return the number of bytes written to dst[] 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static size_t Pack16(const uint16_t src[], int count, uint8_t dst[]); 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Write the src array into a packed format. The packing process may end 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project up writing more bytes than it read, so dst[] must be large enough. 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param src Input array of 8bit values 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param count Number of entries in src[] 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param dst Buffer (allocated by caller) to write the packed data 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project into 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @return the number of bytes written to dst[] 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static size_t Pack8(const uint8_t src[], int count, uint8_t dst[]); 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Unpack the data in src[], and expand it into dst[]. The src[] data was 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project written by a previous call to Pack16. 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param src Input data to unpack, previously created by Pack16. 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param srcSize Number of bytes of src to unpack 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param dst Buffer (allocated by caller) to expand the src[] into. 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @return the number of dst elements (not bytes) written into dst. 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static int Unpack16(const uint8_t src[], size_t srcSize, uint16_t dst[]); 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Unpack the data in src[], and expand it into dst[]. The src[] data was 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project written by a previous call to Pack8. 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param src Input data to unpack, previously created by Pack8. 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param srcSize Number of bytes of src to unpack 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param dst Buffer (allocated by caller) to expand the src[] into. 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @return the number of bytes written into dst. 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static int Unpack8(const uint8_t src[], size_t srcSize, uint8_t dst[]); 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Unpack the data from src[], skip the first dstSkip bytes, then write 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dstWrite bytes into dst[]. The src[] data was written by a previous 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project call to Pack8. Return the number of bytes actually writtten into dst[] 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param src Input data to unpack, previously created by Pack8. 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param dst Buffer (allocated by caller) to expand the src[] into. 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param dstSkip Number of bytes of unpacked src to skip before writing 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project into dst 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project @param dstWrite Number of bytes of unpacked src to write into dst (after 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project skipping dstSkip bytes) 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static void Unpack8(uint8_t dst[], size_t dstSkip, size_t dstWrite, 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint8_t src[]); 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 87