more binary format changes
This commit is contained in:
parent
7189b181ef
commit
3a44545540
4 changed files with 68 additions and 54 deletions
20
amount.h
20
amount.h
|
|
@ -171,13 +171,13 @@ inline std::istream& operator>>(std::istream& in, amount_t& amt) {
|
|||
std::ostream& operator<<(std::ostream& out, const amount_t& amt);
|
||||
|
||||
|
||||
#define COMMODITY_STYLE_DEFAULTS 0x00
|
||||
#define COMMODITY_STYLE_SUFFIXED 0x01
|
||||
#define COMMODITY_STYLE_SEPARATED 0x02
|
||||
#define COMMODITY_STYLE_EUROPEAN 0x04
|
||||
#define COMMODITY_STYLE_THOUSANDS 0x08
|
||||
#define COMMODITY_STYLE_CONSULTED 0x10
|
||||
#define COMMODITY_STYLE_NOMARKET 0x20
|
||||
#define COMMODITY_STYLE_DEFAULTS 0x0000
|
||||
#define COMMODITY_STYLE_SUFFIXED 0x0001
|
||||
#define COMMODITY_STYLE_SEPARATED 0x0002
|
||||
#define COMMODITY_STYLE_EUROPEAN 0x0004
|
||||
#define COMMODITY_STYLE_THOUSANDS 0x0008
|
||||
#define COMMODITY_STYLE_CONSULTED 0x0010
|
||||
#define COMMODITY_STYLE_NOMARKET 0x0020
|
||||
|
||||
typedef std::map<const std::time_t, amount_t> history_map;
|
||||
typedef std::pair<const std::time_t, amount_t> history_pair;
|
||||
|
|
@ -197,13 +197,13 @@ class commodity_t
|
|||
const std::time_t moment) = 0;
|
||||
};
|
||||
|
||||
typedef unsigned short ident_t;
|
||||
typedef unsigned long ident_t;
|
||||
|
||||
std::string symbol;
|
||||
std::string name;
|
||||
std::string note;
|
||||
unsigned int precision;
|
||||
unsigned int flags;
|
||||
unsigned short precision;
|
||||
unsigned short flags;
|
||||
history_map history;
|
||||
amount_t conversion;
|
||||
ident_t ident;
|
||||
|
|
|
|||
44
binary.cc
44
binary.cc
|
|
@ -14,8 +14,6 @@
|
|||
|
||||
namespace ledger {
|
||||
|
||||
static char buf[4096];
|
||||
|
||||
unsigned long binary_magic_number = 0xFFEED765;
|
||||
static unsigned long format_version = 0x0002000a;
|
||||
|
||||
|
|
@ -53,10 +51,22 @@ inline void read_binary_string(std::istream& in, std::string& str)
|
|||
|
||||
unsigned char len;
|
||||
read_binary_number(in, len);
|
||||
if (len) {
|
||||
if (len == 0xff) {
|
||||
unsigned short slen;
|
||||
read_binary_number(in, slen);
|
||||
char * buf = new char[slen + 1];
|
||||
in.read(buf, slen);
|
||||
buf[slen] = '\0';
|
||||
str = buf;
|
||||
delete[] buf;
|
||||
}
|
||||
else if (len) {
|
||||
char buf[256];
|
||||
in.read(buf, len);
|
||||
buf[len] = '\0';
|
||||
str = buf;
|
||||
} else {
|
||||
str = "";
|
||||
}
|
||||
|
||||
read_binary_guard(in, 0x3002);
|
||||
|
|
@ -64,20 +74,9 @@ inline void read_binary_string(std::istream& in, std::string& str)
|
|||
|
||||
inline std::string read_binary_string(std::istream& in)
|
||||
{
|
||||
read_binary_guard(in, 0x3001);
|
||||
|
||||
unsigned char len;
|
||||
read_binary_number(in, len);
|
||||
if (len) {
|
||||
in.read(buf, len);
|
||||
buf[len] = '\0';
|
||||
read_binary_guard(in, 0x3002);
|
||||
return buf;
|
||||
}
|
||||
|
||||
read_binary_guard(in, 0x3002);
|
||||
|
||||
return "";
|
||||
std::string temp;
|
||||
read_binary_string(in, temp);
|
||||
return temp;
|
||||
}
|
||||
|
||||
void read_binary_amount(std::istream& in, amount_t& amt)
|
||||
|
|
@ -271,8 +270,15 @@ inline void write_binary_string(std::ostream& out, const std::string& str)
|
|||
{
|
||||
write_binary_guard(out, 0x3001);
|
||||
|
||||
unsigned char len = str.length();
|
||||
write_binary_number(out, len);
|
||||
unsigned long len = str.length();
|
||||
if (len > 255) {
|
||||
assert(len < 65536);
|
||||
write_binary_number<unsigned char>(out, 0xff);
|
||||
write_binary_number<unsigned short>(out, len);
|
||||
} else {
|
||||
write_binary_number<unsigned char>(out, len);
|
||||
}
|
||||
|
||||
if (len)
|
||||
out.write(str.c_str(), len);
|
||||
|
||||
|
|
|
|||
27
ledger.h
27
ledger.h
|
|
@ -27,14 +27,16 @@
|
|||
|
||||
namespace ledger {
|
||||
|
||||
#define TRANSACTION_NORMAL 0x00
|
||||
#define TRANSACTION_VIRTUAL 0x01
|
||||
#define TRANSACTION_BALANCE 0x02
|
||||
#define TRANSACTION_AUTO 0x04
|
||||
// These flags persist with the object
|
||||
#define TRANSACTION_NORMAL 0x0000
|
||||
#define TRANSACTION_VIRTUAL 0x0001
|
||||
#define TRANSACTION_BALANCE 0x0002
|
||||
#define TRANSACTION_AUTO 0x0004
|
||||
|
||||
#define TRANSACTION_HANDLED 0x10
|
||||
#define TRANSACTION_DISPLAYED 0x20
|
||||
#define TRANSACTION_NO_TOTAL 0x40
|
||||
// These flags are only used during formatting, and are not saved
|
||||
#define TRANSACTION_HANDLED 0x0001
|
||||
#define TRANSACTION_DISPLAYED 0x0002
|
||||
#define TRANSACTION_NO_TOTAL 0x0004
|
||||
|
||||
class entry_t;
|
||||
class account_t;
|
||||
|
|
@ -46,12 +48,12 @@ class transaction_t
|
|||
account_t * account;
|
||||
amount_t amount;
|
||||
amount_t cost;
|
||||
unsigned int flags;
|
||||
unsigned short flags;
|
||||
std::string note;
|
||||
|
||||
mutable balance_pair_t total;
|
||||
mutable unsigned int index;
|
||||
mutable unsigned int dflags;
|
||||
mutable unsigned short dflags;
|
||||
|
||||
transaction_t(entry_t * _entry, account_t * _account)
|
||||
: entry(_entry), account(_account), flags(TRANSACTION_NORMAL),
|
||||
|
|
@ -110,12 +112,12 @@ typedef std::pair<const std::string, account_t *> accounts_pair;
|
|||
class account_t
|
||||
{
|
||||
public:
|
||||
typedef unsigned short ident_t;
|
||||
typedef unsigned long ident_t;
|
||||
|
||||
account_t * parent;
|
||||
std::string name;
|
||||
std::string note;
|
||||
unsigned char depth;
|
||||
unsigned short depth;
|
||||
accounts_map accounts;
|
||||
transactions_list transactions;
|
||||
|
||||
|
|
@ -176,8 +178,9 @@ class journal_t
|
|||
public:
|
||||
account_t * master;
|
||||
entries_list entries;
|
||||
strings_list sources;
|
||||
|
||||
mutable accounts_map accounts_cache;
|
||||
std::list<std::string> sources;
|
||||
|
||||
journal_t() {
|
||||
master = new account_t(NULL, "");
|
||||
|
|
|
|||
11
main.cc
11
main.cc
|
|
@ -50,7 +50,7 @@ int main(int argc, char * argv[], char * envp[])
|
|||
|
||||
TIMER_STOP(process_args);
|
||||
|
||||
const bool use_cache = config->files.empty();
|
||||
bool use_cache = config->files.empty();
|
||||
|
||||
// Process options from the environment
|
||||
|
||||
|
|
@ -91,6 +91,7 @@ int main(int argc, char * argv[], char * envp[])
|
|||
if (entry_count == 0 || exceptions.size() > 0) {
|
||||
journal.reset(new journal_t);
|
||||
entry_count = 0;
|
||||
cache_dirty = true;
|
||||
} else {
|
||||
cache_dirty = false;
|
||||
}
|
||||
|
|
@ -100,7 +101,13 @@ int main(int argc, char * argv[], char * envp[])
|
|||
for (strings_list::iterator i = config->files.begin();
|
||||
i != config->files.end();
|
||||
i++)
|
||||
if (*i == "-") {
|
||||
use_cache = false;
|
||||
entry_count += parse_textual_journal(std::cin, journal.get(),
|
||||
journal->master);
|
||||
} else {
|
||||
entry_count += parse_journal_file(*i, journal.get());
|
||||
}
|
||||
|
||||
if (! config->price_db.empty())
|
||||
if (parse_journal_file(config->price_db, journal.get()))
|
||||
|
|
@ -452,8 +459,6 @@ int main(int argc, char * argv[], char * envp[])
|
|||
// feeding each transaction that matches `predicate' to the chain.
|
||||
walk_entries(journal->entries, *formatter.get());
|
||||
|
||||
formatter->flush();
|
||||
|
||||
#ifdef DEBUG_ENABLED
|
||||
// The transaction display flags (dflags) are not recorded in the
|
||||
// binary cache, and only need to be cleared if the transactions
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue