22 #ifndef ULTIMA8_USECODE_UCSTACK_H 23 #define ULTIMA8_USECODE_UCSTACK_H 25 #include "common/scummsys.h" 43 BaseUCStack(uint32 len, uint8 *b) : _buf(b), _size(len) {
45 _bufPtr = _buf + _size;
49 inline uint32 getSize()
const {
53 inline uint32 stacksize()
const {
54 return _size - (_bufPtr - _buf);
57 inline void addSP(
const int32 offset) {
61 inline unsigned int getSP()
const {
62 return static_cast<unsigned int>(_bufPtr - _buf);
65 inline void setSP(
unsigned int pos) {
73 inline void push1(uint8 val) {
78 inline void push2(uint16 val) {
80 _bufPtr[0] =
static_cast<uint8
>(val & 0xFF);
81 _bufPtr[1] =
static_cast<uint8
>((val >> 8) & 0xFF);
83 inline void push4(uint32 val) {
85 _bufPtr[0] =
static_cast<uint8
>(val & 0xFF);
86 _bufPtr[1] =
static_cast<uint8
>((val >> 8) & 0xFF);
87 _bufPtr[2] =
static_cast<uint8
>((val >> 16) & 0xFF);
88 _bufPtr[3] =
static_cast<uint8
>((val >> 24) & 0xFF);
91 inline void push0(
const uint32 count) {
93 memset(_bufPtr, 0, count);
96 inline void push(
const uint8 *in,
const uint32 count) {
98 memcpy(_bufPtr, in, count);
105 inline uint16 pop2() {
109 return (b0 | (b1 << 8));
111 inline uint32 pop4() {
112 uint8 b0, b1, b2, b3;
117 return (b0 | (b1 << 8) | (b2 << 16) | (b3 << 24));
119 inline void pop(uint8 *out,
const uint32 count) {
120 memcpy(out, _bufPtr, count);
128 inline uint8 access1(
const uint32 offset)
const {
131 inline uint16 access2(
const uint32 offset)
const {
132 return (_buf[offset] | (_buf[offset + 1] << 8));
134 inline uint32 access4(
const uint32 offset)
const {
135 return _buf[offset] | (_buf[offset + 1] << 8) |
136 (_buf[offset + 2] << 16) | (_buf[offset + 3] << 24);
138 inline uint8 *access(
const uint32 offset) {
139 return _buf + offset;
141 inline uint8 *access() {
149 inline void assign1(
const uint32 offset,
const uint8 val) {
150 const_cast<uint8 *
>(_buf)[offset] = static_cast<uint8>(val & 0xFF);
152 inline void assign2(
const uint32 offset,
const uint16 val) {
153 const_cast<uint8 *
>(_buf)[offset] = static_cast<uint8>(val & 0xFF);
154 const_cast<uint8 *
>(_buf)[offset + 1] = static_cast<uint8>((val >> 8) & 0xFF);
156 inline void assign4(
const uint32 offset,
const uint32 val) {
157 const_cast<uint8 *
>(_buf)[offset] = static_cast<uint8>(val & 0xFF);
158 const_cast<uint8 *
>(_buf)[offset + 1] = static_cast<uint8>((val >> 8) & 0xFF);
159 const_cast<uint8 *
>(_buf)[offset + 2] = static_cast<uint8>((val >> 16) & 0xFF);
160 const_cast<uint8 *
>(_buf)[offset + 3] = static_cast<uint8>((val >> 24) & 0xFF);
162 inline void assign(
const uint32 offset,
const uint8 *in,
const uint32 len) {
163 memcpy(const_cast<uint8 *>(_buf) + offset, in, len);
174 #ifdef USE_DYNAMIC_UCSTACK 175 #define UCStack DynamicUCStack 181 #ifndef USE_DYNAMIC_UCSTACK 183 uint8 _bufArray[0x1000];
Definition: uc_stack.h:182
Definition: uc_stack.h:36
Definition: detection.h:27
Definition: algorithm.h:29
Definition: uc_stack.h:167