~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/internal/iocache.h

  • Committer: Olaf van der Spek
  • Date: 2011-08-14 12:20:36 UTC
  • mto: This revision was merged to the branch mainline in revision 2407.
  • Revision ID: olafvdspek@gmail.com-20110814122036-ydjayvqjgwixp3o8
Refactor iocache

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
 
28
28
#define my_b_EOF INT_MIN
29
29
 
30
 
#define my_b_read(info,Buffer,Count) \
31
 
  ((info)->read_pos + (Count) <= (info)->read_end ?\
32
 
   (memcpy(Buffer,(info)->read_pos,(size_t) (Count)), \
33
 
    ((info)->read_pos+=(Count)),0) :\
34
 
   (*(info)->read_function)((info),Buffer,Count))
35
 
 
36
 
#define my_b_write(info,Buffer,Count) \
37
 
 ((info)->write_pos + (Count) <=(info)->write_end ?\
38
 
  (memcpy((info)->write_pos, (Buffer), (size_t)(Count)),\
39
 
   ((info)->write_pos+=(Count)),0) : \
40
 
   (*(info)->write_function)((info),(Buffer),(Count)))
41
 
 
42
 
#define my_b_get(info) \
43
 
  ((info)->read_pos != (info)->read_end ? ((info)->read_pos++, (int) (unsigned char) (info)->read_pos[-1]) : (info)->get())
44
 
 
45
 
#define my_b_tell(info) ((info)->tell())
46
 
 
47
 
#define my_b_bytes_in_cache(info) (size_t) (*(info)->current_end - *(info)->current_pos)
48
 
 
49
 
class io_cache_st;
50
 
typedef int (*IO_CACHE_CALLBACK)(io_cache_st*);
51
 
 
52
30
class io_cache_st    /* Used when cacheing files */
53
31
{
54
32
public:
 
33
  typedef int (*IO_CACHE_CALLBACK)(io_cache_st*);
 
34
 
55
35
  /* Offset in file corresponding to the first byte of unsigned char* buffer. */
56
36
  my_off_t pos_in_file;
57
37
  /*
108
88
    certain operations might not be available and yield unpredicatable
109
89
    results. Details to be documented later
110
90
  */
111
 
  enum cache_type type;
 
91
  cache_type type;
112
92
  int error;
113
93
  /*
114
94
    Callbacks when the actual read I/O happens. These were added and
202
182
 
203
183
  my_off_t tell() const
204
184
  {
205
 
    return pos_in_file + (*current_pos - request_pos);
 
185
    return pos_in_file + *current_pos - request_pos;
 
186
  }
 
187
 
 
188
  int read(void* Buffer0, size_t Count)
 
189
  {
 
190
    unsigned char* Buffer= reinterpret_cast<unsigned char*>(Buffer0);
 
191
    if (read_pos + Count > read_end)
 
192
      return read_function(this, Buffer, Count);
 
193
    memcpy(Buffer, read_pos, Count);
 
194
    read_pos += Count;
 
195
    return 0;
 
196
  }
 
197
 
 
198
  int write(const void* Buffer0, size_t Count)
 
199
  {
 
200
    const unsigned char* Buffer= reinterpret_cast<const unsigned char*>(Buffer0);
 
201
    if (write_pos + Count > write_end)
 
202
      return write_function(this, Buffer, Count);
 
203
    memcpy(write_pos, Buffer, Count);
 
204
    write_pos += Count;
 
205
    return 0;
206
206
  }
207
207
};
208
208
 
209
 
typedef io_cache_st IO_CACHE;    /* Used when cacheing files */
210
 
 
211
209
} /* namespace internal */
212
210
} /* namespace drizzled */