Skip to content

Commit 872f8ab

Browse files
[refactor] Apply forward declaration as much as possible (#64)
* [refactor] Apply forward declaration as much as possible Fixes #60 ### Motivation The includes in pulsar-client-cpp is very casual. There are a lot of implicit includes and the forward declaration is not used much. For example, if `lib/ClientConnection.h` was modified, 27 files would be recompiled. The other problem is the `SortIncludes` attribute in `.clang-format` file is false. It might be okay in early days. However, as the project grows, including many headers without ordering brings a very bad experience. Combining with the very few usages of the forward declaration, it's hard to determine whether a header is still required after a change. ### Modifications Apply forward declarations as much as possible and change the `SortIncludes` to true in `.clang-format` file. It's special for the `PulsarApi.pb.h` file because the size of this header is over 1 MiB. For classes we can use forward declaration, but for enumerations we have to include this header. To solve this problem, `ProtoApiEnums.h` is added to define some constant integers that can be cast implicitly from the enumerations. If we want to use enumerations from `PulsarApi.pb.h`, we can include `ProtoApiEnums.h` instead. Finally, to unify the include rules, in `lib/*.h`, if we want to include a header (e.g. `xxx.h`) from the same directory, just use `#include "xxx.h"`. Don't use `#include "lib/xxx.h"` or `#include <lib/xxx.h>` in headers of `lib/` directory. ### Improvements Since forward declaration is applied everywhere now, take `lib/ClientConnection.h` for example. After this patch, only 10 files needs to be recompiled, while 27 files would be recompiled before. This patch also reduces the binary size and speeds up the compilation time. Binary size: - `libpulsar.a`: 319234696 (305 MiB) -> 286716564 (274 MiB) - `libpulsar.so`: 110162496 (106 MiB) -> 102428456 (98 MiB) Compilation time with the following commands: ```bash cmake -B build -DBUILD_TESTS=OFF cmake --build build -j8 ``` * Fix MSVC build
1 parent 7bb6402 commit 872f8ab

File tree

278 files changed

+1557
-1123
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

278 files changed

+1557
-1123
lines changed

.clang-format

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
BasedOnStyle: Google
2020
IndentWidth: 4
2121
ColumnLimit: 110
22-
SortIncludes: false
22+
SortIncludes: true
2323
BreakBeforeBraces: Custom
2424
BraceWrapping:
2525
AfterEnum: true

examples/SampleAsyncProducer.cc

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19+
#include <pulsar/Client.h>
20+
1921
#include <iostream>
2022
#include <thread>
2123

22-
#include <pulsar/Client.h>
23-
24-
#include <lib/LogUtils.h>
24+
#include "lib/LogUtils.h"
2525

2626
DECLARE_LOG_OBJECT()
2727

examples/SampleConsumer.cc

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19-
#include <iostream>
20-
2119
#include <pulsar/Client.h>
2220

23-
#include <lib/LogUtils.h>
21+
#include <iostream>
22+
23+
#include "lib/LogUtils.h"
2424

2525
DECLARE_LOG_OBJECT()
2626

examples/SampleConsumerListener.cc

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19-
#include <iostream>
20-
2119
#include <pulsar/Client.h>
2220

23-
#include <lib/LogUtils.h>
21+
#include <iostream>
22+
23+
#include "lib/LogUtils.h"
2424

2525
DECLARE_LOG_OBJECT()
2626

examples/SampleProducer.cc

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19-
#include <iostream>
20-
2119
#include <pulsar/Client.h>
2220

23-
#include <lib/LogUtils.h>
21+
#include <iostream>
22+
23+
#include "lib/LogUtils.h"
2424

2525
DECLARE_LOG_OBJECT()
2626

include/pulsar/Authentication.h

+5-4
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@
1919
#ifndef PULSAR_AUTHENTICATION_H_
2020
#define PULSAR_AUTHENTICATION_H_
2121

22+
#include <pulsar/Result.h>
2223
#include <pulsar/defines.h>
23-
#include <vector>
24-
#include <string>
24+
25+
#include <functional>
2526
#include <map>
2627
#include <memory>
27-
#include <pulsar/Result.h>
28-
#include <functional>
28+
#include <string>
29+
#include <vector>
2930

3031
namespace pulsar {
3132

include/pulsar/BatchReceivePolicy.h

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#define BATCH_RECEIVE_POLICY_HPP_
2121

2222
#include <pulsar/defines.h>
23+
2324
#include <memory>
2425

2526
namespace pulsar {

include/pulsar/BrokerConsumerStats.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919
#ifndef PULSAR_CPP_BROKERCONSUMERSTATS_H
2020
#define PULSAR_CPP_BROKERCONSUMERSTATS_H
2121

22-
#include <pulsar/defines.h>
23-
#include <string.h>
24-
#include <iostream>
22+
#include <pulsar/ConsumerType.h>
2523
#include <pulsar/Result.h>
24+
#include <pulsar/defines.h>
25+
2626
#include <functional>
27+
#include <iostream>
2728
#include <memory>
28-
#include <pulsar/ConsumerType.h>
2929

3030
namespace pulsar {
3131
class BrokerConsumerStatsImplBase;

include/pulsar/Client.h

+7-6
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,18 @@
1919
#ifndef PULSAR_CLIENT_HPP_
2020
#define PULSAR_CLIENT_HPP_
2121

22-
#include <pulsar/defines.h>
22+
#include <pulsar/ClientConfiguration.h>
23+
#include <pulsar/ConsoleLoggerFactory.h>
2324
#include <pulsar/Consumer.h>
25+
#include <pulsar/FileLoggerFactory.h>
26+
#include <pulsar/Message.h>
27+
#include <pulsar/MessageBuilder.h>
2428
#include <pulsar/Producer.h>
2529
#include <pulsar/Reader.h>
2630
#include <pulsar/Result.h>
27-
#include <pulsar/Message.h>
28-
#include <pulsar/MessageBuilder.h>
29-
#include <pulsar/ClientConfiguration.h>
3031
#include <pulsar/Schema.h>
31-
#include <pulsar/ConsoleLoggerFactory.h>
32-
#include <pulsar/FileLoggerFactory.h>
32+
#include <pulsar/defines.h>
33+
3334
#include <string>
3435

3536
namespace pulsar {

include/pulsar/ClientConfiguration.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
#ifndef PULSAR_CLIENTCONFIGURATION_H_
2020
#define PULSAR_CLIENTCONFIGURATION_H_
2121

22-
#include <pulsar/defines.h>
2322
#include <pulsar/Authentication.h>
2423
#include <pulsar/Logger.h>
24+
#include <pulsar/defines.h>
2525

2626
namespace pulsar {
2727
class PulsarWrapper;

include/pulsar/Consumer.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@
1919
#ifndef CONSUMER_HPP_
2020
#define CONSUMER_HPP_
2121

22-
#include <iostream>
23-
#include <pulsar/defines.h>
2422
#include <pulsar/BrokerConsumerStats.h>
2523
#include <pulsar/ConsumerConfiguration.h>
24+
#include <pulsar/defines.h>
25+
26+
#include <iostream>
2627

2728
namespace pulsar {
2829
class PulsarWrapper;

include/pulsar/ConsumerConfiguration.h

+10-8
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,20 @@
1919
#ifndef PULSAR_CONSUMERCONFIGURATION_H_
2020
#define PULSAR_CONSUMERCONFIGURATION_H_
2121

22-
#include <functional>
23-
#include <memory>
24-
#include <pulsar/defines.h>
25-
#include <pulsar/Result.h>
26-
#include <pulsar/ConsumerType.h>
27-
#include <pulsar/Message.h>
28-
#include <pulsar/Schema.h>
2922
#include <pulsar/ConsumerCryptoFailureAction.h>
23+
#include <pulsar/ConsumerEventListener.h>
24+
#include <pulsar/ConsumerType.h>
3025
#include <pulsar/CryptoKeyReader.h>
3126
#include <pulsar/InitialPosition.h>
3227
#include <pulsar/KeySharedPolicy.h>
33-
#include <pulsar/ConsumerEventListener.h>
28+
#include <pulsar/Message.h>
29+
#include <pulsar/Result.h>
30+
#include <pulsar/Schema.h>
31+
#include <pulsar/defines.h>
32+
33+
#include <functional>
34+
#include <memory>
35+
3436
#include "BatchReceivePolicy.h"
3537

3638
namespace pulsar {

include/pulsar/CryptoKeyReader.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
#ifndef CRYPTOKEYREADER_H_
2020
#define CRYPTOKEYREADER_H_
2121

22-
#include <pulsar/defines.h>
23-
#include <pulsar/Result.h>
2422
#include <pulsar/EncryptionKeyInfo.h>
23+
#include <pulsar/Result.h>
24+
#include <pulsar/defines.h>
2525

2626
namespace pulsar {
2727

include/pulsar/DeprecatedException.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@
1919
#ifndef DEPRECATED_EXCEPTION_HPP_
2020
#define DEPRECATED_EXCEPTION_HPP_
2121

22+
#include <pulsar/defines.h>
23+
2224
#include <stdexcept>
2325
#include <string>
24-
#include <pulsar/defines.h>
2526

2627
namespace pulsar {
2728
class PULSAR_PUBLIC DeprecatedException : public std::runtime_error {

include/pulsar/EncryptionKeyInfo.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@
1919
#ifndef ENCRYPTIONKEYINFO_H_
2020
#define ENCRYPTIONKEYINFO_H_
2121

22-
#include <memory>
22+
#include <pulsar/defines.h>
23+
2324
#include <iostream>
2425
#include <map>
25-
#include <pulsar/defines.h>
26+
#include <memory>
2627

2728
namespace pulsar {
2829

include/pulsar/KeySharedPolicy.h

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#include <pulsar/defines.h>
2222

2323
#include <memory>
24-
2524
#include <utility>
2625
#include <vector>
2726

include/pulsar/Logger.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@
1818
*/
1919
#pragma once
2020

21+
#include <pulsar/defines.h>
22+
2123
#include <memory>
2224
#include <string>
23-
#include <pulsar/defines.h>
2425

2526
namespace pulsar {
2627

include/pulsar/Message.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
#ifndef MESSAGE_HPP_
2020
#define MESSAGE_HPP_
2121

22-
#include <map>
23-
#include <string>
22+
#include <pulsar/defines.h>
2423

24+
#include <map>
2525
#include <memory>
26+
#include <string>
2627

27-
#include <pulsar/defines.h>
2828
#include "MessageId.h"
2929

3030
namespace pulsar {

include/pulsar/MessageBatch.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919

2020
#ifndef LIB_MESSAGE_BATCH_H
2121
#define LIB_MESSAGE_BATCH_H
22-
#include <vector>
23-
24-
#include <pulsar/defines.h>
2522
#include <pulsar/Message.h>
23+
#include <pulsar/defines.h>
24+
25+
#include <vector>
2626

2727
namespace pulsar {
2828

include/pulsar/MessageBuilder.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919
#ifndef MESSAGE_BUILDER_H
2020
#define MESSAGE_BUILDER_H
2121

22+
#include <pulsar/Message.h>
23+
#include <pulsar/defines.h>
24+
2225
#include <chrono>
2326
#include <string>
2427
#include <vector>
2528

26-
#include <pulsar/Message.h>
27-
#include <pulsar/defines.h>
28-
2929
namespace pulsar {
3030
class PulsarWrapper;
3131

include/pulsar/MessageId.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@
1919
#ifndef MESSAGE_ID_H
2020
#define MESSAGE_ID_H
2121

22-
#include <iosfwd>
22+
#include <pulsar/defines.h>
2323
#include <stdint.h>
24+
25+
#include <iosfwd>
2426
#include <memory>
2527
#include <string>
26-
#include <pulsar/defines.h>
2728

2829
namespace pulsar {
2930

include/pulsar/MessageRoutingPolicy.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@
1919
#ifndef PULSAR_MESSAGE_ROUTING_POLICY_HEADER_
2020
#define PULSAR_MESSAGE_ROUTING_POLICY_HEADER_
2121

22-
#include <pulsar/defines.h>
2322
#include <pulsar/DeprecatedException.h>
2423
#include <pulsar/Message.h>
2524
#include <pulsar/TopicMetadata.h>
25+
#include <pulsar/defines.h>
26+
2627
#include <memory>
2728

2829
/*

include/pulsar/Producer.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@
1919
#ifndef PRODUCER_HPP_
2020
#define PRODUCER_HPP_
2121

22-
#include <pulsar/defines.h>
2322
#include <pulsar/ProducerConfiguration.h>
24-
#include <memory>
23+
#include <pulsar/defines.h>
2524
#include <stdint.h>
2625

26+
#include <memory>
27+
2728
namespace pulsar {
2829
class ProducerImplBase;
2930
class PulsarWrapper;

include/pulsar/ProducerConfiguration.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,16 @@
1818
*/
1919
#ifndef PULSAR_PRODUCERCONFIGURATION_H_
2020
#define PULSAR_PRODUCERCONFIGURATION_H_
21-
#include <pulsar/defines.h>
2221
#include <pulsar/CompressionType.h>
23-
#include <pulsar/MessageRoutingPolicy.h>
24-
#include <pulsar/Result.h>
22+
#include <pulsar/CryptoKeyReader.h>
2523
#include <pulsar/Message.h>
26-
#include <functional>
24+
#include <pulsar/MessageRoutingPolicy.h>
2725
#include <pulsar/ProducerCryptoFailureAction.h>
28-
#include <pulsar/CryptoKeyReader.h>
26+
#include <pulsar/Result.h>
2927
#include <pulsar/Schema.h>
28+
#include <pulsar/defines.h>
3029

30+
#include <functional>
3131
#include <set>
3232

3333
namespace pulsar {

include/pulsar/ProtobufNativeSchema.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
*/
1919
#pragma once
2020

21-
#include <pulsar/Schema.h>
2221
#include <google/protobuf/descriptor.h>
22+
#include <pulsar/Schema.h>
2323

2424
namespace pulsar {
2525

include/pulsar/Reader.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
#ifndef PULSAR_READER_HPP_
2020
#define PULSAR_READER_HPP_
2121

22-
#include <pulsar/defines.h>
2322
#include <pulsar/Message.h>
2423
#include <pulsar/ReaderConfiguration.h>
24+
#include <pulsar/defines.h>
2525

2626
namespace pulsar {
2727
class PulsarWrapper;

0 commit comments

Comments
 (0)