Blame include/XcharMap.h

Packit 8a864e
// Copyright (c) 1994 James Clark, 2000 Matthias Clasen
Packit 8a864e
// See the file COPYING for copying permission.
Packit 8a864e
Packit 8a864e
#ifndef XcharMap_INCLUDED
Packit 8a864e
#define XcharMap_INCLUDED 1
Packit 8a864e
Packit 8a864e
#include "types.h"
Packit 8a864e
#include "Resource.h"
Packit 8a864e
#include "Ptr.h"
Packit 8a864e
#include "constant.h"
Packit 8a864e
#include "CharMap.h"
Packit 8a864e
Packit 8a864e
#ifdef SP_NAMESPACE
Packit 8a864e
namespace SP_NAMESPACE {
Packit 8a864e
#endif
Packit 8a864e
Packit 8a864e
template<class T>
Packit 8a864e
class SharedXcharMap : public Resource {
Packit 8a864e
public:
Packit 8a864e
  SharedXcharMap();
Packit 8a864e
  SharedXcharMap(T defaultValue);
Packit 8a864e
  T *ptr() { return v + 1; }
Packit 8a864e
private:
Packit 8a864e
#ifdef SP_MULTI_BYTE
Packit 8a864e
  T v[2 + 0xffff];
Packit 8a864e
#else
Packit 8a864e
  T v[2 + 0xff];
Packit 8a864e
#endif
Packit 8a864e
};
Packit 8a864e
Packit 8a864e
template<class T>
Packit 8a864e
class XcharMap {
Packit 8a864e
public:
Packit 8a864e
  XcharMap();
Packit 8a864e
  XcharMap(T defaultValue);
Packit 8a864e
  T operator[](Xchar c) const;
Packit 8a864e
  void setRange(Char min, Char max, T val);
Packit 8a864e
  void setChar(Char c, T val);
Packit 8a864e
  void setEe(T val);
Packit 8a864e
  void clear();
Packit 8a864e
private:
Packit 8a864e
  T *ptr_;
Packit 8a864e
  Ptr<SharedXcharMap<T> > sharedMap_;
Packit 8a864e
#ifdef SP_MULTI_BYTE
Packit 8a864e
  Ptr<CharMapResource<T> > hiMap_;
Packit 8a864e
#endif
Packit 8a864e
};
Packit 8a864e
Packit 8a864e
Packit 8a864e
template<class T>
Packit 8a864e
inline  
Packit 8a864e
T XcharMap<T>::operator[](Xchar c) const 
Packit 8a864e
{ 
Packit 8a864e
#ifdef SP_MULTI_BYTE
Packit 8a864e
  if (c > 0xffff) 
Packit 8a864e
    return hiMap_->operator[]((Char)c);
Packit 8a864e
#endif
Packit 8a864e
  return ptr_[c]; 
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
template<class T>
Packit 8a864e
inline 
Packit 8a864e
void XcharMap<T>::setChar(Char c, T val) 
Packit 8a864e
{ 
Packit 8a864e
#ifdef SP_MULTI_BYTE
Packit 8a864e
  if (c > 0xffff) {
Packit 8a864e
    hiMap_->setChar(c, val);
Packit 8a864e
    return;
Packit 8a864e
  }
Packit 8a864e
#endif
Packit 8a864e
  ptr_[c] = val;  
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
template<class T>
Packit 8a864e
inline 
Packit 8a864e
void XcharMap<T>::setEe(T val)
Packit 8a864e
{ 
Packit 8a864e
  ptr_[-1] = val; 
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
template<class T>
Packit 8a864e
inline 
Packit 8a864e
void XcharMap<T>::clear() 
Packit 8a864e
{ 
Packit 8a864e
  ptr_ = 0; 
Packit 8a864e
  sharedMap_.clear(); 
Packit 8a864e
#ifdef SP_MULTI_BYTE
Packit 8a864e
  hiMap_.clear(); 
Packit 8a864e
#endif
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
#ifdef SP_NAMESPACE
Packit 8a864e
}
Packit 8a864e
#endif
Packit 8a864e
Packit 8a864e
#endif /* not XcharMap_INCLUDED */
Packit 8a864e
Packit 8a864e
#ifdef SP_DEFINE_TEMPLATES
Packit 8a864e
#include "XcharMap.cxx"
Packit 8a864e
#endif