180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef SkBase64_DEFINED
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define SkBase64_DEFINED
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkTypes.h"
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustruct SkBase64 {
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    enum Error {
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        kNoError,
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        kPadError,
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        kBadCharError
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    };
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkBase64();
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    Error decode(const char* src, size_t length);
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    char* getData() { return fData; }
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    /**
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru       Base64 encodes src into dst. encode is a pointer to at least 65 chars.
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru       encode[64] will be used as the pad character. Encodings other than the
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru       default encoding cannot be decoded.
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    */
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    static size_t Encode(const void* src, size_t length, void* dest, const char* encode = NULL);
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_SUPPORT_UNITTEST
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    static void UnitTest();
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    Error decode(const void* srcPtr, size_t length, bool writeDestination);
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    size_t fLength;
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    char* fData;
4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    friend class SkImageBaseBitmap;
4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif // SkBase64_DEFINED
45