JunkBox_Lib++ (for Windows) 1.10.1
Loading...
Searching...
No Matches
tools++.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
28//template <typename T=double> class ArrayParam
29template <typename T> class ArrayParam
30{
31private:
32 int _size;
34
35public:
36 ArrayParam(int n = 0) { init(n);}
37 virtual ~ArrayParam(void) {} // ディストラクタではなく,free() で解放する.
38
39 void init(int n = 0);
40 void free(void);
41 void free_ptr(void); // _value[i] がポインタの場合,各ポイント先を開放
42
43 int get_size(void) { return _size;}
44 T get_value(int n);
45 bool set_value(int n, T val);
46
47 void dup(ArrayParam<T> a, bool del = true);
48};
49
50
51template <typename T> void ArrayParam<T>::init(int n)
52{
53 if (n<0) n = 0;
54 _size = n;
55 if (_size==0) {
56 _value = NULL;
57 return;
58 }
59 if (n>0) _value = (T*)malloc(sizeof(T)*_size);
60 else _value = NULL;
61
62 return;
63}
64
65
66template <typename T> void ArrayParam<T>::free(void)
67{
68 if (_size>0) {
69 _size = 0;
70 //DEBUG_MODE PRINT_MESG("ArrayParam<T>::free: _value = %016x\n", _value);
71 if (_value!=NULL) ::free(_value);
72 }
73 _value = NULL;
74 return;
75}
76
77
82template <typename T> void ArrayParam<T>::free_ptr(void)
83{
84 if (_size<=0 || _value==NULL) return;
85
86 for (int i=0; i<_size; i++) {
87 if (_value[i]!=NULL){
88 ::free(_value[i]);
89 _value[i] = NULL;
90 }
91 }
92 return;
93}
94
95
96template <typename T> T ArrayParam<T>::get_value(int n)
97{
98 if (n>=_size || n<0) {
99 PRINT_MESG("WARNING: ArrayParam<T>::get_value: size missmatch (%d !< %d)\n", n, _size);
100 }
101 if (_size<=0 || _value==NULL) return (T)0;
102
103 if (n<0) n = 0;
104 else if (n>=_size) n = _size - 1;
105
106 return _value[n];
107}
108
109
113template <typename T> bool ArrayParam<T>::set_value(int n, T val)
114{
115 if (_size<=0 || _value==NULL) return false;
116
117 if (n>=_size || n<0) {
118 PRINT_MESG("WARNING: ArrayParam<T>::set_value: size missmatch (%d !< %d)\n", n, _size);
119 return false;
120 }
121
122 _value[n] = val;
123
124 return true;
125}
126
127
138template <typename T> void ArrayParam<T>::dup(ArrayParam<T> a, bool del)
139{
140 if (del) this->free();
141 this->init(a.get_size());
142
143 for (int i=0; i<this->_size; i++) {
144 this->_value[i] = a.get_value(i);
145 }
146}
147
148
155template <typename T> void freeArrayParams(ArrayParam<T>* p, int num)
156{
157 if (p!=NULL) {
158 for (int i=0; i<num; i++) {
159 p[i].free();
160 }
161 ::free(p);
162 }
163}
164
165
172{
173public:
174 Base64(void) { init();}
175 virtual ~Base64(void) { free();}
176
177private:
178 void init(void) { }
179 void free(void) { }
180
181protected:
182
183public:
184 unsigned char* encode(unsigned char* str, int sz) { return encode_base64(str, sz);}
185 unsigned char* decode(unsigned char* str, int* sz) { return decode_base64(str, sz);}
188
189 Buffer encode_Buffer_bin(unsigned char* str, int sz, int nopad=FALSE) { return encode_base64_Buffer_bin(str, sz, nopad);}
190};
191
192
193
195//
196//
197
211// by tList
212//
213
214template <typename T> tList* add_tList_object(tList* lt, T obj)
215{
216 T* pp = new T();
217 *pp = obj;
218 lt = add_tList_node_bystr(lt, 0, 0, NULL, NULL, (void*)pp, sizeof(T));
219
220 return lt;
221}
222
223
224template <typename T> void del_tList_object(tList** lp)
225{
226 tList* lt = *lp;
227
228 while(lt!=NULL) {
229 T* pp = (T*)lt->ldat.ptr;
230 pp->free();
231 delete(pp);
232 lt->ldat.ptr = NULL;
233 lt->ldat.sz = 0;
234 lt = lt->next;
235 }
236 del_tList(lp);
237}
238
239
240
242// for MS Windows
243
244#ifdef WIN32
245
246#ifndef va_start
247 #include <stdarg.h>
248#endif
249
250void DisPatcher(int sno=0, ...);
251
252#endif // WIN32
253
254
255
256} // namespace
257
258
259#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
Buffer encode_base64_Buffer_bin(unsigned char *bin, unsigned int sz, int nopad)
sz バイトの バイナリデータ binを Base64にエンコード する.
Definition buffer.cpp:881
bool set_value(int n, T val)
Definition tools++.h:113
void init(int n=0)
Definition tools++.h:51
virtual ~ArrayParam(void)
Definition tools++.h:37
void dup(ArrayParam< T > a, bool del=true)
Definition tools++.h:138
void free_ptr(void)
Definition tools++.h:82
void free(void)
Definition tools++.h:66
ArrayParam(int n=0)
Definition tools++.h:36
T get_value(int n)
Definition tools++.h:96
int get_size(void)
Definition tools++.h:43
Base64(void)
Definition tools++.h:174
Buffer encode_Buffer_bin(unsigned char *str, int sz, int nopad=FALSE)
Definition tools++.h:189
unsigned char * encode(unsigned char *str, int sz)
Definition tools++.h:184
void init(void)
Definition tools++.h:178
virtual ~Base64(void)
Definition tools++.h:175
unsigned char * decode(unsigned char *str, int *sz)
Definition tools++.h:185
void free(void)
Definition tools++.h:179
Buffer decode(Buffer buf)
Definition tools++.h:187
Buffer encode(Buffer buf)
Definition tools++.h:186
Common Header for C++.
#define FALSE
Definition common.h:223
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
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
汎用拡張ツールヘッダ