BLPAPI C++ 3.25.10
Loading...
Searching...
No Matches
blpapi_message.h
Go to the documentation of this file.
1/* Copyright 2012. Bloomberg Finance L.P.
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to
5 * deal in the Software without restriction, including without limitation the
6 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7 * sell copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions: The above
9 * copyright notice and this permission notice shall be included in all copies
10 * or substantial portions of the Software.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
17 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
18 * IN THE SOFTWARE.
19 */
20
28#ifndef INCLUDED_BLPAPI_MESSAGE
29#define INCLUDED_BLPAPI_MESSAGE
30
61#include <blpapi_call.h>
63#include <blpapi_defs.h>
64#include <blpapi_deprecate.h>
65#include <blpapi_element.h>
66#include <blpapi_name.h>
67#include <blpapi_service.h>
68#include <blpapi_streamproxy.h>
69#include <blpapi_timepoint.h>
70
71struct blpapi_Message;
72typedef struct blpapi_Message blpapi_Message_t;
73
74#ifdef __cplusplus
75extern "C" {
76#endif
77
80
82const char *blpapi_Message_typeString(const blpapi_Message_t *message);
83
85const char *blpapi_Message_topicName(const blpapi_Message_t *message);
86
89
92
94blpapi_CorrelationId_t blpapi_Message_correlationId(
95 const blpapi_Message_t *message, size_t index);
96
99 const blpapi_Message_t *message, const char **requestId);
100
103
106 const blpapi_Message_t *message, size_t *size);
107
110
113
116 blpapi_StreamWriter_t streamWriter,
117 void *stream,
118 int indentLevel,
119 int spacesPerLevel);
120
123
126
129 const blpapi_Message_t *message, blpapi_TimePoint_t *timeReceived);
130
131#ifdef __cplusplus
132}
133
141namespace BloombergLP {
142namespace blpapi {
143
161class Message {
162
163 blpapi_Message_t *d_handle;
164 Element d_elements;
165 bool d_isCloned;
166
167 public:
182
206
207 public:
208 // CREATORS
209
211 explicit Message(blpapi_Message_t *handle, bool clonable = false);
220
221 Message(const Message& original);
230 ~Message();
237 // MANIUPLATORS
238 Message& operator=(const Message& rhs);
247 // ACCESSORS
248 Name messageType() const;
253 BLPAPI_DEPRECATE_MESSAGE_TOPIC_NAME const char *topicName() const;
276 Service service() const;
281 int numCorrelationIds() const;
297 CorrelationId correlationId(size_t index = 0) const;
311 bool hasElement(const Name& name, bool excludeNullElements = false) const;
316 BLPAPI_DEPRECATE_STRING_NAME bool hasElement(
317 const char *name, bool excludeNullElements = false) const;
326 size_t numElements() const;
331 const Element getElement(const Name& name) const;
336 BLPAPI_DEPRECATE_STRING_NAME const Element getElement(
337 const char *name) const;
344 bool getElementAsBool(const Name& name) const;
349 BLPAPI_DEPRECATE_STRING_NAME bool getElementAsBool(const char *name) const;
356 char getElementAsChar(const Name& name) const;
361 BLPAPI_DEPRECATE_STRING_NAME char getElementAsChar(const char *name) const;
368 Int32 getElementAsInt32(const Name& name) const;
373 BLPAPI_DEPRECATE_STRING_NAME Int32 getElementAsInt32(
374 const char *name) const;
381 Int64 getElementAsInt64(const Name& name) const;
386 BLPAPI_DEPRECATE_STRING_NAME Int64 getElementAsInt64(
387 const char *name) const;
394 Float32 getElementAsFloat32(const Name& name) const;
399 BLPAPI_DEPRECATE_STRING_NAME Float32 getElementAsFloat32(
400 const char *name) const;
407 Float64 getElementAsFloat64(const Name& name) const;
412 BLPAPI_DEPRECATE_STRING_NAME Float64 getElementAsFloat64(
413 const char *name) const;
420 Datetime getElementAsDatetime(const Name& name) const;
425 BLPAPI_DEPRECATE_STRING_NAME Datetime getElementAsDatetime(
426 const char *name) const;
433 const char *getElementAsString(const Name& name) const;
438 BLPAPI_DEPRECATE_STRING_NAME const char *getElementAsString(
439 const char *name) const;
446 Bytes getElementAsBytes(const Name& name) const;
451 const char *getRequestId() const;
464 const Element asElement() const;
470 BLPAPI_DEPRECATE_STRING_NAME const char *getPrivateData(
471 size_t *size) const;
482 Fragment fragmentType() const;
489 int timeReceived(TimePoint *timestamp) const;
501 std::ostream& print(
502 std::ostream& stream, int level = 0, int spacesPerLevel = 4) const;
517 const blpapi_Message_t *impl() const;
522 blpapi_Message_t *impl();
527};
528
532// FREE OPERATORS
533std::ostream& operator<<(std::ostream& stream, const Message& message);
546// ============================================================================
547// INLINE AND TEMPLATE FUNCTION IMPLEMENTATIONS
548// ============================================================================
549
550// -------------
551// class Message
552// -------------
553// CREATORS
554inline Message::Message(blpapi_Message_t *handle, bool clonable)
555 : d_handle(handle)
556 , d_isCloned(clonable)
557{
558 if (handle) {
559 d_elements = Element(blpapi_Message_elements(handle));
560 }
561}
562
563inline Message::Message(const Message& original)
564 : d_handle(original.d_handle)
565 , d_elements(original.d_elements)
566 , d_isCloned(true)
567{
568 if (d_handle) {
570 }
571}
572
574{
575 if (d_isCloned && d_handle) {
577 }
578}
579// MANIPULATORS
581{
582
583 if (this == &rhs) {
584 return *this;
585 }
586
587 if (d_isCloned && (d_handle == rhs.d_handle)) {
588 return *this;
589 }
590
591 if (d_isCloned && d_handle) {
593 }
594 d_handle = rhs.d_handle;
595 d_elements = rhs.d_elements;
596 d_isCloned = true;
597
598 if (d_handle) {
600 }
601
602 return *this;
603}
604
605// ACCESSORS
607{
608 return Name(blpapi_Message_messageType(d_handle));
609}
610
611inline const char *Message::topicName() const
612{
613 return blpapi_Message_topicName(d_handle);
614}
615
617{
618 return Service(blpapi_Message_service(d_handle));
619}
620
622{
623 return blpapi_Message_numCorrelationIds(d_handle);
624}
625
626inline CorrelationId Message::correlationId(size_t index) const
627{
628 if (index >= (size_t)numCorrelationIds())
629 throw IndexOutOfRangeException("index >= numCorrelationIds");
630 return CorrelationId(blpapi_Message_correlationId(d_handle, index));
631}
632
634 const char *name, bool excludeNullElements) const
635{
636 return d_elements.hasElement(Name(name), excludeNullElements);
637}
638
640 const Name& name, bool excludeNullElements) const
641{
642 return d_elements.hasElement(name, excludeNullElements);
643}
644
645inline size_t Message::numElements() const { return d_elements.numElements(); }
646
647inline const Element Message::getElement(const Name& name) const
648{
649 return d_elements.getElement(name);
650}
651
652inline const Element Message::getElement(const char *nameString) const
653{
654 return d_elements.getElement(Name(nameString));
655}
656
657inline bool Message::getElementAsBool(const Name& name) const
658{
659 return d_elements.getElementAsBool(name);
660}
661
662inline bool Message::getElementAsBool(const char *name) const
663{
664 return d_elements.getElementAsBool(Name(name));
665}
666
667inline char Message::getElementAsChar(const Name& name) const
668{
669 return d_elements.getElementAsChar(name);
670}
671
672inline char Message::getElementAsChar(const char *name) const
673{
674 return d_elements.getElementAsChar(Name(name));
675}
676
677inline Int32 Message::getElementAsInt32(const Name& name) const
678{
679 return d_elements.getElementAsInt32(name);
680}
681
682inline Int32 Message::getElementAsInt32(const char *name) const
683{
684 return d_elements.getElementAsInt32(Name(name));
685}
686
687inline Int64 Message::getElementAsInt64(const Name& name) const
688{
689 return d_elements.getElementAsInt64(name);
690}
691
692inline Int64 Message::getElementAsInt64(const char *name) const
693{
694 return d_elements.getElementAsInt64(Name(name));
695}
696
698{
699 return d_elements.getElementAsFloat32(name);
700}
701
702inline Float32 Message::getElementAsFloat32(const char *name) const
703{
704 return d_elements.getElementAsFloat32(Name(name));
705}
706
708{
709 return d_elements.getElementAsFloat64(name);
710}
711
712inline Float64 Message::getElementAsFloat64(const char *name) const
713{
714 return d_elements.getElementAsFloat64(Name(name));
715}
716
718{
719 return d_elements.getElementAsDatetime(name);
720}
721
722inline Datetime Message::getElementAsDatetime(const char *name) const
723{
724 return d_elements.getElementAsDatetime(Name(name));
725}
726
727inline const char *Message::getElementAsString(const Name& name) const
728{
729 return d_elements.getElementAsString(name);
730}
731
732inline const char *Message::getElementAsString(const char *name) const
733{
734 return d_elements.getElementAsString(Name(name));
735}
736
737inline Bytes Message::getElementAsBytes(const Name& name) const
738{
739 return d_elements.getElementAsBytes(name);
740}
741
742inline const char *Message::getRequestId() const
743{
744 const char *requestId = 0;
745 BLPAPI_CALL(blpapi_Message_getRequestId)(d_handle, &requestId);
746 return requestId;
747}
748
749inline const Element Message::asElement() const { return d_elements; }
750
751inline const char *Message::getPrivateData(size_t *size) const
752{
753 return blpapi_Message_privateData(d_handle, size);
754}
755
760
762{
763 return static_cast<Message::RecapType::Type>(
765}
766
767inline int Message::timeReceived(TimePoint *timestamp) const
768{
769 return BLPAPI_CALL_MESSAGE_TIMERECEIVED(d_handle, timestamp);
770}
771
772inline std::ostream& Message::print(
773 std::ostream& stream, int level, int spacesPerLevel) const
774{
777 (d_handle,
779 &stream,
780 level,
781 spacesPerLevel);
782 return stream;
783 } else {
784 return d_elements.print(stream, level, spacesPerLevel);
785 }
786}
787
788inline std::ostream& operator<<(std::ostream& stream, const Message& message)
789{
790 return message.print(stream, 0, -1);
791}
792
793inline const blpapi_Message_t *Message::impl() const { return d_handle; }
794
795inline blpapi_Message_t *Message::impl() { return d_handle; }
796
797} // close namespace blpapi
798} // close namespace BloombergLP
799
800#endif // #ifdef __cplusplus
801#endif // #ifndef INCLUDED_BLPAPI_MESSAGE
Provide functions for dispatchtbl.
#define BLPAPI_CALL_MESSAGE_ADDREF(a1)
Definition blpapi_call.h:360
#define BLPAPI_CALL_MESSAGE_FRAGMENTTYPE(a1)
Definition blpapi_call.h:370
#define BLPAPI_CALL_AVAILABLE(FUNCNAME)
Definition blpapi_call.h:352
#define BLPAPI_CALL_MESSAGE_TIMERECEIVED(a1, a2)
Definition blpapi_call.h:453
#define BLPAPI_CALL(FUNCNAME)
Definition blpapi_call.h:353
#define BLPAPI_CALL_MESSAGE_RELEASE(a1)
Definition blpapi_call.h:361
Provide a key to identify individual subscriptions or requests.
Common definitions used by the library.
#define BLPAPI_MESSAGE_RECAPTYPE_NONE
Definition blpapi_defs.h:149
#define BLPAPI_MESSAGE_FRAGMENT_INTERMEDIATE
Definition blpapi_defs.h:146
#define BLPAPI_MESSAGE_FRAGMENT_END
Definition blpapi_defs.h:147
#define BLPAPI_MESSAGE_FRAGMENT_NONE
Definition blpapi_defs.h:144
#define BLPAPI_MESSAGE_FRAGMENT_START
Definition blpapi_defs.h:145
#define BLPAPI_MESSAGE_RECAPTYPE_UNSOLICITED
Definition blpapi_defs.h:151
#define BLPAPI_EXPORT
Definition blpapi_defs.h:171
#define BLPAPI_MESSAGE_RECAPTYPE_SOLICITED
Definition blpapi_defs.h:150
struct blpapi_Message blpapi_Message_t
Definition blpapi_dispatchtbl.h:78
Provide a representation of an item in a message.
BLPAPI_EXPORT const char * blpapi_Message_privateData(const blpapi_Message_t *message, size_t *size)
BLPAPI_EXPORT int blpapi_Message_release(const blpapi_Message_t *message)
BLPAPI_EXPORT int blpapi_Message_fragmentType(const blpapi_Message_t *message)
BLPAPI_EXPORT int blpapi_Message_timeReceived(const blpapi_Message_t *message, blpapi_TimePoint_t *timeReceived)
BLPAPI_EXPORT const char * blpapi_Message_typeString(const blpapi_Message_t *message)
BLPAPI_EXPORT int blpapi_Message_getRequestId(const blpapi_Message_t *message, const char **requestId)
BLPAPI_EXPORT const char * blpapi_Message_topicName(const blpapi_Message_t *message)
BLPAPI_EXPORT blpapi_Name_t * blpapi_Message_messageType(const blpapi_Message_t *message)
BLPAPI_EXPORT blpapi_Service_t * blpapi_Message_service(const blpapi_Message_t *message)
BLPAPI_EXPORT int blpapi_Message_addRef(const blpapi_Message_t *message)
BLPAPI_EXPORT int blpapi_Message_recapType(const blpapi_Message_t *message)
BLPAPI_EXPORT blpapi_CorrelationId_t blpapi_Message_correlationId(const blpapi_Message_t *message, size_t index)
BLPAPI_EXPORT int blpapi_Message_numCorrelationIds(const blpapi_Message_t *message)
BLPAPI_EXPORT blpapi_Element_t * blpapi_Message_elements(const blpapi_Message_t *message)
BLPAPI_EXPORT int blpapi_Message_print(const blpapi_Message_t *message, blpapi_StreamWriter_t streamWriter, void *stream, int indentLevel, int spacesPerLevel)
Provide a representation of strings for use as container keys.
A service which provides access to API data (provide or consume).
A signature for callback on print and default C++ implementation.
int(* blpapi_StreamWriter_t)(const char *data, int length, void *stream)
Definition blpapi_streamproxy.h:53
Provide a time point with respect to an epoch.
Definition blpapi_types.h:312
Definition blpapi_correlationid.h:201
Definition blpapi_datetime.h:245
Definition blpapi_element.h:465
BLPAPI_DEPRECATE_STRING_NAME Datetime getElementAsDatetime(const char *name) const
Definition blpapi_element.h:2290
Bytes getElementAsBytes(const Name &name) const
Definition blpapi_element.h:2310
BLPAPI_DEPRECATE_STRING_NAME int getElement(Element *result, const char *name) const
Definition blpapi_element.h:1910
BLPAPI_DEPRECATE_STRING_NAME Float64 getElementAsFloat64(const char *name) const
Definition blpapi_element.h:2280
BLPAPI_DEPRECATE_STRING_NAME bool hasElement(const char *name, bool excludeNullElements=false) const
Definition blpapi_element.h:2001
BLPAPI_DEPRECATE_STRING_NAME bool getElementAsBool(const char *name) const
Definition blpapi_element.h:2230
std::ostream & print(std::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition blpapi_element.h:2327
BLPAPI_DEPRECATE_STRING_NAME char getElementAsChar(const char *name) const
Definition blpapi_element.h:2240
BLPAPI_DEPRECATE_STRING_NAME Int64 getElementAsInt64(const char *name) const
Definition blpapi_element.h:2260
BLPAPI_DEPRECATE_STRING_NAME Int32 getElementAsInt32(const char *name) const
Definition blpapi_element.h:2250
BLPAPI_DEPRECATE_STRING_NAME const char * getElementAsString(const char *name) const
Definition blpapi_element.h:2300
BLPAPI_DEPRECATE_STRING_NAME Float32 getElementAsFloat32(const char *name) const
Definition blpapi_element.h:2270
size_t numElements() const
Definition blpapi_element.h:1985
Definition blpapi_exception.h:271
Definition blpapi_message.h:161
Service service() const
Definition blpapi_message.h:616
Fragment
Definition blpapi_message.h:171
@ FRAGMENT_END
the last fragmented message
Definition blpapi_message.h:179
@ FRAGMENT_NONE
message is not fragmented
Definition blpapi_message.h:173
@ FRAGMENT_INTERMEDIATE
intermediate fragmented messages
Definition blpapi_message.h:177
@ FRAGMENT_START
the first fragmented message
Definition blpapi_message.h:175
Bytes getElementAsBytes(const Name &name) const
Definition blpapi_message.h:737
Message & operator=(const Message &rhs)
Definition blpapi_message.h:580
const char * getElementAsString(const Name &name) const
Definition blpapi_message.h:727
const Element getElement(const Name &name) const
Definition blpapi_message.h:647
const Element asElement() const
Definition blpapi_message.h:749
int timeReceived(TimePoint *timestamp) const
Definition blpapi_message.h:767
BLPAPI_DEPRECATE_MESSAGE_TOPIC_NAME const char * topicName() const
Definition blpapi_message.h:611
CorrelationId correlationId(size_t index=0) const
Definition blpapi_message.h:626
BLPAPI_DEPRECATE_STRING_NAME const char * getPrivateData(size_t *size) const
Definition blpapi_message.h:751
std::ostream & print(std::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition blpapi_message.h:772
int numCorrelationIds() const
Definition blpapi_message.h:621
~Message()
Definition blpapi_message.h:573
Message(const Message &original)
Definition blpapi_message.h:554
bool hasElement(const Name &name, bool excludeNullElements=false) const
Definition blpapi_message.h:639
Name messageType() const
Definition blpapi_message.h:606
Fragment fragmentType() const
Definition blpapi_message.h:756
Int64 getElementAsInt64(const Name &name) const
Definition blpapi_message.h:687
RecapType::Type recapType() const
Definition blpapi_message.h:761
char getElementAsChar(const Name &name) const
Definition blpapi_message.h:667
const char * getRequestId() const
Definition blpapi_message.h:742
Float32 getElementAsFloat32(const Name &name) const
Definition blpapi_message.h:697
Datetime getElementAsDatetime(const Name &name) const
Definition blpapi_message.h:717
bool getElementAsBool(const Name &name) const
Definition blpapi_message.h:657
Int32 getElementAsInt32(const Name &name) const
Definition blpapi_message.h:677
Float64 getElementAsFloat64(const Name &name) const
Definition blpapi_message.h:707
size_t numElements() const
Definition blpapi_message.h:645
Definition blpapi_name.h:150
Definition blpapi_service.h:304
struct blpapi_Service blpapi_Service_t
Definition blpapi_types.h:166
struct blpapi_Name blpapi_Name_t
Definition blpapi_types.h:154
struct blpapi_Element blpapi_Element_t
Definition blpapi_types.h:136
blpapi_Float64_t Float64
Definition blpapi_types.h:474
blpapi_Float32_t Float32
Definition blpapi_types.h:473
blpapi_Int64_t Int64
Definition blpapi_types.h:471
std::ostream & operator<<(std::ostream &os, const CorrelationId &correlator)
Definition blpapi_correlationid.h:592
blpapi_Int32_t Int32
Definition blpapi_types.h:469
Definition blpapi_abstractsession.h:195
Definition blpapi_message.h:196
Type
Definition blpapi_message.h:197
@ e_unsolicited
generated at discretion of the service
Definition blpapi_message.h:202
@ e_solicited
generated on request by subscriber
Definition blpapi_message.h:200
@ e_none
normal data tick; not a recap
Definition blpapi_message.h:198
static int writeToStream(const char *data, int length, void *stream)
Definition blpapi_streamproxy.h:93
Definition blpapi_timepoint.h:104