浏览代码

moved base64 function to memory object

master
myitinos 5 年前
父节点
当前提交
ee09e4c6dd
共有 3 个文件被更改,包括 96 次插入13 次删除
  1. +6
    -10
      Makefile
  2. +0
    -1
      cpp-base64
  3. +90
    -2
      src/system/memory.cpp

+ 6
- 10
Makefile 查看文件

@ -1,7 +1,7 @@
COMPILER=g++
FLAGS=-g -I. -pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat="o">=2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow="o">=5 -Wswitch-default -Wundef -Werror -Wno-unused
#FLAGS=-g -I. -pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default -Wundef -Werror -Wno-unused
#FLAGS=-g -I.
#FLAGS=-I.
FLAGS=-I.
O_DIR=obj
CLASS_DIR=src/class
@ -12,13 +12,12 @@ OBJ_CMD=$(COMPILER) $(FLAGS) -c $< -o $@
.PHONY : clean
version002 : main002.o character.o player.o monster.o battle.o creation.o info.o betatest.o memory.o flag.o base64.o
version002 : main002.o character.o player.o monster.o battle.o creation.o info.o betatest.o memory.o flag.o
$(COMPILER) $(FLAGS) -o $@ \
main002.o \
character.o player.o monster.o \
info.o creation.o battle.o \
betatest.o flag.o memory.o \
base64.o
betatest.o flag.o memory.o
main002.o : main002.cpp $(CLASS_DIR)/player.hpp $(INTER_DIR)/creation.hpp $(INTER_DIR)/info.hpp $(SYS_DIR)/betatest.hpp
$(OBJ_CMD)
@ -47,11 +46,8 @@ betatest.o : $(SYS_DIR)/betatest.cpp $(SYS_DIR)/betatest.hpp
flag.o : $(SYS_DIR)/flag.cpp $(SYS_DIR)/flag.hpp
$(OBJ_CMD)
memory.o : $(SYS_DIR)/memory.cpp $(SYS_DIR)/memory.hpp $(CLASS_DIR)/player.hpp cpp-base64/base64.h
memory.o : $(SYS_DIR)/memory.cpp $(SYS_DIR)/memory.hpp $(CLASS_DIR)/player.hpp
$(OBJ_CMD)
base64.o : cpp-base64/base64.cpp cpp-base64/base64.h
$(COMPILER) -I. -c $< -o $@
clean :
rm -f *.o

+ 0
- 1
cpp-base64

@ -1 +0,0 @@
Subproject commit 6420804f7ba10e8c3049c6e3b59ec88c88d808a6

+ 90
- 2
src/system/memory.cpp 查看文件

@ -1,10 +1,98 @@
#include "memory.hpp"
#include "cpp-base64/base64.h"
#include <iostream>
#include <string>
#include <cstring>
static const std::string base64_chars =
"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"0123456789+/";
static inline bool is_base64(unsigned char c) {
return (isalnum(c) || (c == '+') || (c == '/'));
}
std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
std::string ret;
int i = 0;
int j = 0;
unsigned char char_array_3[3];
unsigned char char_array_4[4];
while (in_len--) {
char_array_3[i++] = *(bytes_to_encode++);
if (i == 3) {
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
char_array_4[3] = char_array_3[2] & 0x3f;
for(i = 0; (i <4) ; i++)
ret += base64_chars[char_array_4[i]];
i = 0;
}
}
if (i)
{
for(j = i; j < 3; j++)
char_array_3[j] = '\0';
char_array_4[0] = ( char_array_3[0] & 0xfc) >> 2;
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
for (j = 0; (j < i + 1); j++)
ret += base64_chars[char_array_4[j]];
while((i++ < 3))
ret += '=';
}
return ret;
}
std::string base64_decode(std::string const& encoded_string) {
int in_len = encoded_string.size();
int i = 0;
int j = 0;
int in_ = 0;
unsigned char char_array_4[4], char_array_3[3];
std::string ret;
while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
char_array_4[i++] = encoded_string[in_]; in_++;
if (i ==4) {
for (i = 0; i <4; i++)
char_array_4[i] = base64_chars.find(char_array_4[i]);
char_array_3[0] = ( char_array_4[0] << 2 ) + ((char_array_4[1] & 0x30) >> 4);
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
for (i = 0; (i < 3); i++)
ret += char_array_3[i];
i = 0;
}
}
if (i) {
for (j = 0; j < i; j++)
char_array_4[j] = base64_chars.find(char_array_4[j]);
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
}
return ret;
}
Player *Memory::loadFromCode(std::string code)
{
code = base64_decode(code);

正在加载...
取消
保存