File: XcharMap.h

package info (click to toggle)
opensp 1.5.2-13
  • links: PTS
  • area: main
  • in suites: bookworm, bullseye, buster, stretch
  • size: 8,932 kB
  • ctags: 10,036
  • sloc: cpp: 65,784; ansic: 17,124; sh: 11,503; xml: 2,704; makefile: 926; perl: 561; yacc: 288; sed: 16
file content (100 lines) | stat: -rw-r--r-- 1,617 bytes parent folder | download | duplicates (9)
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Copyright (c) 1994 James Clark, 2000 Matthias Clasen
// See the file COPYING for copying permission.

#ifndef XcharMap_INCLUDED
#define XcharMap_INCLUDED 1

#include "types.h"
#include "Resource.h"
#include "Ptr.h"
#include "constant.h"
#include "CharMap.h"

#ifdef SP_NAMESPACE
namespace SP_NAMESPACE {
#endif

template<class T>
class SharedXcharMap : public Resource {
public:
  SharedXcharMap();
  SharedXcharMap(T defaultValue);
  T *ptr() { return v + 1; }
private:
#ifdef SP_MULTI_BYTE
  T v[2 + 0xffff];
#else
  T v[2 + 0xff];
#endif
};

template<class T>
class XcharMap {
public:
  XcharMap();
  XcharMap(T defaultValue);
  T operator[](Xchar c) const;
  void setRange(Char min, Char max, T val);
  void setChar(Char c, T val);
  void setEe(T val);
  void clear();
private:
  T *ptr_;
  Ptr<SharedXcharMap<T> > sharedMap_;
#ifdef SP_MULTI_BYTE
  Ptr<CharMapResource<T> > hiMap_;
#endif
};


template<class T>
inline  
T XcharMap<T>::operator[](Xchar c) const 
{ 
#ifdef SP_MULTI_BYTE
  if (c > 0xffff) 
    return hiMap_->operator[]((Char)c);
#endif
  return ptr_[c]; 
}

template<class T>
inline 
void XcharMap<T>::setChar(Char c, T val) 
{ 
#ifdef SP_MULTI_BYTE
  if (c > 0xffff) {
    hiMap_->setChar(c, val);
    return;
  }
#endif
  ptr_[c] = val;  
}

template<class T>
inline 
void XcharMap<T>::setEe(T val)
{ 
  ptr_[-1] = val; 
}

template<class T>
inline 
void XcharMap<T>::clear() 
{ 
  ptr_ = 0; 
  sharedMap_.clear(); 
#ifdef SP_MULTI_BYTE
  hiMap_.clear(); 
#endif
}

#ifdef SP_NAMESPACE
}
#endif

#endif /* not XcharMap_INCLUDED */

#ifdef SP_DEFINE_TEMPLATES
#include "XcharMap.cxx"
#endif