1e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao/*
2e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * Copyright 2011, The Android Open Source Project
3e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao *
4e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License");
5e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * you may not use this file except in compliance with the License.
6e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * You may obtain a copy of the License at
7e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao *
8e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao *     http://www.apache.org/licenses/LICENSE-2.0
9e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao *
10e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * Unless required by applicable law or agreed to in writing, software
11e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS,
12e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * See the License for the specific language governing permissions and
14e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * limitations under the License.
15e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao */
16e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao
1774f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien#ifndef MEM_CHUNK_H
1874f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien#define MEM_CHUNK_H
1974f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
2074f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien#include <stddef.h>
2149567d1b850754d514faaf1f2e0b35fe33b2a126Logan Chien#include <stdlib.h>
2274f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
2374f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chienclass MemChunk {
2474f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chienprivate:
2574f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  unsigned char *buf;
2674f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  size_t buf_size;
2774f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
2874f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chienpublic:
2974f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  MemChunk();
3074f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
3174f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  ~MemChunk();
3274f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
3374f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  bool allocate(size_t size);
3474f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
3574f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  void print() const;
3674f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
3774f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  bool protect(int prot);
3874f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
3974f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  unsigned char const *getBuffer() const {
4074f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien    return buf;
4174f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  }
4274f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
4374f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  unsigned char *getBuffer() {
4474f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien    return buf;
4574f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  }
4674f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
4774f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  unsigned char &operator[](size_t index) {
4874f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien    return buf[index];
4974f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  }
5074f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
5174f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  unsigned char const &operator[](size_t index) const {
5274f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien    return buf[index];
5374f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  }
5474f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
5574f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  size_t size() const {
5674f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien    return buf_size;
5774f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien  }
5874f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
5974f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien};
6074f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien
6174f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien#endif // MEM_CHUNK_H
62