include/Chunk.h
changeset 1 6cbad782d16a
parent 0 31a43d94cc26
child 2 851de24ecb61
     1.1 --- a/include/Chunk.h	Sun Sep 20 15:14:12 2009 -0700
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,97 +0,0 @@
     1.4 -/*
     1.5 - *  Chunk.h
     1.6 - *  Ottoman
     1.7 - *
     1.8 - *  Created by Jens Alfke on 8/27/09.
     1.9 - *  Copyright 2009 Jens Alfke. All rights reserved.
    1.10 - *  BSD-Licensed: See the file "LICENSE.txt" for details.
    1.11 - */
    1.12 -
    1.13 -#ifndef _MOOSEYARD_CHUNK_
    1.14 -#define _MOOSEYARD_CHUNK_
    1.15 -#include "File.h"
    1.16 -
    1.17 -namespace Mooseyard {
    1.18 -    
    1.19 -    class KeyValueChunk;
    1.20 -    
    1.21 -#pragma pack(2)
    1.22 -    
    1.23 -    /** An item stored in a file. It's prefixed with its length, so that the entire file
    1.24 -        can be scanned for chunks easily. */
    1.25 -    class Chunk {
    1.26 -    public:
    1.27 -        uint32_t size() const                       {return _size;}
    1.28 -        uint16_t type() const;
    1.29 -        
    1.30 -        /** If this is a KeyValueChunk, returns itself cast to that type, else NULL. */
    1.31 -        const KeyValueChunk* asKeyValue() const;
    1.32 -        
    1.33 -        /** Write a Chunk to the file, in pieces a la writev. */
    1.34 -        static size_t writeMultiple (File *file, uint16_t type,
    1.35 -                                     Blob blobs[], int count)  throw(File::Error);
    1.36 -        
    1.37 -        static size_t writePadding (File *file);
    1.38 -
    1.39 -        static const uint16_t kChunkTypePadding = 0;
    1.40 -
    1.41 -        const void* end() const                     {return offsetBy(this,_size);}
    1.42 -
    1.43 -    protected:
    1.44 -        Chunk (uint32_t size, uint16_t type)        :_size(size), _keyLength(0xFFFF), _type(type) { }
    1.45 -
    1.46 -    private:
    1.47 -        // This is mapped to data in the file! Don't mess with it!
    1.48 -        LittleEndian<uint32_t> _size;
    1.49 -        LittleEndian<uint16_t> _keyLength;          // Used by KeyValueChunk; else 0xFFFF
    1.50 -        LittleEndian<uint16_t> _type;               // Not used by KeyValueChunk
    1.51 -        friend class KeyValueChunk;
    1.52 -    };
    1.53 -    
    1.54 -    
    1.55 -    /** A key/value pair as stored in the memory-mapped file. */
    1.56 -    class KeyValueChunk :public Chunk {
    1.57 -    public:
    1.58 -        Blob key() const;
    1.59 -        Blob value() const;
    1.60 -        
    1.61 -        bool hasKey (Blob key) const;
    1.62 -        
    1.63 -        void validate() const  throw(File::Error);
    1.64 -        
    1.65 -        /** Write a KeyValueChunk to a file. */
    1.66 -        static size_t write (File* file, FilePosition pos, Blob key, Blob value)  throw(File::Error);
    1.67 -
    1.68 -        static const uint16_t kChunkType = 1;
    1.69 -
    1.70 -    private:
    1.71 -        const char* valuePtr() const;
    1.72 -    };    
    1.73 -   
    1.74 -#pragma options align=reset
    1.75 -    
    1.76 -    
    1.77 -    /** An iterator over all the Chunks in a file. */
    1.78 -    class ChunkIterator {
    1.79 -    public:
    1.80 -        ChunkIterator (File*, FilePosition start);
    1.81 -        
    1.82 -        const Chunk* chunk() const              {return _chunk;}
    1.83 -        FilePosition position() const           {return _pos;}
    1.84 -        bool atEOF() const;
    1.85 -        bool next();
    1.86 -        
    1.87 -        operator const Chunk*() const           {return _chunk;}
    1.88 -        virtual bool hasValue() const           {return _chunk != NULL;}
    1.89 -        operator bool() const                   {return hasValue();}
    1.90 -        ChunkIterator& operator++()             {next(); return *this;}
    1.91 -    private:
    1.92 -        void _loadChunk();
    1.93 -        File *_file;
    1.94 -        FilePosition _pos, _length;
    1.95 -        const Chunk* _chunk;
    1.96 -    };
    1.97 -    
    1.98 -}
    1.99 -
   1.100 -#endif _MOOSEYARD_CHUNK_