mirror of
https://github.com/protobuf-c/protobuf-c.git
synced 2025-01-15 01:58:17 +08:00
c797b07eec
dave's original style drives me crazy. reformat the C code in protobuf-c/ with "indent -kr -i8" and manually reflow for readability. try to fit most lines in 80 columns, but due to the lengthy type and function names in protobuf-c, enforcing an 80 column rule would result in a lot of cramped statements, so try to fit lines in up to 100 columns if it would improve readability. (e.g., one <=100 column line is probably better than 3-4 <=80 column lines.) ultimately i'd like to adopt most of the recommendations in the linux coding style: https://www.kernel.org/doc/Documentation/CodingStyle. this commit gets us most of the kernel indentation and comment coding style recommendations. later commits will tackle style recommendations that require more intrusive changes: breaking up large functions, replacing macros that affect control flow (e.g., DO_ALLOC). this will hopefully facilitate review and make the code base easier to maintain. i ran the old and new versions of protobuf-c.c through something like: gcc -S -D__PRETTY_FUNCTION__=0 -D__FILE__=0 -D__LINE__=0 -Wall -O0 \ -o protobuf-c.S -c protobuf-c.c and reviewed the diffs of the assembly output to spot any functions that changed, and went back to make sure that any differences were functionally equivalent.
106 lines
3.6 KiB
C
106 lines
3.6 KiB
C
/* --- protobuf-c-private.h: private structures and functions --- */
|
|
|
|
/*
|
|
* Copyright (c) 2008-2013, Dave Benson. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* * Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following disclaimer
|
|
* in the documentation and/or other materials provided with the
|
|
* distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
|
|
#define PROTOBUF_C_SERVICE_DESCRIPTOR_MAGIC 0x14159bc3
|
|
#define PROTOBUF_C_MESSAGE_DESCRIPTOR_MAGIC 0x28aaeef9
|
|
#define PROTOBUF_C_ENUM_DESCRIPTOR_MAGIC 0x114315af
|
|
|
|
/*
|
|
* A little enum helper macro: this will ensure that your enum's size is
|
|
* sizeof(int). In protobuf, it need not be larger than 32-bits. This is
|
|
* written assuming it is appended to a list w/o a tail comma.
|
|
*/
|
|
#ifndef _PROTOBUF_C_FORCE_ENUM_TO_BE_INT_SIZE
|
|
#define _PROTOBUF_C_FORCE_ENUM_TO_BE_INT_SIZE(enum_name) \
|
|
, _##enum_name##_IS_INT_SIZE = INT_MAX
|
|
#endif
|
|
|
|
/* === needs to be declared for the PROTOBUF_C_BUFFER_SIMPLE_INIT macro === */
|
|
|
|
void
|
|
protobuf_c_buffer_simple_append(
|
|
ProtobufCBuffer *buffer,
|
|
size_t len,
|
|
const unsigned char *data);
|
|
|
|
/* === stuff which needs to be declared for use in the generated code === */
|
|
|
|
struct _ProtobufCEnumValueIndex {
|
|
const char *name;
|
|
unsigned index; /* into values[] array */
|
|
};
|
|
|
|
/*
|
|
* IntRange: helper structure for optimizing int => index lookups in the case
|
|
* where the keys are mostly consecutive values, as they presumably are for
|
|
* enums and fields.
|
|
*
|
|
* The data structures assumes that the values in the original array are
|
|
* sorted.
|
|
*/
|
|
struct _ProtobufCIntRange {
|
|
int start_value;
|
|
unsigned orig_index;
|
|
/*
|
|
* NOTE: the number of values in the range can be inferred by looking
|
|
* at the next element's orig_index. A dummy element is added to make
|
|
* this simple.
|
|
*/
|
|
};
|
|
|
|
/* === declared for exposition on ProtobufCIntRange === */
|
|
|
|
/*
|
|
* Note: ranges must have an extra sentinel IntRange at the end whose
|
|
* orig_index is set to the number of actual values in the original array.
|
|
* Returns -1 if no orig_index found.
|
|
*/
|
|
int
|
|
protobuf_c_int_ranges_lookup(unsigned n_ranges, ProtobufCIntRange *ranges);
|
|
|
|
/* === behind the scenes on the generated service's __init functions */
|
|
|
|
typedef void (*ProtobufCServiceDestroy)(ProtobufCService *);
|
|
|
|
void
|
|
protobuf_c_service_generated_init(
|
|
ProtobufCService *service,
|
|
const ProtobufCServiceDescriptor *descriptor,
|
|
ProtobufCServiceDestroy destroy);
|
|
|
|
void
|
|
protobuf_c_service_invoke_internal(
|
|
ProtobufCService *service,
|
|
unsigned method_index,
|
|
const ProtobufCMessage *input,
|
|
ProtobufCClosure closure,
|
|
void *closure_data);
|