sot-talos-balance  2.0.5
Collection of dynamic-graph entities aimed at implementing balance control on talos.
Markup.h
Go to the documentation of this file.
1 #ifndef QUALISYS_NBC_NBC_MARKUP_H_INCLUDED
2 #define QUALISYS_NBC_NBC_MARKUP_H_INCLUDED
3 
4 // Markup.h: interface for the NBC_CMarkup class.
5 //
6 // NBC_CMarkup Release 6.5 Lite
7 // Copyright (C) 1999-2003 First Objective Software, Inc. All rights reserved
8 // This entire notice must be retained in this source code
9 // Redistributing this source code requires written permission
10 // This software is provided "as is", with no warranty.
11 // Latest fixes enhancements and documentation at www.firstobject.com
12 
13 #include <string>
14 #include <vector>
15 
16 #ifdef _DEBUG
17 #define _DS(i) (i ? &((const char*)m_csDoc.c_str())[m_aPos[i].nStartL] : 0)
18 #define MARKUP_SETDEBUGSTATE \
19  m_pMainDS = _DS(m_iPos); \
20  m_pChildDS = _DS(m_iPosChild)
21 #else
22 #define MARKUP_SETDEBUGSTATE
23 #endif
24 
25 class CMarkup {
26  public:
27  CMarkup() {
28  SetDoc(NULL);
29  mnIndent = 4;
30  };
31  CMarkup(const char* szDoc) { SetDoc(szDoc); };
32  CMarkup(const CMarkup& markup) { *this = markup; };
33  void operator=(const CMarkup& markup);
34  virtual ~CMarkup(){};
35 
36  // Settings
37  void SetIndent(int nIndent = 4);
38 
39  // Create
40  std::string GetDoc() const { return m_csDoc; };
41  bool AddElem(const char* szName, const char* szData = NULL) {
42  return x_AddElem(szName, szData, false, false);
43  };
44  bool AddChildElem(const char* szName, const char* szData = NULL) {
45  return x_AddElem(szName, szData, false, true);
46  };
47  bool AddAttrib(const char* szAttrib, const char* szValue) {
48  return x_SetAttrib(m_iPos, szAttrib, szValue);
49  };
50  bool AddChildAttrib(const char* szAttrib, const char* szValue) {
51  return x_SetAttrib(m_iPosChild, szAttrib, szValue);
52  };
53  bool SetAttrib(const char* szAttrib, const char* szValue) {
54  return x_SetAttrib(m_iPos, szAttrib, szValue);
55  };
56  bool SetChildAttrib(const char* szAttrib, const char* szValue) {
57  return x_SetAttrib(m_iPosChild, szAttrib, szValue);
58  };
59 
60  // Navigate
61  bool SetDoc(const char* szDoc);
62  bool IsWellFormed();
63  bool FindElem(const char* szName = NULL);
64  bool FindChildElem(const char* szName = NULL);
65  bool IntoElem();
66  bool OutOfElem();
68  void ResetMainPos() { x_SetPos(m_iPosParent, 0, 0); };
69  void ResetPos() { x_SetPos(0, 0, 0); };
70  std::string GetTagName() const;
71  std::string GetChildTagName() const { return x_GetTagName(m_iPosChild); };
72  std::string GetData() const { return x_GetData(m_iPos); };
73  std::string GetChildData() const { return x_GetData(m_iPosChild); };
74  std::string GetAttrib(const char* szAttrib) const {
75  return x_GetAttrib(m_iPos, szAttrib);
76  };
77  std::string GetChildAttrib(const char* szAttrib) const {
78  return x_GetAttrib(m_iPosChild, szAttrib);
79  };
80  std::string GetError() const { return m_csError; };
81 
82  static std::string Format(const char* fmt, ...);
83 
85  MNT_ELEMENT = 1, // 0x01
86  MNT_TEXT = 2, // 0x02
87  MNT_WHITESPACE = 4, // 0x04
88  MNT_CDATA_SECTION = 8, // 0x08
90  MNT_COMMENT = 32, // 0x20
91  MNT_DOCUMENT_TYPE = 64, // 0x40
92  MNT_EXCLUDE_WHITESPACE = 123, // 0x7b
93  };
94 
95  protected:
96 #ifdef _DEBUG
97  const char* m_pMainDS;
98  const char* m_pChildDS;
99 #endif
100 
101  std::string m_csDoc;
102  std::string m_csError;
103 
104  struct ElemPos {
105  ElemPos() { Clear(); };
106  ElemPos(const ElemPos& pos) { *this = pos; };
107  bool IsEmptyElement() const { return (nStartR == nEndL + 1); };
108  void Clear() {
109  nStartL = 0;
110  nStartR = 0;
111  nEndL = 0;
112  nEndR = 0;
113  nReserved = 0;
114  iElemParent = 0;
115  iElemChild = 0;
116  iElemNext = 0;
117  };
118  void AdjustStart(int n) {
119  nStartL += n;
120  nStartR += n;
121  };
122  void AdjustEnd(int n) {
123  nEndL += n;
124  nEndR += n;
125  };
126  int nStartL;
127  int nStartR;
128  int nEndL;
129  int nEndR;
134  };
135 
136  std::vector<ElemPos> m_aPos;
138  int m_iPos;
142 
143  struct TokenPos {
144  TokenPos(const char* sz) {
145  Clear();
146  szDoc = sz;
147  };
148  bool IsValid() const { return (nL <= nR); };
149  void Clear() {
150  nL = 0;
151  nR = -1;
152  nNext = 0;
153  bIsString = false;
154  };
155  bool Match(const char* szName) const;
156  int nL;
157  int nR;
158  int nNext;
159  const char* szDoc;
160  bool bIsString;
161  };
162 
163  void x_SetPos(int iPosParent, int iPos, int iPosChild) {
164  m_iPosParent = iPosParent;
165  m_iPos = iPos;
166  m_iPosChild = iPosChild;
167  m_nNodeType = iPos ? MNT_ELEMENT : 0;
169  };
170 
171  int x_GetFreePos();
172  int x_ReleasePos();
173  int x_ParseElem(int iPos);
174  int x_ParseError(const char* szError, const char* szName = NULL);
175  static bool x_FindChar(const char* szDoc, int& nChar, char c);
176  static bool x_FindAny(const char* szDoc, int& nChar);
177  static bool x_FindToken(TokenPos& token);
178  std::string x_GetToken(const TokenPos& token) const;
179  int x_FindElem(int iPosParent, int iPos, const char* szPath);
180  std::string x_GetTagName(int iPos) const;
181  std::string x_GetData(int iPos) const;
182  std::string x_GetAttrib(int iPos, const char* szAttrib) const;
183  bool x_AddElem(const char* szName, const char* szValue, bool bInsert,
184  bool bAddChild);
185  bool x_FindAttrib(TokenPos& token, const char* szAttrib = NULL) const;
186  bool x_SetAttrib(int iPos, const char* szAttrib, const char* szValue);
187  void x_LocateNew(int iPosParent, int& iPosRel, int& nOffset, int nLength,
188  int nFlags);
189  int x_ParseNode(TokenPos& token);
190  void x_DocChange(int nLeft, int nReplace, const std::string& csInsert);
191  void x_Adjust(int iPos, int nShift, bool bAfterPos = false);
192  std::string x_TextToDoc(const char* szText, bool bAttrib = false) const;
193  std::string x_TextFromDoc(int nLeft, int nRight) const;
194 
195  protected:
196  char mtIndent[1000];
197  int mnIndent;
198 
199  private:
200  std::string Mid(const std::string& tStr, int nFirst) const;
201  std::string Mid(const std::string& tStr, int nFirst, int nCount) const;
202  char* GetBuffer(std::string& tStr, int nMinLen = -1) const;
203  void ReleaseBuffer(std::string& tStr, int nNewLen = -1) const;
204 };
205 
206 #endif /* QUALISYS_NBC_NBC_MARKUP_H_INCLUDED */
CMarkup
Definition: Markup.h:25
CMarkup::ElemPos::nStartR
int nStartR
Definition: Markup.h:127
CMarkup::ElemPos::nEndL
int nEndL
Definition: Markup.h:128
CMarkup::x_GetData
std::string x_GetData(int iPos) const
Definition: Markup.cpp:572
CMarkup::~CMarkup
virtual ~CMarkup()
Definition: Markup.h:34
CMarkup::x_FindElem
int x_FindElem(int iPosParent, int iPos, const char *szPath)
Definition: Markup.cpp:377
CMarkup::ElemPos::ElemPos
ElemPos(const ElemPos &pos)
Definition: Markup.h:106
CMarkup::ElemPos::nReserved
int nReserved
Definition: Markup.h:130
CMarkup::m_aPos
std::vector< ElemPos > m_aPos
Definition: Markup.h:136
CMarkup::x_ParseError
int x_ParseError(const char *szError, const char *szName=NULL)
Definition: Markup.cpp:175
CMarkup::x_ParseElem
int x_ParseElem(int iPos)
Definition: Markup.cpp:184
CMarkup::GetChildAttrib
std::string GetChildAttrib(const char *szAttrib) const
Definition: Markup.h:77
CMarkup::mnIndent
int mnIndent
Definition: Markup.h:197
CMarkup::FindChildElem
bool FindChildElem(const char *szName=NULL)
Definition: Markup.cpp:101
CMarkup::MNT_COMMENT
@ MNT_COMMENT
Definition: Markup.h:90
CMarkup::MNT_TEXT
@ MNT_TEXT
Definition: Markup.h:86
CMarkup::x_FindChar
static bool x_FindChar(const char *szDoc, int &nChar, char c)
Definition: Markup.cpp:295
CMarkup::m_nNodeType
int m_nNodeType
Definition: Markup.h:141
CMarkup::TokenPos::TokenPos
TokenPos(const char *sz)
Definition: Markup.h:144
CMarkup::ResetChildPos
void ResetChildPos()
Definition: Markup.h:67
CMarkup::ElemPos::Clear
void Clear()
Definition: Markup.h:108
CMarkup::TokenPos::Match
bool Match(const char *szName) const
Definition: Markup.cpp:1068
CMarkup::CMarkup
CMarkup(const CMarkup &markup)
Definition: Markup.h:32
CMarkup::ElemPos::iElemNext
int iElemNext
Definition: Markup.h:133
CMarkup::MarkupNodeType
MarkupNodeType
Definition: Markup.h:84
CMarkup::x_ReleasePos
int x_ReleasePos()
Definition: Markup.cpp:166
CMarkup::MNT_EXCLUDE_WHITESPACE
@ MNT_EXCLUDE_WHITESPACE
Definition: Markup.h:92
CMarkup::GetChildTagName
std::string GetChildTagName() const
Definition: Markup.h:71
CMarkup::ElemPos
Definition: Markup.h:104
CMarkup::x_FindAny
static bool x_FindAny(const char *szDoc, int &nChar)
Definition: Markup.cpp:310
CMarkup::x_GetTagName
std::string x_GetTagName(int iPos) const
Definition: Markup.cpp:476
CMarkup::OutOfElem
bool OutOfElem()
Definition: Markup.cpp:143
CMarkup::SetAttrib
bool SetAttrib(const char *szAttrib, const char *szValue)
Definition: Markup.h:53
CMarkup::CMarkup
CMarkup(const char *szDoc)
Definition: Markup.h:31
CMarkup::MNT_PROCESSING_INSTRUCTION
@ MNT_PROCESSING_INSTRUCTION
Definition: Markup.h:89
CMarkup::x_FindAttrib
bool x_FindAttrib(TokenPos &token, const char *szAttrib=NULL) const
Definition: Markup.cpp:486
CMarkup::x_DocChange
void x_DocChange(int nLeft, int nReplace, const std::string &csInsert)
Definition: Markup.cpp:692
CMarkup::x_SetPos
void x_SetPos(int iPosParent, int iPos, int iPosChild)
Definition: Markup.h:163
CMarkup::ElemPos::AdjustStart
void AdjustStart(int n)
Definition: Markup.h:118
CMarkup::x_ParseNode
int x_ParseNode(TokenPos &token)
Definition: Markup.cpp:401
CMarkup::m_csDoc
std::string m_csDoc
Definition: Markup.h:101
CMarkup::m_iPos
int m_iPos
Definition: Markup.h:138
CMarkup::AddChildElem
bool AddChildElem(const char *szName, const char *szData=NULL)
Definition: Markup.h:44
CMarkup::GetData
std::string GetData() const
Definition: Markup.h:72
CMarkup::ElemPos::nEndR
int nEndR
Definition: Markup.h:129
CMarkup::GetTagName
std::string GetTagName() const
Definition: Markup.cpp:119
CMarkup::x_GetToken
std::string x_GetToken(const TokenPos &token) const
Definition: Markup.cpp:368
CMarkup::MNT_ELEMENT
@ MNT_ELEMENT
Definition: Markup.h:85
CMarkup::GetChildData
std::string GetChildData() const
Definition: Markup.h:73
CMarkup::m_iPosChild
int m_iPosChild
Definition: Markup.h:139
CMarkup::x_SetAttrib
bool x_SetAttrib(int iPos, const char *szAttrib, const char *szValue)
Definition: Markup.cpp:533
CMarkup::ElemPos::IsEmptyElement
bool IsEmptyElement() const
Definition: Markup.h:107
CMarkup::operator=
void operator=(const CMarkup &markup)
Definition: Markup.cpp:29
CMarkup::GetAttrib
std::string GetAttrib(const char *szAttrib) const
Definition: Markup.h:74
CMarkup::GetError
std::string GetError() const
Definition: Markup.h:80
CMarkup::m_csError
std::string m_csError
Definition: Markup.h:102
CMarkup::x_GetAttrib
std::string x_GetAttrib(int iPos, const char *szAttrib) const
Definition: Markup.cpp:519
CMarkup::TokenPos::Clear
void Clear()
Definition: Markup.h:149
MARKUP_SETDEBUGSTATE
#define MARKUP_SETDEBUGSTATE
Definition: Markup.h:22
CMarkup::x_GetFreePos
int x_GetFreePos()
Definition: Markup.cpp:156
CMarkup::TokenPos
Definition: Markup.h:143
CMarkup::x_AddElem
bool x_AddElem(const char *szName, const char *szValue, bool bInsert, bool bAddChild)
Definition: Markup.cpp:838
CMarkup::TokenPos::nR
int nR
Definition: Markup.h:157
CMarkup::ElemPos::nStartL
int nStartL
Definition: Markup.h:125
CMarkup::TokenPos::nL
int nL
Definition: Markup.h:156
CMarkup::TokenPos::IsValid
bool IsValid() const
Definition: Markup.h:148
CMarkup::MNT_CDATA_SECTION
@ MNT_CDATA_SECTION
Definition: Markup.h:88
CMarkup::AddAttrib
bool AddAttrib(const char *szAttrib, const char *szValue)
Definition: Markup.h:47
CMarkup::x_Adjust
void x_Adjust(int iPos, int nShift, bool bAfterPos=false)
Definition: Markup.cpp:721
CMarkup::ElemPos::iElemChild
int iElemChild
Definition: Markup.h:132
CMarkup::CMarkup
CMarkup()
Definition: Markup.h:27
CMarkup::ResetMainPos
void ResetMainPos()
Definition: Markup.h:68
CMarkup::MNT_WHITESPACE
@ MNT_WHITESPACE
Definition: Markup.h:87
CMarkup::IsWellFormed
bool IsWellFormed()
Definition: Markup.cpp:82
CMarkup::MNT_DOCUMENT_TYPE
@ MNT_DOCUMENT_TYPE
Definition: Markup.h:91
CMarkup::TokenPos::bIsString
bool bIsString
Definition: Markup.h:160
CMarkup::x_LocateNew
void x_LocateNew(int iPosParent, int &iPosRel, int &nOffset, int nLength, int nFlags)
Definition: Markup.cpp:763
CMarkup::m_iPosFree
int m_iPosFree
Definition: Markup.h:140
CMarkup::x_FindToken
static bool x_FindToken(TokenPos &token)
Definition: Markup.cpp:318
CMarkup::mtIndent
char mtIndent[1000]
Definition: Markup.h:196
CMarkup::TokenPos::szDoc
const char * szDoc
Definition: Markup.h:159
sot_talos_balance.test.test_base_estimator.c
c
Definition: test_base_estimator.py:23
CMarkup::m_iPosParent
int m_iPosParent
Definition: Markup.h:137
CMarkup::ResetPos
void ResetPos()
Definition: Markup.h:69
CMarkup::ElemPos::AdjustEnd
void AdjustEnd(int n)
Definition: Markup.h:122
CMarkup::SetDoc
bool SetDoc(const char *szDoc)
Definition: Markup.cpp:41
CMarkup::IntoElem
bool IntoElem()
Definition: Markup.cpp:127
CMarkup::x_TextToDoc
std::string x_TextToDoc(const char *szText, bool bAttrib=false) const
Definition: Markup.cpp:593
CMarkup::AddElem
bool AddElem(const char *szName, const char *szData=NULL)
Definition: Markup.h:41
CMarkup::FindElem
bool FindElem(const char *szName=NULL)
Definition: Markup.cpp:87
CMarkup::GetDoc
std::string GetDoc() const
Definition: Markup.h:40
CMarkup::Format
static std::string Format(const char *fmt,...)
Definition: Markup.cpp:984
CMarkup::TokenPos::nNext
int nNext
Definition: Markup.h:158
CMarkup::ElemPos::ElemPos
ElemPos()
Definition: Markup.h:105
CMarkup::ElemPos::iElemParent
int iElemParent
Definition: Markup.h:131
CMarkup::x_TextFromDoc
std::string x_TextFromDoc(int nLeft, int nRight) const
Definition: Markup.cpp:643
CMarkup::SetChildAttrib
bool SetChildAttrib(const char *szAttrib, const char *szValue)
Definition: Markup.h:56
CMarkup::AddChildAttrib
bool AddChildAttrib(const char *szAttrib, const char *szValue)
Definition: Markup.h:50
CMarkup::SetIndent
void SetIndent(int nIndent=4)
Definition: Markup.cpp:27