Couchbase C Client  3.3.11
Asynchronous C Client for Couchbase
kvbuf.h
Go to the documentation of this file.
1 /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  * Copyright 2014-2020 Couchbase, Inc.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #ifndef LCB_KVBUF_H
19 #define LCB_KVBUF_H
20 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
32 typedef enum {
38 
45 
46 #define LCB_KV_HEADER_AND_KEY LCB_KV_CONTIG
47 
51 typedef struct lcb_CONTIGBUF {
52  const void *bytes;
54  size_t nbytes;
56 
58 typedef struct lcb_KEYBUF {
69  lcb_CONTIGBUF contig;
70  lcb_U16 vbid;
71 } lcb_KEYBUF;
72 
74 #define LCB_KEYBUF_IS_EMPTY(k) (k)->contig.nbytes == 0
75 
83 #define LCB_KREQ_SIMPLE(req, k, nk) \
84  do { \
85  (req)->type = LCB_KV_COPY; \
86  (req)->contig.bytes = k; \
87  (req)->contig.nbytes = nk; \
88  } while (0)
89 
94 typedef struct lcb_FRAGBUF {
97 
99  unsigned int niov;
100 
105  unsigned int total_length;
106 } lcb_FRAGBUF;
107 
109 typedef struct lcb_VALBUF {
122  union {
123  lcb_CONTIGBUF contig;
124  lcb_FRAGBUF multi;
125  } u_buf;
126 } lcb_VALBUF;
127 
128 #ifdef __cplusplus
129 }
130 #endif
131 #endif
structure indicating a buffer and its size
Definition: iops.h:78
unsigned int total_length
Total length of the items.
Definition: kvbuf.h:105
lcb_KVBUFTYPE
Flags indicating the storage policy for a buffer.
Definition: kvbuf.h:32
@ LCB_KV_VBID
Indicates that the precomputed vBucket ID should be used.
Definition: kvbuf.h:37
@ LCB_KV_IOVCOPY
The buffers are not contiguous (multi-part buffers) but should be copied.
Definition: kvbuf.h:43
@ LCB_KV_CONTIG
The buffer is contiguous and should not be copied.
Definition: kvbuf.h:34
@ LCB_KV_COPY
The buffer should be copied.
Definition: kvbuf.h:33
@ LCB_KV_IOV
The buffer is not contiguous and should not be copied.
Definition: kvbuf.h:35
lcb_KVBUFTYPE vtype
Value request type.
Definition: kvbuf.h:121
size_t nbytes
Number of total bytes.
Definition: kvbuf.h:54
lcb_KVBUFTYPE type
The type of key to provide.
Definition: kvbuf.h:68
unsigned int niov
Number of elements in iov array.
Definition: kvbuf.h:99
lcb_U16 vbid
precomputed vbucket id
Definition: kvbuf.h:70
lcb_IOV * iov
An IOV array.
Definition: kvbuf.h:96
simple buf/length structure for a contiguous series of bytes
Definition: kvbuf.h:51
Structure for an IOV buffer to be supplied as a buffer.
Definition: kvbuf.h:94
Common request header for all keys.
Definition: kvbuf.h:58
Structure representing a value to be stored.
Definition: kvbuf.h:109