forked from infinispan/cpp-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
DESIGN
66 lines (46 loc) · 2.26 KB
/
DESIGN
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Hot Rod C++ client
==================
This client provides high performance access to an Infinispan cache
via the Hot Rod wire protocol.
See the README for supported platforms.
The source is divided roughly as follows:
include, src/hotrod/api : the public interface
src/hotrod/impl: a close match (hopefully) of the Java
client/hotrod/impl subdirectory
src/hotrod/sys: platform dependent code
Another way of describing "sys" is to provide a means to write
platform neutral code in the rest of the tree. "Platform" can mean
different operating systems, but can also refer to the evolutionary
stage of the C++ compiler (depending on how much of C++11 is
available).
The "api" part should feel like a natural C++ use of Hot Rod, as
opposed to Java shoehorned into a C++ syntax.
Platform neutral code
=====================
By contrast, the "impl" subdirectory should relax C++ ideology to
allow the code logic to resemble the naming and logic flow of the Java
client as closely as possible without producing poorly performing or
unmaintainable code. It would be nice if this code eschewed fancier
C++ techniques so that it is approachable to programmers with limited
C++ background, including Java Hot Rod developers, who may wish to
review code, fix bugs, or roll up their sleeves and dive in.
An important goal is to allow the logic to be shared between clients as
bugs are fixed and new functionality is implemented.
Platform specific code
======================
CMake is used to select which platform dependent code is to be used on each
platform. #ifdef statements are used sparingly, typically to allow
the compiler to find include files or provide definitions.
Code should be coded, in order of preference, as:
vanilla c++03
c++11 + c++03 workarounds
POSIX + Windows (+ other?) workarounds
3rd party libraries
===================
3rd party libraries, such as Boost, are deliberately avoided even
though they can offer useful functionality. Because they are also
popular with users, who may be relying on a different version of the
software, it becomes very difficult to accommodate both the user and
Hot Rod at the same time with a single version or concurrent versions
that can run at the same time without interference.
TBD: protocol buffers library, how to reconcile.