COVISE Core
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
tokenbuffer.h
Go to the documentation of this file.
1 /* This file is part of COVISE.
2 
3  You can use it under the terms of the GNU Lesser General Public License
4  version 2.1 or later, see lgpl-2.1.txt.
5 
6  * License: LGPL 2+ */
7 
8 #ifndef TokenBuffer_H
9 #define TokenBuffer_H
10 
11 #include <string.h>
12 #include <stdio.h>
13 #include <iostream>
14 #include <string>
15 
16 #include <util/coExport.h>
17 #include <util/byteswap.h>
18 
19 #ifdef _WIN64
20 #define __WORDSIZE 64
21 #endif
22 
23 /*
24  $Log: $
25  * Revision 1.4 1994/03/23 18:07:03 zrf30125
26  * Modifications for multiple Shared Memory segments have been finished
27  * (not yet for Cray)
28  *
29  * Revision 1.3 93/10/11 09:22:19 zrhk0125
30  * new types DM_CONTACT_DM and APP_CONTACT_DM included
31  *
32  * Revision 1.2 93/10/08 19:18:06 zrhk0125
33  * data type sizes introduced
34 * some fixed type sizes with sizeof calls replaced
35  *
36  * Revision 1.1 93/09/25 20:47:03 zrhk0125
37  * Initial revision
38  *
39  */
40 
41 /***********************************************************************\
42  ** **
43  ** Message classes Version: 1.1 **
44  ** **
45  ** **
46  ** Description : The basic message structure as well as ways to **
47  ** initialize messages easily are provided. **
48  ** Subclasses for special types of messages **
49  ** can be introduced. **
50  ** **
51  ** Classes : Message, ShmMessage **
52  ** **
53  ** Copyright (C) 1993 by University of Stuttgart **
54  ** Computer Center (RUS) **
55  ** Allmandring 30 **
56  ** 7000 Stuttgart 80 **
57  ** HOSTID **
58  ** **
59  ** Author : A. Wierse (RUS) **
60  ** **
61  ** History : **
62  ** 15.04.93 Ver 1.0 **
63  ** 15.04.93 Ver 1.1 new Messages and type added **
64  ** sender and send_type added **
65  ** **
66  ** **
67 \***********************************************************************/
68 
69 namespace covise
70 {
71 
72 class Message;
73 
74 class NETEXPORT TokenBuffer // class for tokens
75 {
76 private:
77  enum Types
78  {
79  TbBool = 7,
88  };
89 
90  void puttype(Types t);
91  bool checktype(Types t);
92 
93  TokenBuffer(const TokenBuffer &other) = delete;
94  TokenBuffer &operator=(const TokenBuffer &other) = delete;
95 
96  bool debug = false;
97  int buflen = 0; // number of allocated bytes
98  int length = 0; // number of used bytes
99  char *data = nullptr; // pointer to the tokens
100  char *currdata = nullptr; // pointer to the tokens
101  bool networkByteOrder = false;
102 
103  void incbuf(int size = 100);
104 
105 public:
106  TokenBuffer();
107  explicit TokenBuffer(bool nbo);
108  TokenBuffer(int al, bool nbo = false);
109  virtual ~TokenBuffer();
110 
111  void delete_data();
112  TokenBuffer(const Message *msg, bool nbo = false);
113  TokenBuffer(const char *dat, int len, bool nbo = false);
114  TokenBuffer &operator=(TokenBuffer &&other);
115  void copy(const TokenBuffer &other);
116 
117  const char *getBinary(int n);
118  void addBinary(const char *buf, int n);
119  const char *allocBinary(int n);
120 
121  TokenBuffer &operator<<(const bool b);
122  TokenBuffer &operator<<(const uint64_t i);
123 #ifndef WIN32 // it does not work on win32 as size_t == int
124  //TokenBuffer& operator << (const size_t s){return (*this<<(uint64_t)s);}
125 #endif
126  TokenBuffer &operator<<(const uint32_t i);
127  TokenBuffer &operator<<(const int i);
129  TokenBuffer &operator<<(const char c);
130  TokenBuffer &operator<<(const float f);
131  TokenBuffer &operator<<(const double f);
132  TokenBuffer &operator<<(const char *c);
134 
135  TokenBuffer &operator>>(bool &b);
136  TokenBuffer &operator>>(uint64_t &i);
137 #ifndef WIN32 // it does not work on win32 as size_t == int
138  //TokenBuffer& operator >> (size_t &s){uint64_t i; *this>>i; s=i; return *this; }
139 #endif
140  TokenBuffer &operator>>(uint32_t &i);
141  TokenBuffer &operator>>(int &i);
142  TokenBuffer &operator>>(char &c);
143  TokenBuffer &operator>>(unsigned char &c);
144  TokenBuffer &operator>>(float &f);
145  TokenBuffer &operator>>(double &f);
147  TokenBuffer &operator>>(char *&c);
149  uint32_t get_int_token();
150  char get_char_token();;
151  float get_float_token();
152  char *get_charp_token();;
153  int get_length() const
154  {
155  return (length);
156  }
157  const char *get_data() const
158  {
159  return (data);
160  }
161  void reset();
162  void rewind();
163 };
164 }
165 
166 #endif
GLsizeiptr size
Definition: khronos-glext.h:6610
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: khronos-glext.h:8469
covise::TokenBuffer & operator>>(covise::TokenBuffer &tb, vrb::SessionID &id)
Definition: SessionID.cpp:119
GLsizei const GLchar *const * string
Definition: khronos-glext.h:6750
GLsizei GLsizei GLenum GLenum const GLvoid * data
Definition: khronos-glext.h:6354
GLenum GLuint GLenum GLsizei length
Definition: khronos-glext.h:6279
Definition: tokenbuffer.h:81
Definition: tokenbuffer.h:86
QTextStream & operator<<(QTextStream &out, const coConfigEntryStringList list)
Definition: coConfigEntryString.cpp:166
Definition: tokenbuffer.h:80
GLfloat f
Definition: khronos-glext.h:8258
const GLubyte * c
Definition: khronos-glext.h:9864
int get_length() const
Definition: tokenbuffer.h:153
Definition: tokenbuffer.h:82
Definition: tokenbuffer.h:84
GLdouble GLdouble t
Definition: khronos-glext.h:6449
GLboolean reset
Definition: khronos-glext.h:6369
Types
Definition: tokenbuffer.h:77
Definition: tokenbuffer.h:83
GLdouble s
Definition: khronos-glext.h:6441
#define NETEXPORT
Definition: coExport.h:361
Definition: tokenbuffer.h:87
GLenum GLsizei len
Definition: khronos-glext.h:7440
GLdouble n
Definition: khronos-glext.h:8447
GLboolean GLboolean GLboolean b
Definition: khronos-glext.h:6895
Definition: tokenbuffer.h:85
const char * get_data() const
Definition: tokenbuffer.h:157
Definition: tokenbuffer.h:74
Definition: message.h:111