Autoarr2 works now
This commit is contained in:
parent
cb64df9218
commit
281befa1d7
@ -1,21 +1,24 @@
|
|||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../base/base.h"
|
#include "../base/base.h"
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class Autoarr2 {
|
class Autoarr2 {
|
||||||
|
public:
|
||||||
T** values;
|
T** values;
|
||||||
uint16 blocks_count;
|
uint16 blocks_count;
|
||||||
uint16 block_length;
|
uint16 block_length;
|
||||||
uint16 max_block_length;
|
uint16 max_block_length;
|
||||||
public:
|
uint32 length;
|
||||||
uint32 Length;
|
|
||||||
Autoarr2();
|
Autoarr2();
|
||||||
explicit Autoarr2(uint16 _max_block_length);
|
explicit Autoarr2(uint16 _max_block_length);
|
||||||
T* GetPtr(uint32 index);
|
T* getptr(uint32 index);
|
||||||
T Get(uint32 index);
|
T get(uint32 index);
|
||||||
void Set(uint32 index, T value);
|
void set(uint32 index, T value);
|
||||||
void Add(T value);
|
void add(T value);
|
||||||
~Autoarr2();
|
virtual ~Autoarr2();
|
||||||
};
|
};
|
||||||
|
|||||||
13
src/Autoarr/Autoarr2_instances.cpp
Normal file
13
src/Autoarr/Autoarr2_instances.cpp
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include "Autoarr2_methods.hpp"
|
||||||
|
|
||||||
|
template class Autoarr2<uint8>;
|
||||||
|
template class Autoarr2<int8>;
|
||||||
|
template class Autoarr2<uint16>;
|
||||||
|
template class Autoarr2<int16>;
|
||||||
|
template class Autoarr2<uint32>;
|
||||||
|
template class Autoarr2<int32>;
|
||||||
|
template class Autoarr2<uint64>;
|
||||||
|
template class Autoarr2<int64>;
|
||||||
|
template class Autoarr2<float>;
|
||||||
|
template class Autoarr2<double>;
|
||||||
|
template class Autoarr2<Unitype>;
|
||||||
@ -1,17 +1,16 @@
|
|||||||
//
|
#pragma once
|
||||||
//
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "Autoarr2.hpp"
|
#include "Autoarr2.hpp"
|
||||||
|
|
||||||
#define MAX_BLOCK_LENGTH_DEFAULT 64
|
#define __AUTOARR2_MAX_BLOCK_LENGTH_DEFAULT 64
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
Autoarr2<T>::Autoarr2() {
|
Autoarr2<T>::Autoarr2() {
|
||||||
values=NULL;
|
values=NULL;
|
||||||
block_length=0;
|
block_length=0;
|
||||||
blocks_count=0;
|
blocks_count=0;
|
||||||
max_block_length=MAX_BLOCK_LENGTH_DEFAULT;
|
length=0;
|
||||||
|
max_block_length=__AUTOARR2_MAX_BLOCK_LENGTH_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@ -20,38 +19,39 @@ Autoarr2<T>::Autoarr2(uint16 _max_block_length) : Autoarr2() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T *Autoarr2<T>::GetPtr(uint32 index) {
|
T *Autoarr2<T>::getptr(uint32 index) {
|
||||||
if(index>=Length) throwcpp_id(ERR_WRONGINDEX);
|
if(index>=length) throw_id(ERR_WRONGINDEX);
|
||||||
return values[index/max_block_length]+index%max_block_length;
|
return values[index/max_block_length]+index%max_block_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T Autoarr2<T>::Get(uint32 index) {
|
T Autoarr2<T>::get(uint32 index) {
|
||||||
return *GetPtr(index);
|
return *getptr(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void Autoarr2<T>::Set(uint32 index, T value) {
|
void Autoarr2<T>::set(uint32 index, T value) {
|
||||||
*GetPtr(index)=value;
|
*getptr(index)=value;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void Autoarr2<T>::Add(T value) {
|
void Autoarr2<T>::add(T value) {
|
||||||
if(!values){
|
if(!values){
|
||||||
values=malloc(sizeof(T*));
|
//values=(T**)malloc(sizeof(T*));
|
||||||
|
values=new[sizeof(T*)];
|
||||||
goto create_block;
|
goto create_block;
|
||||||
}
|
}
|
||||||
else if(block_length==max_block_length){
|
else if(block_length==max_block_length){
|
||||||
block_length=0;
|
block_length=0;
|
||||||
create_block:
|
create_block:
|
||||||
values=realloc(values,(blocks_count+1)*sizeof(T*));
|
values=(T**)realloc(values,(blocks_count+1)*sizeof(T*));
|
||||||
values[blocks_count]=malloc(max_block_length*sizeof(T));
|
values[blocks_count]=new[](max_block_length*sizeof(T));
|
||||||
blocks_count++;
|
blocks_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
values[blocks_count-1][block_length]=value;
|
values[blocks_count-1][block_length]=value;
|
||||||
block_length++;
|
block_length++;
|
||||||
Length++;
|
length++;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@ -1,9 +1,5 @@
|
|||||||
#include "Hashtable2.hpp"
|
#include "Hashtable2.hpp"
|
||||||
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
|
|
||||||
template<typename TKey, typename TValue>
|
template<typename TKey, typename TValue>
|
||||||
Hashtable2<TKey, TValue>::Hashtable2() {
|
Hashtable2<TKey, TValue>::Hashtable2() {
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,7 @@
|
|||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
|
|||||||
@ -9,10 +9,6 @@ extern "C" {
|
|||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
#include "cptr.h"
|
#include "cptr.h"
|
||||||
|
|
||||||
#if __cplusplus
|
|
||||||
#include "errors.hpp"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// executes codeblock and prints execution time
|
// executes codeblock and prints execution time
|
||||||
#ifdef CLOCK_REALTIME // non-standard high-precision clock
|
#ifdef CLOCK_REALTIME // non-standard high-precision clock
|
||||||
#define optime(opname,repeats,codeblock) ({\
|
#define optime(opname,repeats,codeblock) ({\
|
||||||
|
|||||||
@ -1,9 +0,0 @@
|
|||||||
#include "errors.hpp"
|
|
||||||
|
|
||||||
void throwcpp_id(ErrorId eid){
|
|
||||||
throwcpp_msg(errname(eid));
|
|
||||||
}
|
|
||||||
|
|
||||||
void throwcpp_msg(char* emsg){
|
|
||||||
__EXIT(emsg);
|
|
||||||
}
|
|
||||||
@ -24,7 +24,7 @@ typedef struct Maybe{
|
|||||||
|
|
||||||
// return it if func doesn't return anything
|
// return it if func doesn't return anything
|
||||||
// .value .errmsg
|
// .value .errmsg
|
||||||
static const Maybe MaybeNull={UniNull, NULL};
|
#define MaybeNull (Maybe){UniNull, NULL}
|
||||||
|
|
||||||
void Maybe_free(Maybe e);
|
void Maybe_free(Maybe e);
|
||||||
void printMaybe(Maybe e);
|
void printMaybe(Maybe e);
|
||||||
@ -46,6 +46,10 @@ char* __unknownErr( );
|
|||||||
default: __unknownErr\
|
default: __unknownErr\
|
||||||
)(E)
|
)(E)
|
||||||
|
|
||||||
|
#if __cplusplus
|
||||||
|
#define throw_id(E) __EXIT(((char*)__genErrMsg(errname(E), __FILE__,__LINE__,__func__)))
|
||||||
|
#define throw_msg(E) __EXIT(((char*)__genErrMsg(E, __FILE__,__LINE__,__func__)))
|
||||||
|
#endif
|
||||||
#define throw(E) __EXIT(((char*)__genErrMsg((__stringify_err(E)), __FILE__,__LINE__,__func__)))
|
#define throw(E) __EXIT(((char*)__genErrMsg((__stringify_err(E)), __FILE__,__LINE__,__func__)))
|
||||||
#define safethrow(E, FREEMEM) { FREEMEM; __RETURN_EXCEPTION(((char*)__genErrMsg((__stringify_err(E)), __FILE__,__LINE__,__func__))); }
|
#define safethrow(E, FREEMEM) { FREEMEM; __RETURN_EXCEPTION(((char*)__genErrMsg((__stringify_err(E)), __FILE__,__LINE__,__func__))); }
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#include "errors.h"
|
|
||||||
|
|
||||||
void throwcpp_id(ErrorId eid);
|
|
||||||
void throwcpp_msg(char* emsg);
|
|
||||||
#endif
|
|
||||||
@ -7,6 +7,7 @@ void test_all(){
|
|||||||
test_searchtree();
|
test_searchtree();
|
||||||
test_hashtable();
|
test_hashtable();
|
||||||
test_dtsod();
|
test_dtsod();
|
||||||
|
test_autoarr2();
|
||||||
printf("\e[96m---------------------------------------\e[0m\n");
|
printf("\e[96m---------------------------------------\e[0m\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,17 +20,17 @@ static void printautoarr(Autoarr(uint16)* ar){
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void fillar(Autoarr(uint16)* ar){
|
static void fillar(Autoarr(uint16)* ar){
|
||||||
for (uint32 i=0;i<Autoarr_max_length(ar);i++)
|
for (uint16 i=0;i<Autoarr_max_length(ar);i++)
|
||||||
Autoarr_add(ar,i);
|
Autoarr_add(ar,i);
|
||||||
}
|
}
|
||||||
static void resetar(Autoarr(uint16)* ar){
|
static void resetar(Autoarr(uint16)* ar){
|
||||||
for (uint32 i=0;i<Autoarr_max_length(ar);i++)
|
for (uint16 i=0;i<Autoarr_max_length(ar);i++)
|
||||||
Autoarr_set(ar,i,Autoarr_max_length(ar)-i-1);
|
Autoarr_set(ar,i,Autoarr_max_length(ar)-i-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void printallval(Autoarr(uint16)* ar){
|
static void printallval(Autoarr(uint16)* ar){
|
||||||
printf("\e[90m");
|
printf("\e[90m");
|
||||||
for (uint32 i=0;i<Autoarr_length(ar);i++)
|
for (uint16 i=0;i<Autoarr_length(ar);i++)
|
||||||
printf("%u ",Autoarr_get(ar,i));
|
printf("%u ",Autoarr_get(ar,i));
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
@ -48,6 +48,6 @@ void test_autoarr(){
|
|||||||
printf("\e[92mautoarr values reset\n");
|
printf("\e[92mautoarr values reset\n");
|
||||||
printallval(ar);
|
printallval(ar);
|
||||||
Autoarr_free(ar);
|
Autoarr_free(ar);
|
||||||
printf("\e[92mautoarr cleared\n");
|
printf("\e[92mautoarr deleted\n");
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|||||||
52
tests/test_autoarr2.cpp
Normal file
52
tests/test_autoarr2.cpp
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#include "tests.h"
|
||||||
|
#include "../src/Autoarr/Autoarr2.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
#define maxlength 160
|
||||||
|
|
||||||
|
void printautoarr2(Autoarr2<uint16>* ar){
|
||||||
|
printf("\e[94mAutoarr2<uint16>: "
|
||||||
|
IFWIN("%llu", "%lu")
|
||||||
|
"\n blocks_count: %u\n"
|
||||||
|
" max_block_length: %u\n"
|
||||||
|
" block_length: %u\n"
|
||||||
|
" length: %u\n",
|
||||||
|
sizeof(Autoarr2<uint16>),
|
||||||
|
ar->blocks_count,
|
||||||
|
ar->max_block_length,
|
||||||
|
ar->block_length,
|
||||||
|
ar->length);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fillar2(Autoarr2<uint16>* ar){
|
||||||
|
for (uint16 i=0;i<maxlength;i++)
|
||||||
|
ar->add(i);
|
||||||
|
}
|
||||||
|
void resetar2(Autoarr2<uint16>* ar){
|
||||||
|
for (uint16 i=0;i<maxlength;i++)
|
||||||
|
ar->set(i,maxlength-i-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printallval2(Autoarr2<uint16>* ar){
|
||||||
|
printf("\e[90m");
|
||||||
|
for (uint16 i=0;i<ar->length;i++)
|
||||||
|
printf("%u ",ar->get(i));
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_autoarr2(){
|
||||||
|
optime("test_autoarr",1,({
|
||||||
|
printf("\e[96m------------[test_autoarr2]-----------\n");
|
||||||
|
Autoarr2<uint16>* ar=new Autoarr2<uint16>(16);
|
||||||
|
printf("\e[92mautoarr2 created\n");
|
||||||
|
fillar2(ar);
|
||||||
|
printf("\e[92mautoarr2 filled up\n");
|
||||||
|
printautoarr2(ar);
|
||||||
|
printallval2(ar);
|
||||||
|
resetar2(ar);
|
||||||
|
printf("\e[92mautoarr2 values reset\n");
|
||||||
|
printallval2(ar);
|
||||||
|
delete ar;
|
||||||
|
printf("\e[92mautoarr2 deleted\n");
|
||||||
|
}));
|
||||||
|
}
|
||||||
@ -2,9 +2,16 @@
|
|||||||
|
|
||||||
#include "../src/base/base.h"
|
#include "../src/base/base.h"
|
||||||
|
|
||||||
|
#if __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
void test_searchtree();
|
void test_searchtree();
|
||||||
void test_autoarr();
|
void test_autoarr();
|
||||||
void test_hashtable();
|
void test_hashtable();
|
||||||
void test_string();
|
void test_string();
|
||||||
void test_dtsod();
|
void test_dtsod();
|
||||||
void test_safethrow();
|
void test_safethrow();
|
||||||
|
void test_autoarr2();
|
||||||
|
#if __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
Loading…
Reference in New Issue
Block a user