JunkBox_Lib++ (for Windows) 1.10.1
Loading...
Searching...
No Matches
tools++_alt.h
Go to the documentation of this file.
1#ifndef __JBXL_CPP_TOOLSPP_H_
2#define __JBXL_CPP_TOOLSPP_H_
3
10#include "common++.h"
11#include "tools.h"
12#include "xtools.h"
13
14
15//
16namespace jbxl {
17
18
20// Classes
21//
22
23#define JBXL_ARRAYPARAM_MAX_NUM 256
24
25
30template <typename T=double> class ArrayParam
31{
32private:
33 int _size;
35
36public:
37 ArrayParam(int n = 0) { init(n);}
38 virtual ~ArrayParam(void) {} // ディストラクタではなく,free() で解放する.
39
40 void init(int n = 0);
41 void free(void);
42 void free_ptr(void);
43
44 int get_size(void) { return _size;}
45 T get_value(int n);
46 bool set_value(int n, T val);
47
48 void dup(ArrayParam<T> a, bool del = true);
49};
50
51
52template <typename T> void ArrayParam<T>::init(int n)
53{
54 if (n<0) n = 0;
55 if (n==0) {
56 _size = 0;
57 memset(_value, 0, JBXL_ARRAYPARAM_MAX_NUM);
58 return;
59 }
61 _size = n;
62 for (int i=0; i<JBXL_ARRAYPARAM_MAX_NUM; i++) _value[i] = (T)0;
63
64/*
65 if (n>0) {
66 _value = (T*)malloc(sizeof(T)*_size);
67 if (_value!=NULL) memset(_value, 0, sizeof(T)*_size);
68 }
69 else {
70 _value = NULL;
71 }
72*/
73 return;
74}
75
76
77template <typename T> void ArrayParam<T>::free(void)
78{
79 _size = 0;
80 for (int i=0; i<JBXL_ARRAYPARAM_MAX_NUM; i++) _value[i] = (T)0;
81/*
82 if (_size>0) {
83 _size = 0;
84 //DEBUG_MODE PRINT_MESG("ArrayParam<T>::free: _value = %016x\n", _value);
85 if (_value!=NULL) ::free(_value);
86 }
87 _value = NULL;
88*/
89 return;
90}
91
92
97template <typename T> void ArrayParam<T>::free_ptr(void)
98{
99 for (int i=0; i<_size; i++) {
100 if (_value[i]!=NULL) ::free(_value[i]);
101 }
102
103 _size = 0;
104 for (int i=0; i<JBXL_ARRAYPARAM_MAX_NUM; i++) _value[i] = (T)0;
105/*
106 if (_size<=0 || _value==NULL) return;
107
108 for (int i=0; i<_size; i++) {
109 if (_value[i]!=NULL){
110 ::free(_value[i]);
111 _value[i] = NULL;
112 }
113 }
114*/
115 return;
116}
117
118
119template <typename T> T ArrayParam<T>::get_value(int n)
120{
121 if (n<0 || n>=_size) return (T)0;
122 return _value[n];
123
124/*
125 if (_size<=0 || _value==NULL) return (T)0;
126
127 if (n<0) n = 0;
128 else if (n>=_size) n = _size-1;
129*/
130
131 return _value[n];
132}
133
134
138template <typename T> bool ArrayParam<T>::set_value(int n, T val)
139{
140 if (n>=_size || n<0) {
141 PRINT_MESG("WARNING: ArrayParam<T>::set_value: size missmatch (%d !< %d)\n", n, _size);
142 return false;
143 }
144 _value[n] = val;
145/*
146 if (_size<=0 || _value==NULL) return false;
147
148 if (n<0) n = 0;
149 else if (n>=_size) n = _size - 1;
150 _value[n] = val;
151*/
152 return true;
153}
154
155
167template <typename T> void ArrayParam<T>::dup(ArrayParam<T> a, bool del)
168{
169 UNUSED(del);
170
171 for (int i=0; i<JBXL_ARRAYPARAM_MAX_NUM; i++) _value[i] = (T)0;
172
173 _size = a.get_size();
174 for (int i=0; i<_size; i++) _value[i] = a.get_value(i);
175
176 return;
177/*
178 int size = a.get_size();
179 if (del) this->free();
180 this->init(size);
181
182 for (int i=0; i<size; i++) {
183 this->_value[i] = a.get_value(i);
184 }
185*/
186}
187
188
195template <typename T> void freeArrayParams(ArrayParam<T>* p, int num)
196{
197 if (p!=NULL) {
198 for (int i=0; i<num; i++) {
199 p[i].free();
200 }
201 ::free(p);
202 }
203}
204
205
206
212class Base64
213{
214public:
215 Base64(void) { init();}
216 virtual ~Base64(void) { free();}
217
218private:
219 void init(void) { }
220 void free(void) { }
221
222protected:
223
224public:
225 unsigned char* encode(unsigned char* str, int sz) { return encode_base64(str, sz);}
226 unsigned char* decode(unsigned char* str, int* sz) { return decode_base64(str, sz);}
229};
230
231
232
234//
235//
236
250// by tList
251//
252
253template <typename T> tList* add_tList_object(tList* lt, T obj)
254{
255 T* pp = new T();
256 *pp = obj;
257 lt = add_tList_node_bystr(lt, 0, 0, NULL, NULL, (void*)pp, sizeof(T));
258
259 return lt;
260}
261
262
263template <typename T> void del_tList_object(tList** lp)
264{
265 tList* lt = *lp;
266
267 while(lt!=NULL) {
268 T* pp = (T*)lt->ldat.ptr;
269 pp->free();
270 delete(pp);
271 lt->ldat.ptr = NULL;
272 lt->ldat.sz = 0;
273 lt = lt->next;
274 }
275 del_tList(lp);
276}
277
278
279
281// for MS Windows
282
283#ifdef WIN32
284
285#ifndef va_start
286 #include <stdarg.h>
287#endif
288
289void DisPatcher(int sno=0, ...);
290
291#endif // WIN32
292
293
294
295} // namespace
296
297
298#endif
Buffer encode_base64_Buffer(Buffer buf)
バイナリデータ buf.bufの buf.vldszバイトを Base64にエンコード する
Definition buffer.cpp:804
Buffer decode_base64_Buffer(Buffer str)
strのバッファを Base64からデコードする
Definition buffer.cpp:850
bool set_value(int n, T val)
void init(int n=0)
Definition tools++.h:51
virtual ~ArrayParam(void)
Definition tools++_alt.h:38
void dup(ArrayParam< T > a, bool del=true)
void free_ptr(void)
void free(void)
ArrayParam(int n=0)
Definition tools++_alt.h:37
T get_value(int n)
int get_size(void)
Definition tools++_alt.h:44
unsigned char * encode(unsigned char *str, int sz)
void init(void)
Definition tools++.h:178
virtual ~Base64(void)
unsigned char * decode(unsigned char *str, int *sz)
void free(void)
Definition tools++.h:179
Buffer decode(Buffer buf)
Buffer encode(Buffer buf)
Common Header for C++.
#define UNUSED(x)
Definition common.h:264
Definition Brep.h:29
void del_tList_object(tList **lp)
Definition tools++.h:224
void freeArrayParams(ArrayParam< T > *p, int num)
Definition tools++.h:155
tList * add_tList_object(tList *lt, T obj)
Definition tools++.h:214
void DisPatcher(int sno=0,...)
Definition tools++.cpp:33
tList * del_tList(tList **pp)
指定したリストノード以降のリストを削除.
Definition tlist.cpp:735
tList * add_tList_node_bystr(tList *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
文字列データからリスト用ノードを生成し(new),それをリストに追加.
Definition tlist.cpp:462
#define JBXL_ARRAYPARAM_MAX_NUM
Definition tools++_alt.h:23
unsigned char * encode_base64(unsigned char *buf, int sz)
バイナリデータ bufを base64にエンコードする.要 free()
Definition tools.cpp:2848
unsigned char * decode_base64(unsigned char *buf, int *sz)
bufを base64からデコードする.要 free()
Definition tools.cpp:2786
汎用ツールヘッダ
#define PRINT_MESG(...)
環境依存用の出力関数.MS Windows用は未実装
Definition tools.h:469
汎用拡張ツールヘッダ