116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood/*
216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * Copyright (C) 2010 The Android Open Source Project
316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood *
416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * you may not use this file except in compliance with the License.
616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * You may obtain a copy of the License at
716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood *
816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood *
1016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * Unless required by applicable law or agreed to in writing, software
1116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
1216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * See the License for the specific language governing permissions and
1416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * limitations under the License.
1516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood */
1616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
1716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#ifndef _MTP_STRING_BUFFER_H
1816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#define _MTP_STRING_BUFFER_H
1916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
20bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang#include <log/log.h>
2116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include <stdint.h>
22bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang#include <string>
2316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
24014897f5aece2c6212418934bd4618326979f17aYin Liu// Max Character number of a MTP String
25014897f5aece2c6212418934bd4618326979f17aYin Liu#define MTP_STRING_MAX_CHARACTER_NUMBER             255
26014897f5aece2c6212418934bd4618326979f17aYin Liu
277850ef999740f214a1990a9c090d3f3865d435aaMike Lockwoodnamespace android {
287850ef999740f214a1990a9c090d3f3865d435aaMike Lockwood
2916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodclass MtpDataPacket;
3016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
3116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood// Represents a utf8 string, with a maximum of 255 characters
3216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodclass MtpStringBuffer {
3316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
3416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodprivate:
35bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang    std::string     mString;
3616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
3716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodpublic:
38bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang                    MtpStringBuffer() {};
39bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang                    ~MtpStringBuffer() {};
40bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang
41a039c883c593b2ebbca6d32282cbd855b5bec19fChih-Hung Hsieh    explicit        MtpStringBuffer(const char* src);
42a039c883c593b2ebbca6d32282cbd855b5bec19fChih-Hung Hsieh    explicit        MtpStringBuffer(const uint16_t* src);
4316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood                    MtpStringBuffer(const MtpStringBuffer& src);
4416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
4516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    void            set(const char* src);
46dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood    void            set(const uint16_t* src);
4716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
48bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang    inline void     append(const char* other);
49bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang    inline void     append(MtpStringBuffer &other);
50bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang
51ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood    bool            readFromPacket(MtpDataPacket* packet);
5216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    void            writeToPacket(MtpDataPacket* packet) const;
5316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
54bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang    inline bool     isEmpty() const { return mString.empty(); }
55bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang    inline int      size() const { return mString.length(); }
5616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
57bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang    inline operator const char*() const { return mString.c_str(); }
5816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood};
5916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
60bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhanginline void MtpStringBuffer::append(const char* other) {
61bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang    mString += other;
62bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang}
63bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang
64bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhanginline void MtpStringBuffer::append(MtpStringBuffer &other) {
65bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang    mString += other.mString;
66bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang}
67bc1d4b41f4df1b6dd04801ea5a526d23f5321340Jerry Zhang
687850ef999740f214a1990a9c090d3f3865d435aaMike Lockwood}; // namespace android
697850ef999740f214a1990a9c090d3f3865d435aaMike Lockwood
7016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#endif // _MTP_STRING_BUFFER_H
71