<commit_before>#ifndef CYCLUS_SRC_QUERY_BACKEND_H_
#define CYCLUS_SRC_QUERY_BACKEND_H_

#include <climits>
#include <list>
#include <map>
#include <set>

#include <boost/uuid/sha1.hpp>

#include "blob.h"
#include "rec_backend.h"
#include "any.hpp"

#define CYCLUS_UUID_SIZE 16
#define CYCLUS_SHA1_SIZE 20
#define CYCLUS_SHA1_NINT 5

namespace cyclus {

/// This is the master list of all supported database types.  All types must
/// have a constant length unless they begin with the prefix VL_, which stands
/// for "variable length" or are implicitly variable length, such as blob.
/// Changing the order here may invalidate previously created databases.
/// Thus only append to this enum if it is post-1.0.
enum DbTypes {
  // primitive types
  BOOL = 0,  // ["bool", 0, ["HDF5", "SQLite"], "BOOL", false]
  INT,  // ["int",  0,  ["HDF5", "SQLite"],  "INT",  false]
  FLOAT,  // ["float", 0, ["HDF5", "SQLite"], "FLOAT", false]
  DOUBLE,  // ["double", 0, ["HDF5", "SQLite"], "DOUBLE", false]
  STRING,  // ["std::string", 1, ["HDF5", "SQLite"], "STRING", false]
  VL_STRING,  // ["std::string", 1, ["HDF5", "SQLite"], "VL_STRING", true]
  BLOB,  // ["cyclus::Blob", 0, ["HDF5", "SQLite"], "BLOB", true]
  UUID,  // ["boost::uuids::uuid", 0, ["HDF5", "SQLite"], "UUID", false]
  // vector types
  VECTOR_BOOL,  // ["std::vector<bool>", 1, [], ["VECTOR", "BOOL"], false]
  VL_VECTOR_BOOL,  // ["std::vector<bool>", 1, [], ["VL_VECTOR", "BOOL"], true]
  VECTOR_INT,  // ["std::vector<int>", 1, ["HDF5", "SQLite"], ["VECTOR", "INT"], false]
  VL_VECTOR_INT,  // ["std::vector<int>", 1, ["HDF5", "SQLite"], ["VL_VECTOR", "INT"], true]
  VECTOR_FLOAT,  // ["std::vector<float>", 1, ["HDF5"], ["VECTOR", "FLOAT"], false]
  VL_VECTOR_FLOAT,  // ["std::vector<float>", 1, ["HDF5"], ["VECTOR", "BOOL"], true]
  VECTOR_DOUBLE,  // ["std::vector<double>", 1, ["HDF5", "SQLite"], ["VECTOR", "DOUBLE"], false]
  VL_VECTOR_DOUBLE,  // ["std::vector<double>", 1, ["HDF5", "SQLite"], ["VL_VECTOR", "DOUBLE"], true]
  VECTOR_STRING,  // ["std::vector<std::string>", 2, ["HDF5", "SQLite"], ["VECTOR", "STRING"], false]
  VL_VECTOR_STRING,  // ["std::vector<std::string>", 2, ["HDF5", "SQLite"], ["VL_VECTOR", "STRING"], true]
  VECTOR_VL_STRING,  // ["std::vector<std::string>", 2, ["HDF5", "SQLite"], ["VECTOR", "VL_STRING"], false]
  VL_VECTOR_VL_STRING,  // ["std::vector<std::string>", 2, ["HDF5", "SQLite"], ["VL_VECTOR", "VL_STRING"], true]
  VECTOR_BLOB,  // ["std::vector<cyclus::Blob>", 1, [], ["VECTOR", "BLOB"], false]
  VL_VECTOR_BLOB,  // ["std::vector<cyclus:Blob>", 1, [], ["VL_VECTOR", "BLOB"], true]
  VECTOR_UUID,  // ["std::vector<boost::uuids::uuid>", 1, [], ["VECTOR", "UUID"], false]
  VL_VECTOR_UUID,  // ["std::vector<boost::uuids::uuid>", 1, [], ["VL_VECTOR", "UUID"], true]
  // set types
  SET_BOOL,  // ["std::set<bool>", 1, [], ["SET", "BOOL"], false]
  VL_SET_BOOL,  // ["std::set<bool>", 1, [], ["VL_SET", "BOOL"], true]
  SET_INT,  // ["std::set<int>", 1, ["HDF5", "SQLite"], ["SET", "INT"], false]
  VL_SET_INT,  // ["std::set<int>", 1, ["HDF5", "SQLite"], ["VL_SET", "INT"], true]
  SET_FLOAT,  // ["std::set<float>", 1, [], ["SET", "FLOAT"], false]
  VL_SET_FLOAT,  // ["std::set<float>", 1, [], ["VL_SET", "FLOAT"], true]
  SET_DOUBLE,  // ["std::set<double>", 1, [], ["SET", "DOUBLE"], false]
  VL_SET_DOUBLE,  // ["std::set<double>", 1, [], ["VL_SET", "DOUBLE"], true]
  SET_STRING,  // ["std::set<std::string>", 2, ["HDF5", "SQLite"], ["SET", "STRING"], false]
  VL_SET_STRING,  // ["std::set<std::string>", 2, ["HDF5", "SQLite"], ["VL_SET", "STRING"], true]
  SET_VL_STRING,  // ["std::set<std::string>", 2, ["HDF5", "SQLite"], ["SET", "VL_STRING"], false]
  VL_SET_VL_STRING,  // ["std::set<std::string>", 2, ["HDF5", "SQLite"], ["VL_SET", "VL_STRING"], true]
  SET_BLOB,  // ["std::set<cyclus::Blob>", 1, [], ["SET", "BLOB"], false]
  VL_SET_BLOB,  // ["std::set<cyclus::Blob>", 1, [], ["VL_SET", "BLOB"], true]
  SET_UUID,  // ["std::set<boost::uuids::uuid>", 1, [], ["SET", "UUID"], false]
  VL_SET_UUID,  // ["std::set<boost::uuids::uuid>", 1, [], ["VL_SET", "UUID"], true]
  // list types
  LIST_BOOL,  // ["std::list<bool>", 1, [], ["LIST", "BOOL"], false]
  VL_LIST_BOOL,  // ["std::list<bool>", 1, [], ["VL_LIST", "BOOL"], true]
  LIST_INT,  // ["std::list<int>", 1, ["HDF5", "SQLite"], ["LIST", "INT"], false]
  VL_LIST_INT,  // ["std::list<int>", 1, ["HDF5", "SQLite"], ["VL_LIST", "INT"], true]
  LIST_FLOAT,  // ["std::list<float>", 1, [], ["LIST", "FLOAT"], false]
  VL_LIST_FLOAT,  // ["std::list<float>", 1, [], ["VL_LIST", "FLOAT"], true]
  LIST_DOUBLE,  // ["std::list<double>", 1, [], ["LIST", "DOUBLE"], false]
  VL_LIST_DOUBLE,  // ["std::list<double>", 1, [], ["VL_LIST", "DOUBLE"], true]
  LIST_STRING,  // ["std::list<std::string>", 2, ["HDF5", "SQLite"], ["LIST", "STRING"], false]
  VL_LIST_STRING,  // ["std::list<std::string>", 2, ["HDF5", "SQLite"], ["VL_LIST", "STRING"], true]
  LIST_VL_STRING,  // ["std::list<std::string>", 2, ["HDF5", "SQLite"], ["LIST", "VL_STRING"], false]
  VL_LIST_VL_STRING,  // ["std::list<std::string>", 2, ["HDF5", "SQLite"], ["VL_LIST", "VL_STRING"], true] 
  LIST_BLOB,  // ["std::list<cyclus::Blob>", 1, [], ["LIST", "BLOB"], false]
  VL_LIST_BLOB,  // ["std::list<cyclus::Blob>", 1, [], ["VL_LIST", "BLOB"], true]
  LIST_UUID,  // ["std::list<boost::uuids::uuid>", 1, [], ["LIST", "UUID"], false]
  VL_LIST_UUID,  // ["std::list<boost::uuids::uuid>", 1, [], ["VL_LIST", "UUID"], true]
  // pairs - not variable length
  PAIR_INT_BOOL,  // ["std::pair<int, bool>", 0, [], ["PAIR", "INT", "BOOL"], false] 
  PAIR_INT_INT,  // ["std::pair<int, int>", 0, ["HDF5"], ["PAIR", "INT", "INT"], false] 
  PAIR_INT_FLOAT,  // ["std::pair<int, float>", 0, [], ["PAIR", "INT", "FLOAT"], false]
  PAIR_INT_DOUBLE,  // ["std::pair<int, double>", 0, [], ["PAIR", "INT", "DOUBLE"], false]
  PAIR_INT_STRING,  // ["std::pair<int, std::string>", 1, ["HDF5"], ["PAIR", "INT", "STRING"], false]
  PAIR_INT_VL_STRING,  // ["std::pair<int, std::string>", 1, ["HDF5"], ["PAIR", "INT", "VL_STRING"], false]
  PAIR_INT_BLOB,  // ["std::pair<int, cyclus::Blob>", 0, [], ["PAIR", "INT", "BLOB"], false]
  PAIR_INT_UUID,  // ["std::pair<int, boost::uuids::uuid>", 0, [], ["PAIR", "INT", "UUID"], false]
  PAIR_STRING_BOOL,  // ["std::pair<std::string, bool>", 1, [], ["PAIR", "STRING", "BOOL"], false]
  PAIR_STRING_INT,  // ["std::pair<std::string, int>", 1, [], ["PAIR", "STRING", "INT"], false]
  PAIR_STRING_FLOAT,  // ["std::pair<std::string, float>", 1, [], ["PAIR", "STRING", "FLOAT"], false]
  PAIR_STRING_DOUBLE,  // ["std::pair<std::string, double>", 1, [], ["PAIR", "STRING", "DOUBLE"], false] 
  PAIR_STRING_STRING,  // ["std::pair<std::string, std::string>", 2, [], ["PAIR", "STRING", "STRING"], false]
  PAIR_STRING_VL_STRING,  // ["std::pair<std::string, std::string>", 2, [], ["PAIR", "STRING", "VL_STRING"], false]
  PAIR_STRING_BLOB,  // ["std::pair<std::string, cyclus::Blob>", 1, [], ["PAIR", "STRING", "BLOB"], false]
  PAIR_STRING_UUID,  // ["std::pair<std::string, boost::uuids::uuid>", 1, [], ["PAIR", "STRING", "UUID"], false]
  PAIR_VL_STRING_BOOL,  // ["std::pair<std::string, bool>", 1, [], ["PAIR", "VL_STRING", "BOOL"], false]
  PAIR_VL_STRING_INT,  // ["std::pair<std::string, int>", 1, [], ["PAIR", "VL_STRING", "INT"], false]
  PAIR_VL_STRING_FLOAT,  // ["std::pair<std::string, float>", 1, [], ["PAIR", "VL_STRING", "FLOAT"], false]
  PAIR_VL_STRING_DOUBLE,  // ["std::pair<std::string, double>", 1, [], ["PAIR", "VL_STRING", "DOUBLE"], false]
  PAIR_VL_STRING_STRING,  // ["std::pair<std::string, std::string>", 2, [], ["PAIR", "VL_STRING", "STRING"], false]
  PAIR_VL_STRING_VL_STRING,  // ["std::pair<std::string, std::string>", 2, [], ["PAIR", "VL_STRING", "VL_STRING"], false]
  PAIR_VL_STRING_BLOB,  // ["std::pair<std::string, cyclus::Blob>", 1, [], ["PAIR", "VL_STRING", "BLOB"], false]
  PAIR_VL_STRING_UUID,  // ["std::pair<std::string, boost::uuids::uuid>", 1, [], ["PAIR", "VL_STRING", "UUID"], false]
  // maps with int keys
  MAP_INT_BOOL,  // ["std::map<int, bool>", 1, [], ["MAP", "INT", "BOOL"], false]
  VL_MAP_INT_BOOL,  // ["std::map<int, bool>", 1, [], ["VL_MAP", "INT", "BOOL"], true]
  MAP_INT_INT,  // ["std::map<int, int>", 1, ["HDF5", "SQLite"], ["MAP", "INT", "INT"], false]
  VL_MAP_INT_INT,  // ["std::map<int, int>", 1, ["HDF5", "SQLite"], ["VL_MAP", "INT", "INT"], true]
  MAP_INT_FLOAT,  // ["std::map<int, float>", 1, [], ["MAP", "INT", "FLOAT"], false]
  VL_MAP_INT_FLOAT,  // ["std::map<int, float>", 1, [], ["VL_MAP", "INT", "FLOAT"], true]
  MAP_INT_DOUBLE,  // ["std::map<int, double>", 1, ["HDF5", "SQLite"], ["MAP", "INT", "DOUBLE"], false]
  VL_MAP_INT_DOUBLE,  // ["std::map<int, double>", 1, ["HDF5", "SQLite"], ["VL_MAP", "INT", "DOUBLE"], true]
  MAP_INT_STRING,  // ["std::map<int, std::string>", 2, ["HDF5", "SQLite"], ["MAP", "INT", "STRING"], false]
  VL_MAP_INT_STRING,  // ["std::map<int, std::string>", 2, ["HDF5", "SQLite"], ["VL_MAP", "INT", "STRING"], true]
  MAP_INT_VL_STRING,  // ["std::map<int, std::string>", 2, ["HDF5", "SQLite"], ["MAP", "INT", "VL_STRING"], false]
  VL_MAP_INT_VL_STRING,  // ["std::map<int, std::string>", 2, ["HDF5", "SQLite"], ["VL_MAP", "INT", "VL_STRING"], true]
  MAP_INT_BLOB,  // ["std::map<int, cyclus::Blob>", 1, [], ["MAP", "INT", "BLOB"], false]
  VL_MAP_INT_BLOB,  // ["std::map<int, cyclus::Blob>", 1, [], ["VL_MAP", "INT", "BLOB"], true]
  MAP_INT_UUID,  // ["std::map<int, boost::uuids::uuid>", 1, [], ["MAP", "INT", "UUID"], false]
  VL_MAP_INT_UUID,  // ["std::map<int, boost::uuids::uuid>", 1, [], ["VL_MAP", "INT", "UUID"], true]
  // maps with fixed-length string keys
  MAP_STRING_BOOL,  // ["std::map<std::string, bool>", 2, [], ["MAP", "STRING", "BOOL"], false]
  VL_MAP_STRING_BOOL,  // ["std::map<std::string, bool>", 2, [], ["VL_MAP", "STRING", "BOOL"], true]
  MAP_STRING_INT,  // ["std::map<std::string, int>", 2, ["HDF5", "SQLite"], ["MAP", "STRING", "INT"], false]
  VL_MAP_STRING_INT,  // ["std::map<std::string, int>", 2, ["HDF5", "SQLite"], ["VL_MAP", "STRING", "INT"], true]
  MAP_STRING_FLOAT,  // ["std::map<std::string, float>", 2, [], ["MAP", "STRING", "FLOAT"], false]
  VL_MAP_STRING_FLOAT,  // ["std::map<std::string, float>", 2, [], ["VL_MAP", "STRING", "FLOAT"], true]
  MAP_STRING_DOUBLE,  // ["std::map<std::string, double>", 2, ["HDF5", "SQLite"], ["MAP", "STRING", "DOUBLE"], false]
  VL_MAP_STRING_DOUBLE,  // ["std::map<std::string, double>", 2, ["HDF5", "SQLite"], ["VL_MAP", "STRING", "DOUBLE"], true]
  MAP_STRING_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["MAP", "STRING", "STRING"], false]
  VL_MAP_STRING_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["VL_MAP", "STRING", "STRING"], true]
  MAP_STRING_VL_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["MAP", "STRING", "VL_STRING"], false]
  VL_MAP_STRING_VL_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["VL_MAP", "STRING", "VL_STRING"], true]
  MAP_STRING_BLOB,  // ["std::map<std::string, cyclus::Blob>", 2, [], ["MAP", "STRING", "BLOB"], false]
  VL_MAP_STRING_BLOB,  // ["std::map<std::string, cyclus::Blob>", 2, [], ["VL_MAP", "STRING", "BLOB"], true]
  MAP_STRING_UUID,  // ["std::map<std::string, boost::uuids::uuid>", 2, [], ["MAP", "STRING", "UUID"], false]
  VL_MAP_STRING_UUID,  // ["std::map<std::string, boost::uuids::uuid>", 2, [], ["VL_MAP", "STRING", "UUID"], true]
  // maps with variable length string keys
  MAP_VL_STRING_BOOL,  // ["std::map<std::string, bool>", 2, [], ["MAP", "VL_STRING", "BOOL"], false]
  VL_MAP_VL_STRING_BOOL,  // ["std::map<std::string, bool>", 2, [], ["VL_MAP", "VL_STRING", "BOOL"], true]
  MAP_VL_STRING_INT,  // ["std::map<std::string, int>", 2, ["HDF5", "SQLite"], ["MAP", "VL_STRING", "INT"], false]
  VL_MAP_VL_STRING_INT,  // ["std::map<std::string, int>", 2, ["HDF5", "SQLite"], ["VL_MAP", "VL_STRING", "INT"], true]
  MAP_VL_STRING_FLOAT,  // ["std::map<std::string, float>", 2, [], ["MAP", "VL_STRING", "FLOAT"], false]
  VL_MAP_VL_STRING_FLOAT,  // ["std::map<std::string, float>", 2, [], ["VL_MAP", "VL_STRING", "FLOAT"], true]
  MAP_VL_STRING_DOUBLE,  // ["std::map<std::string, double>", 2, ["HDF5", "SQLite"], ["MAP", "VL_STRING", "DOUBLE"], false]
  VL_MAP_VL_STRING_DOUBLE,  // ["std::map<std::string, double>", 2, ["HDF5", "SQLite"], ["VL_MAP", "VL_STRING", "DOUBLE"], true]
  MAP_VL_STRING_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["MAP", "VL_STRING", "STRING"], false]
  VL_MAP_VL_STRING_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["VL_MAP", "VL_STRING", "STRING"], true]
  MAP_VL_STRING_VL_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["MAP", "VL_STRING", "VL_STRING"], false]
  VL_MAP_VL_STRING_VL_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["VL_MAP", "VL_STRING", "VL_STRING"], true]
  MAP_VL_STRING_BLOB,  // ["std::map<std::string, cyclus::Blob>", 2, [], ["MAP", "VL_STRING", "BLOB"], false]
  VL_MAP_VL_STRING_BLOB,  // ["std::map<std::string, cyclus::Blob>", 2, [], ["VL_MAP", "VL_STRING", "BLOB"], true]
  MAP_VL_STRING_UUID,  // ["std::map<std::string, boost::uuids::uuid>", 2, [], ["MAP", "VL_STRING", "UUID"], false]
  VL_MAP_VL_STRING_UUID,  // ["std::map<std::string, boost::uuids::uuid>", 2, [], ["VL_MAP", "VL_STRING", "UUID"], true]
  // maps with pair<int,  string> keys and double values
  MAP_PAIR_INT_STRING_DOUBLE,  // ["std::map<std::pair<int, std::string>, double>", 3, ["HDF5"], ["MAP", ["PAIR", "INT", "STRING"], "DOUBLE"], false]
  VL_MAP_PAIR_INT_STRING_DOUBLE,  // ["std::map<std::pair<int, std::string>, double>", 3, ["HDF5"], ["VL_MAP", ["PAIR", "INT", "STRING"], "DOUBLE"], true]
  MAP_PAIR_INT_VL_STRING_DOUBLE,  // ["std::map<std::pair<int, std::string>, double>", 3, ["HDF5"], ["MAP", ["PAIR", "INT", "VL_STRING"], "DOUBLE"], false]
  VL_MAP_PAIR_INT_VL_STRING_DOUBLE,  // ["std::map<std::pair<int, std::string>, double>", 3, ["HDF5"], ["VL_MAP", ["PAIR", "INT", "VL_STRING"], "DOUBLE"], true]

  // append new types only:

  // map<string,  vector<double> >
  MAP_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["MAP", "STRING", ["VECTOR", "DOUBLE"]], false]
  MAP_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", "DOUBLE"]], false]
  VL_MAP_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", "DOUBLE"]], true]
  MAP_VL_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", "DOUBLE"]], false]
  MAP_VL_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", "DOUBLE"]], false]
  VL_MAP_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", "DOUBLE"]], true]
  VL_MAP_VL_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", "DOUBLE"]], true]
  VL_MAP_VL_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", "DOUBLE"]], true]

  // map<string,  map<int,  double> >
  MAP_STRING_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["MAP", "STRING", ["MAP", "INT", "DOUBLE"]], false]
  MAP_STRING_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["MAP", "STRING", ["VL_MAP", "INT", "DOUBLE"]], false]
  VL_MAP_STRING_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["MAP", "INT", "DOUBLE"]], true]
  MAP_VL_STRING_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["MAP", "INT", "DOUBLE"]], false]
  MAP_VL_STRING_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VL_MAP", "INT", "DOUBLE"]], false]
  VL_MAP_STRING_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VL_MAP", "INT", "DOUBLE"]], true]
  VL_MAP_VL_STRING_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["MAP", "INT", "DOUBLE"]], true]
  VL_MAP_VL_STRING_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_MAP", "INT", "DOUBLE"]], true]

  // map<string,  pair<double,  map<int,  double> > >
  MAP_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["MAP", "STRING", ["PAIR", "DOUBLE", ["MAP", "INT", "DOUBLE"]]], false]
  VL_MAP_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "DOUBLE", ["MAP", "INT", "DOUBLE"]]], true]
  MAP_VL_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "DOUBLE", ["MAP", "INT", "DOUBLE"]]], false]
  MAP_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["MAP", "STRING", ["PAIR", "DOUBLE", ["VL_MAP", "INT", "DOUBLE"]]], false]
  VL_MAP_VL_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "DOUBLE", ["MAP", "INT", "DOUBLE"]]], true]
  VL_MAP_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "DOUBLE", ["VL_MAP", "INT", "DOUBLE"]]], true]
  MAP_VL_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "DOUBLE", ["VL_MAP", "INT", "DOUBLE"]]], false]
  VL_MAP_VL_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "DOUBLE", ["VL_MAP", "INT", "DOUBLE"]]], true]

  // map<map< string,  double > >
  MAP_INT_MAP_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["MAP", "INT", ["MAP", "STRING", "DOUBLE"]], false] 
  MAP_INT_MAP_VL_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["MAP", "INT", ["MAP", "VL_STRING", "DOUBLE"]], false] 
  VL_MAP_INT_MAP_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["VL_MAP", "INT", ["MAP", "STRING", "DOUBLE"]], true]
  VL_MAP_INT_MAP_VL_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["VL_MAP", "INT", ["MAP", "VL_STRING", "DOUBLE"]], true] 
  MAP_INT_VL_MAP_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["MAP", "INT", ["VL_MAP", "STRING", "DOUBLE"]], false] 
  MAP_INT_VL_MAP_VL_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["MAP", "INT", ["VL_MAP", "VL_STRING", "DOUBLE"]], false] 
  VL_MAP_INT_VL_MAP_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["VL_MAP", "INT", ["VL_MAP", "STRING", "DOUBLE"]], true] 
  VL_MAP_INT_VL_MAP_VL_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["VL_MAP", "INT", ["VL_MAP", "VL_STRING", "DOUBLE"]], true] 

  // map< string,  vector< pair<int,  pair<string string> > > >
  MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], false]
  MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], false]
  MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], false]
  MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], false]
  MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], false]
  MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], false]
  MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], false]
  MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], false]
  MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], false]
  MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], false]
  MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], false]
  MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], false]
  MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], false]
  MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], false]
  MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], false]
  MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], false]
  VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], true]
  VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], true]
  VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], true]
  VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], true]
  VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], true]
  VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], true]
  VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], true]
  VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], true]
  VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], true]
  VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], true]
  VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], true]
  VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], true]
  VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], true]
  VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], true]
  VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], true]
  VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], true]

  // list< pair<int,  int>
  LIST_PAIR_INT_INT,  // ["std::list<std::pair<int, int>>", 2, ["SQLite"], ["LIST", ["PAIR", "INT", "INT"]], false]
  VL_LIST_PAIR_INT_INT,  // ["std::list<std::pair<int, int>>", 2, ["SQLite"], ["VL_LIST", ["PAIR", "INT", "INT"]], true]

  // map< string,  pair< string,  vector<double> > > > 
  MAP_STRING_PAIR_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "STRING", ["PAIR", "STRING", ["VECTOR", "DOUBLE"]]], false]
  MAP_STRING_PAIR_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "STRING", ["PAIR", "STRING", ["VL_VECTOR", "DOUBLE"]]], false]
  MAP_STRING_PAIR_VL_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "STRING", ["PAIR", "VL_STRING", ["VECTOR", "DOUBLE"]]], false]
  MAP_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "STRING", ["PAIR", "VL_STRING", ["VL_VECTOR", "DOUBLE"]]], false]
  MAP_VL_STRING_PAIR_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "STRING", ["VECTOR", "DOUBLE"]]], false]
  MAP_VL_STRING_PAIR_VL_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "VL_STRING", ["VECTOR", "DOUBLE"]]], false]
  MAP_VL_STRING_PAIR_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "STRING", ["VL_VECTOR", "DOUBLE"]]], false]
  MAP_VL_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "VL_STRING", ["VL_VECTOR", "DOUBLE"]]], false]
  VL_MAP_STRING_PAIR_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "STRING", ["VECTOR", "DOUBLE"]]], true]
  VL_MAP_VL_STRING_PAIR_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "STRING", ["VECTOR", "DOUBLE"]]], true]
  VL_MAP_STRING_PAIR_VL_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "VL_STRING", ["VECTOR", "DOUBLE"]]], true]
  VL_MAP_STRING_PAIR_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "STRING", ["VL_VECTOR", "DOUBLE"]]], true]
  VL_MAP_VL_STRING_PAIR_VL_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "VL_STRING", ["VECTOR", "DOUBLE"]]], true]
  VL_MAP_VL_STRING_PAIR_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "STRING", ["VL_VECTOR", "DOUBLE"]]], true]
  VL_MAP_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "VL_STRING", ["VL_VECTOR", "DOUBLE"]]], true]
  VL_MAP_VL_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "VL_STRING", ["VL_VECTOR", "DOUBLE"]]], true]

  // map<string,  map<string,  int> >
  MAP_STRING_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "STRING", ["MAP", "STRING", "INT"]], false]
  MAP_STRING_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "STRING", ["MAP", "VL_STRING", "INT"]], false]
  MAP_STRING_VL_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "STRING", ["VL_MAP", "STRING", "INT"]], false]
  MAP_STRING_VL_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "STRING", ["VL_MAP", "VL_STRING", "INT"]], false]
  MAP_VL_STRING_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["MAP", "STRING", "INT"]], false]
  MAP_VL_STRING_VL_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VL_MAP", "STRING", "INT"]], false]
  MAP_VL_STRING_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["MAP", "VL_STRING", "INT"]], false]
  MAP_VL_STRING_VL_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VL_MAP", "VL_STRING", "INT"]], false]
  VL_MAP_STRING_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["MAP", "STRING", "INT"]], false]
  VL_MAP_VL_STRING_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["MAP", "STRING", "INT"]], false]
  VL_MAP_STRING_VL_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VL_MAP", "STRING", "INT"]], false]
  VL_MAP_STRING_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["MAP", "VL_STRING", "INT"]], false]
  VL_MAP_STRING_VL_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VL_MAP", "VL_STRING", "INT"]], false]
  VL_MAP_VL_STRING_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["MAP", "VL_STRING", "INT"]], false]
  VL_MAP_VL_STRING_VL_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_MAP", "STRING", "INT"]], false]
  VL_MAP_VL_STRING_VL_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_MAP", "VL_STRING", "INT"]], false]

  // vector<pair<pair<double, double>, vector<pair<string, double > > > >
  VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VECTOR_PAIR_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::vector<std::pair<std::string, double> > > > ", 6, ["SQLite"], ["VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VECTOR", ["PAIR", "STRING", "DOUBLE"]]], false]
  VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VECTOR_PAIR_VL_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::vector<std::pair<std::string, double> > > > ", 6, ["SQLite"], ["VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VECTOR", ["PAIR", "VL_STRING", "DOUBLE"]]], false]
  VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_VECTOR_PAIR_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::vector<std::pair<std::string, double> > > > ", 6, ["SQLite"], ["VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_VECTOR", ["PAIR", "STRING", "DOUBLE"]]], false]
  VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_VECTOR_PAIR_VL_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::vector<std::pair<std::string, double> > > > ", 6, ["SQLite"], ["VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_VECTOR", ["PAIR", "VL_STRING", "DOUBLE"]]], false]
  VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VECTOR_PAIR_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::vector<std::pair<std::string, double> > > > ", 6, ["SQLite"], ["VL_VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VECTOR", ["PAIR", "STRING", "DOUBLE"]]], true]
  VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VECTOR_PAIR_VL_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::vector<std::pair<std::string, double> > > > ", 6, ["SQLite"], ["VL_VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VECTOR", ["PAIR", "VL_STRING", "DOUBLE"]]], true]
  VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_VECTOR_PAIR_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::vector<std::pair<std::string, double> > > > ", 6, ["SQLite"], ["VL_VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_VECTOR", ["PAIR", "STRING", "DOUBLE"]]], true]
  VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_VECTOR_PAIR_VL_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::vector<std::pair<std::string, double> > > > ", 6, ["SQLite"], ["VL_VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_VECTOR", ["PAIR", "VL_STRING", "DOUBLE"]]], true]

};

/// Represents operation codes for condition checking.
enum CmpOpCode {<commit_msg>changing a vecto<pair<>> into a map<><commit_after>#ifndef CYCLUS_SRC_QUERY_BACKEND_H_
#define CYCLUS_SRC_QUERY_BACKEND_H_

#include <climits>
#include <list>
#include <map>
#include <set>

#include <boost/uuid/sha1.hpp>

#include "blob.h"
#include "rec_backend.h"
#include "any.hpp"

#define CYCLUS_UUID_SIZE 16
#define CYCLUS_SHA1_SIZE 20
#define CYCLUS_SHA1_NINT 5

namespace cyclus {

/// This is the master list of all supported database types.  All types must
/// have a constant length unless they begin with the prefix VL_, which stands
/// for "variable length" or are implicitly variable length, such as blob.
/// Changing the order here may invalidate previously created databases.
/// Thus only append to this enum if it is post-1.0.
enum DbTypes {
  // primitive types
  BOOL = 0,  // ["bool", 0, ["HDF5", "SQLite"], "BOOL", false]
  INT,  // ["int",  0,  ["HDF5", "SQLite"],  "INT",  false]
  FLOAT,  // ["float", 0, ["HDF5", "SQLite"], "FLOAT", false]
  DOUBLE,  // ["double", 0, ["HDF5", "SQLite"], "DOUBLE", false]
  STRING,  // ["std::string", 1, ["HDF5", "SQLite"], "STRING", false]
  VL_STRING,  // ["std::string", 1, ["HDF5", "SQLite"], "VL_STRING", true]
  BLOB,  // ["cyclus::Blob", 0, ["HDF5", "SQLite"], "BLOB", true]
  UUID,  // ["boost::uuids::uuid", 0, ["HDF5", "SQLite"], "UUID", false]
  // vector types
  VECTOR_BOOL,  // ["std::vector<bool>", 1, [], ["VECTOR", "BOOL"], false]
  VL_VECTOR_BOOL,  // ["std::vector<bool>", 1, [], ["VL_VECTOR", "BOOL"], true]
  VECTOR_INT,  // ["std::vector<int>", 1, ["HDF5", "SQLite"], ["VECTOR", "INT"], false]
  VL_VECTOR_INT,  // ["std::vector<int>", 1, ["HDF5", "SQLite"], ["VL_VECTOR", "INT"], true]
  VECTOR_FLOAT,  // ["std::vector<float>", 1, ["HDF5"], ["VECTOR", "FLOAT"], false]
  VL_VECTOR_FLOAT,  // ["std::vector<float>", 1, ["HDF5"], ["VECTOR", "BOOL"], true]
  VECTOR_DOUBLE,  // ["std::vector<double>", 1, ["HDF5", "SQLite"], ["VECTOR", "DOUBLE"], false]
  VL_VECTOR_DOUBLE,  // ["std::vector<double>", 1, ["HDF5", "SQLite"], ["VL_VECTOR", "DOUBLE"], true]
  VECTOR_STRING,  // ["std::vector<std::string>", 2, ["HDF5", "SQLite"], ["VECTOR", "STRING"], false]
  VL_VECTOR_STRING,  // ["std::vector<std::string>", 2, ["HDF5", "SQLite"], ["VL_VECTOR", "STRING"], true]
  VECTOR_VL_STRING,  // ["std::vector<std::string>", 2, ["HDF5", "SQLite"], ["VECTOR", "VL_STRING"], false]
  VL_VECTOR_VL_STRING,  // ["std::vector<std::string>", 2, ["HDF5", "SQLite"], ["VL_VECTOR", "VL_STRING"], true]
  VECTOR_BLOB,  // ["std::vector<cyclus::Blob>", 1, [], ["VECTOR", "BLOB"], false]
  VL_VECTOR_BLOB,  // ["std::vector<cyclus:Blob>", 1, [], ["VL_VECTOR", "BLOB"], true]
  VECTOR_UUID,  // ["std::vector<boost::uuids::uuid>", 1, [], ["VECTOR", "UUID"], false]
  VL_VECTOR_UUID,  // ["std::vector<boost::uuids::uuid>", 1, [], ["VL_VECTOR", "UUID"], true]
  // set types
  SET_BOOL,  // ["std::set<bool>", 1, [], ["SET", "BOOL"], false]
  VL_SET_BOOL,  // ["std::set<bool>", 1, [], ["VL_SET", "BOOL"], true]
  SET_INT,  // ["std::set<int>", 1, ["HDF5", "SQLite"], ["SET", "INT"], false]
  VL_SET_INT,  // ["std::set<int>", 1, ["HDF5", "SQLite"], ["VL_SET", "INT"], true]
  SET_FLOAT,  // ["std::set<float>", 1, [], ["SET", "FLOAT"], false]
  VL_SET_FLOAT,  // ["std::set<float>", 1, [], ["VL_SET", "FLOAT"], true]
  SET_DOUBLE,  // ["std::set<double>", 1, [], ["SET", "DOUBLE"], false]
  VL_SET_DOUBLE,  // ["std::set<double>", 1, [], ["VL_SET", "DOUBLE"], true]
  SET_STRING,  // ["std::set<std::string>", 2, ["HDF5", "SQLite"], ["SET", "STRING"], false]
  VL_SET_STRING,  // ["std::set<std::string>", 2, ["HDF5", "SQLite"], ["VL_SET", "STRING"], true]
  SET_VL_STRING,  // ["std::set<std::string>", 2, ["HDF5", "SQLite"], ["SET", "VL_STRING"], false]
  VL_SET_VL_STRING,  // ["std::set<std::string>", 2, ["HDF5", "SQLite"], ["VL_SET", "VL_STRING"], true]
  SET_BLOB,  // ["std::set<cyclus::Blob>", 1, [], ["SET", "BLOB"], false]
  VL_SET_BLOB,  // ["std::set<cyclus::Blob>", 1, [], ["VL_SET", "BLOB"], true]
  SET_UUID,  // ["std::set<boost::uuids::uuid>", 1, [], ["SET", "UUID"], false]
  VL_SET_UUID,  // ["std::set<boost::uuids::uuid>", 1, [], ["VL_SET", "UUID"], true]
  // list types
  LIST_BOOL,  // ["std::list<bool>", 1, [], ["LIST", "BOOL"], false]
  VL_LIST_BOOL,  // ["std::list<bool>", 1, [], ["VL_LIST", "BOOL"], true]
  LIST_INT,  // ["std::list<int>", 1, ["HDF5", "SQLite"], ["LIST", "INT"], false]
  VL_LIST_INT,  // ["std::list<int>", 1, ["HDF5", "SQLite"], ["VL_LIST", "INT"], true]
  LIST_FLOAT,  // ["std::list<float>", 1, [], ["LIST", "FLOAT"], false]
  VL_LIST_FLOAT,  // ["std::list<float>", 1, [], ["VL_LIST", "FLOAT"], true]
  LIST_DOUBLE,  // ["std::list<double>", 1, [], ["LIST", "DOUBLE"], false]
  VL_LIST_DOUBLE,  // ["std::list<double>", 1, [], ["VL_LIST", "DOUBLE"], true]
  LIST_STRING,  // ["std::list<std::string>", 2, ["HDF5", "SQLite"], ["LIST", "STRING"], false]
  VL_LIST_STRING,  // ["std::list<std::string>", 2, ["HDF5", "SQLite"], ["VL_LIST", "STRING"], true]
  LIST_VL_STRING,  // ["std::list<std::string>", 2, ["HDF5", "SQLite"], ["LIST", "VL_STRING"], false]
  VL_LIST_VL_STRING,  // ["std::list<std::string>", 2, ["HDF5", "SQLite"], ["VL_LIST", "VL_STRING"], true] 
  LIST_BLOB,  // ["std::list<cyclus::Blob>", 1, [], ["LIST", "BLOB"], false]
  VL_LIST_BLOB,  // ["std::list<cyclus::Blob>", 1, [], ["VL_LIST", "BLOB"], true]
  LIST_UUID,  // ["std::list<boost::uuids::uuid>", 1, [], ["LIST", "UUID"], false]
  VL_LIST_UUID,  // ["std::list<boost::uuids::uuid>", 1, [], ["VL_LIST", "UUID"], true]
  // pairs - not variable length
  PAIR_INT_BOOL,  // ["std::pair<int, bool>", 0, [], ["PAIR", "INT", "BOOL"], false] 
  PAIR_INT_INT,  // ["std::pair<int, int>", 0, ["HDF5"], ["PAIR", "INT", "INT"], false] 
  PAIR_INT_FLOAT,  // ["std::pair<int, float>", 0, [], ["PAIR", "INT", "FLOAT"], false]
  PAIR_INT_DOUBLE,  // ["std::pair<int, double>", 0, [], ["PAIR", "INT", "DOUBLE"], false]
  PAIR_INT_STRING,  // ["std::pair<int, std::string>", 1, ["HDF5"], ["PAIR", "INT", "STRING"], false]
  PAIR_INT_VL_STRING,  // ["std::pair<int, std::string>", 1, ["HDF5"], ["PAIR", "INT", "VL_STRING"], false]
  PAIR_INT_BLOB,  // ["std::pair<int, cyclus::Blob>", 0, [], ["PAIR", "INT", "BLOB"], false]
  PAIR_INT_UUID,  // ["std::pair<int, boost::uuids::uuid>", 0, [], ["PAIR", "INT", "UUID"], false]
  PAIR_STRING_BOOL,  // ["std::pair<std::string, bool>", 1, [], ["PAIR", "STRING", "BOOL"], false]
  PAIR_STRING_INT,  // ["std::pair<std::string, int>", 1, [], ["PAIR", "STRING", "INT"], false]
  PAIR_STRING_FLOAT,  // ["std::pair<std::string, float>", 1, [], ["PAIR", "STRING", "FLOAT"], false]
  PAIR_STRING_DOUBLE,  // ["std::pair<std::string, double>", 1, [], ["PAIR", "STRING", "DOUBLE"], false] 
  PAIR_STRING_STRING,  // ["std::pair<std::string, std::string>", 2, [], ["PAIR", "STRING", "STRING"], false]
  PAIR_STRING_VL_STRING,  // ["std::pair<std::string, std::string>", 2, [], ["PAIR", "STRING", "VL_STRING"], false]
  PAIR_STRING_BLOB,  // ["std::pair<std::string, cyclus::Blob>", 1, [], ["PAIR", "STRING", "BLOB"], false]
  PAIR_STRING_UUID,  // ["std::pair<std::string, boost::uuids::uuid>", 1, [], ["PAIR", "STRING", "UUID"], false]
  PAIR_VL_STRING_BOOL,  // ["std::pair<std::string, bool>", 1, [], ["PAIR", "VL_STRING", "BOOL"], false]
  PAIR_VL_STRING_INT,  // ["std::pair<std::string, int>", 1, [], ["PAIR", "VL_STRING", "INT"], false]
  PAIR_VL_STRING_FLOAT,  // ["std::pair<std::string, float>", 1, [], ["PAIR", "VL_STRING", "FLOAT"], false]
  PAIR_VL_STRING_DOUBLE,  // ["std::pair<std::string, double>", 1, [], ["PAIR", "VL_STRING", "DOUBLE"], false]
  PAIR_VL_STRING_STRING,  // ["std::pair<std::string, std::string>", 2, [], ["PAIR", "VL_STRING", "STRING"], false]
  PAIR_VL_STRING_VL_STRING,  // ["std::pair<std::string, std::string>", 2, [], ["PAIR", "VL_STRING", "VL_STRING"], false]
  PAIR_VL_STRING_BLOB,  // ["std::pair<std::string, cyclus::Blob>", 1, [], ["PAIR", "VL_STRING", "BLOB"], false]
  PAIR_VL_STRING_UUID,  // ["std::pair<std::string, boost::uuids::uuid>", 1, [], ["PAIR", "VL_STRING", "UUID"], false]
  // maps with int keys
  MAP_INT_BOOL,  // ["std::map<int, bool>", 1, [], ["MAP", "INT", "BOOL"], false]
  VL_MAP_INT_BOOL,  // ["std::map<int, bool>", 1, [], ["VL_MAP", "INT", "BOOL"], true]
  MAP_INT_INT,  // ["std::map<int, int>", 1, ["HDF5", "SQLite"], ["MAP", "INT", "INT"], false]
  VL_MAP_INT_INT,  // ["std::map<int, int>", 1, ["HDF5", "SQLite"], ["VL_MAP", "INT", "INT"], true]
  MAP_INT_FLOAT,  // ["std::map<int, float>", 1, [], ["MAP", "INT", "FLOAT"], false]
  VL_MAP_INT_FLOAT,  // ["std::map<int, float>", 1, [], ["VL_MAP", "INT", "FLOAT"], true]
  MAP_INT_DOUBLE,  // ["std::map<int, double>", 1, ["HDF5", "SQLite"], ["MAP", "INT", "DOUBLE"], false]
  VL_MAP_INT_DOUBLE,  // ["std::map<int, double>", 1, ["HDF5", "SQLite"], ["VL_MAP", "INT", "DOUBLE"], true]
  MAP_INT_STRING,  // ["std::map<int, std::string>", 2, ["HDF5", "SQLite"], ["MAP", "INT", "STRING"], false]
  VL_MAP_INT_STRING,  // ["std::map<int, std::string>", 2, ["HDF5", "SQLite"], ["VL_MAP", "INT", "STRING"], true]
  MAP_INT_VL_STRING,  // ["std::map<int, std::string>", 2, ["HDF5", "SQLite"], ["MAP", "INT", "VL_STRING"], false]
  VL_MAP_INT_VL_STRING,  // ["std::map<int, std::string>", 2, ["HDF5", "SQLite"], ["VL_MAP", "INT", "VL_STRING"], true]
  MAP_INT_BLOB,  // ["std::map<int, cyclus::Blob>", 1, [], ["MAP", "INT", "BLOB"], false]
  VL_MAP_INT_BLOB,  // ["std::map<int, cyclus::Blob>", 1, [], ["VL_MAP", "INT", "BLOB"], true]
  MAP_INT_UUID,  // ["std::map<int, boost::uuids::uuid>", 1, [], ["MAP", "INT", "UUID"], false]
  VL_MAP_INT_UUID,  // ["std::map<int, boost::uuids::uuid>", 1, [], ["VL_MAP", "INT", "UUID"], true]
  // maps with fixed-length string keys
  MAP_STRING_BOOL,  // ["std::map<std::string, bool>", 2, [], ["MAP", "STRING", "BOOL"], false]
  VL_MAP_STRING_BOOL,  // ["std::map<std::string, bool>", 2, [], ["VL_MAP", "STRING", "BOOL"], true]
  MAP_STRING_INT,  // ["std::map<std::string, int>", 2, ["HDF5", "SQLite"], ["MAP", "STRING", "INT"], false]
  VL_MAP_STRING_INT,  // ["std::map<std::string, int>", 2, ["HDF5", "SQLite"], ["VL_MAP", "STRING", "INT"], true]
  MAP_STRING_FLOAT,  // ["std::map<std::string, float>", 2, [], ["MAP", "STRING", "FLOAT"], false]
  VL_MAP_STRING_FLOAT,  // ["std::map<std::string, float>", 2, [], ["VL_MAP", "STRING", "FLOAT"], true]
  MAP_STRING_DOUBLE,  // ["std::map<std::string, double>", 2, ["HDF5", "SQLite"], ["MAP", "STRING", "DOUBLE"], false]
  VL_MAP_STRING_DOUBLE,  // ["std::map<std::string, double>", 2, ["HDF5", "SQLite"], ["VL_MAP", "STRING", "DOUBLE"], true]
  MAP_STRING_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["MAP", "STRING", "STRING"], false]
  VL_MAP_STRING_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["VL_MAP", "STRING", "STRING"], true]
  MAP_STRING_VL_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["MAP", "STRING", "VL_STRING"], false]
  VL_MAP_STRING_VL_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["VL_MAP", "STRING", "VL_STRING"], true]
  MAP_STRING_BLOB,  // ["std::map<std::string, cyclus::Blob>", 2, [], ["MAP", "STRING", "BLOB"], false]
  VL_MAP_STRING_BLOB,  // ["std::map<std::string, cyclus::Blob>", 2, [], ["VL_MAP", "STRING", "BLOB"], true]
  MAP_STRING_UUID,  // ["std::map<std::string, boost::uuids::uuid>", 2, [], ["MAP", "STRING", "UUID"], false]
  VL_MAP_STRING_UUID,  // ["std::map<std::string, boost::uuids::uuid>", 2, [], ["VL_MAP", "STRING", "UUID"], true]
  // maps with variable length string keys
  MAP_VL_STRING_BOOL,  // ["std::map<std::string, bool>", 2, [], ["MAP", "VL_STRING", "BOOL"], false]
  VL_MAP_VL_STRING_BOOL,  // ["std::map<std::string, bool>", 2, [], ["VL_MAP", "VL_STRING", "BOOL"], true]
  MAP_VL_STRING_INT,  // ["std::map<std::string, int>", 2, ["HDF5", "SQLite"], ["MAP", "VL_STRING", "INT"], false]
  VL_MAP_VL_STRING_INT,  // ["std::map<std::string, int>", 2, ["HDF5", "SQLite"], ["VL_MAP", "VL_STRING", "INT"], true]
  MAP_VL_STRING_FLOAT,  // ["std::map<std::string, float>", 2, [], ["MAP", "VL_STRING", "FLOAT"], false]
  VL_MAP_VL_STRING_FLOAT,  // ["std::map<std::string, float>", 2, [], ["VL_MAP", "VL_STRING", "FLOAT"], true]
  MAP_VL_STRING_DOUBLE,  // ["std::map<std::string, double>", 2, ["HDF5", "SQLite"], ["MAP", "VL_STRING", "DOUBLE"], false]
  VL_MAP_VL_STRING_DOUBLE,  // ["std::map<std::string, double>", 2, ["HDF5", "SQLite"], ["VL_MAP", "VL_STRING", "DOUBLE"], true]
  MAP_VL_STRING_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["MAP", "VL_STRING", "STRING"], false]
  VL_MAP_VL_STRING_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["VL_MAP", "VL_STRING", "STRING"], true]
  MAP_VL_STRING_VL_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["MAP", "VL_STRING", "VL_STRING"], false]
  VL_MAP_VL_STRING_VL_STRING,  // ["std::map<std::string, std::string>", 3, ["HDF5", "SQLite"], ["VL_MAP", "VL_STRING", "VL_STRING"], true]
  MAP_VL_STRING_BLOB,  // ["std::map<std::string, cyclus::Blob>", 2, [], ["MAP", "VL_STRING", "BLOB"], false]
  VL_MAP_VL_STRING_BLOB,  // ["std::map<std::string, cyclus::Blob>", 2, [], ["VL_MAP", "VL_STRING", "BLOB"], true]
  MAP_VL_STRING_UUID,  // ["std::map<std::string, boost::uuids::uuid>", 2, [], ["MAP", "VL_STRING", "UUID"], false]
  VL_MAP_VL_STRING_UUID,  // ["std::map<std::string, boost::uuids::uuid>", 2, [], ["VL_MAP", "VL_STRING", "UUID"], true]
  // maps with pair<int,  string> keys and double values
  MAP_PAIR_INT_STRING_DOUBLE,  // ["std::map<std::pair<int, std::string>, double>", 3, ["HDF5"], ["MAP", ["PAIR", "INT", "STRING"], "DOUBLE"], false]
  VL_MAP_PAIR_INT_STRING_DOUBLE,  // ["std::map<std::pair<int, std::string>, double>", 3, ["HDF5"], ["VL_MAP", ["PAIR", "INT", "STRING"], "DOUBLE"], true]
  MAP_PAIR_INT_VL_STRING_DOUBLE,  // ["std::map<std::pair<int, std::string>, double>", 3, ["HDF5"], ["MAP", ["PAIR", "INT", "VL_STRING"], "DOUBLE"], false]
  VL_MAP_PAIR_INT_VL_STRING_DOUBLE,  // ["std::map<std::pair<int, std::string>, double>", 3, ["HDF5"], ["VL_MAP", ["PAIR", "INT", "VL_STRING"], "DOUBLE"], true]

  // append new types only:

  // map<string,  vector<double> >
  MAP_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["MAP", "STRING", ["VECTOR", "DOUBLE"]], false]
  MAP_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", "DOUBLE"]], false]
  VL_MAP_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", "DOUBLE"]], true]
  MAP_VL_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", "DOUBLE"]], false]
  MAP_VL_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", "DOUBLE"]], false]
  VL_MAP_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", "DOUBLE"]], true]
  VL_MAP_VL_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", "DOUBLE"]], true]
  VL_MAP_VL_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::vector<double>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", "DOUBLE"]], true]

  // map<string,  map<int,  double> >
  MAP_STRING_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["MAP", "STRING", ["MAP", "INT", "DOUBLE"]], false]
  MAP_STRING_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["MAP", "STRING", ["VL_MAP", "INT", "DOUBLE"]], false]
  VL_MAP_STRING_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["MAP", "INT", "DOUBLE"]], true]
  MAP_VL_STRING_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["MAP", "INT", "DOUBLE"]], false]
  MAP_VL_STRING_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VL_MAP", "INT", "DOUBLE"]], false]
  VL_MAP_STRING_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VL_MAP", "INT", "DOUBLE"]], true]
  VL_MAP_VL_STRING_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["MAP", "INT", "DOUBLE"]], true]
  VL_MAP_VL_STRING_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::map<int, double>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_MAP", "INT", "DOUBLE"]], true]

  // map<string,  pair<double,  map<int,  double> > >
  MAP_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["MAP", "STRING", ["PAIR", "DOUBLE", ["MAP", "INT", "DOUBLE"]]], false]
  VL_MAP_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "DOUBLE", ["MAP", "INT", "DOUBLE"]]], true]
  MAP_VL_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "DOUBLE", ["MAP", "INT", "DOUBLE"]]], false]
  MAP_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["MAP", "STRING", ["PAIR", "DOUBLE", ["VL_MAP", "INT", "DOUBLE"]]], false]
  VL_MAP_VL_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "DOUBLE", ["MAP", "INT", "DOUBLE"]]], true]
  VL_MAP_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "DOUBLE", ["VL_MAP", "INT", "DOUBLE"]]], true]
  MAP_VL_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "DOUBLE", ["VL_MAP", "INT", "DOUBLE"]]], false]
  VL_MAP_VL_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE,  // ["std::map<std::string, std::pair<double, std::map<int, double>>>", 4, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "DOUBLE", ["VL_MAP", "INT", "DOUBLE"]]], true]

  // map<map< string,  double > >
  MAP_INT_MAP_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["MAP", "INT", ["MAP", "STRING", "DOUBLE"]], false] 
  MAP_INT_MAP_VL_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["MAP", "INT", ["MAP", "VL_STRING", "DOUBLE"]], false] 
  VL_MAP_INT_MAP_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["VL_MAP", "INT", ["MAP", "STRING", "DOUBLE"]], true]
  VL_MAP_INT_MAP_VL_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["VL_MAP", "INT", ["MAP", "VL_STRING", "DOUBLE"]], true] 
  MAP_INT_VL_MAP_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["MAP", "INT", ["VL_MAP", "STRING", "DOUBLE"]], false] 
  MAP_INT_VL_MAP_VL_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["MAP", "INT", ["VL_MAP", "VL_STRING", "DOUBLE"]], false] 
  VL_MAP_INT_VL_MAP_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["VL_MAP", "INT", ["VL_MAP", "STRING", "DOUBLE"]], true] 
  VL_MAP_INT_VL_MAP_VL_STRING_DOUBLE,  // ["std::map<int, std::map<std::string, double>>", 3, ["SQLite"], ["VL_MAP", "INT", ["VL_MAP", "VL_STRING", "DOUBLE"]], true] 

  // map< string,  vector< pair<int,  pair<string string> > > >
  MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], false]
  MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], false]
  MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], false]
  MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], false]
  MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], false]
  MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], false]
  MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], false]
  MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], false]
  MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], false]
  MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], false]
  MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], false]
  MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], false]
  MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], false]
  MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], false]
  MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], false]
  MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], false]
  VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], true]
  VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], true]
  VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], true]
  VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], true]
  VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], true]
  VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], true]
  VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], true]
  VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], true]
  VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], true]
  VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], true]
  VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], true]
  VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], true]
  VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "STRING"]]]], true]
  VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "STRING", "VL_STRING"]]]], true]
  VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "STRING"]]]], true]
  VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING,  // ["std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>", 7, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_VECTOR", ["PAIR", "INT", ["PAIR", "VL_STRING", "VL_STRING"]]]], true]

  // list< pair<int,  int>
  LIST_PAIR_INT_INT,  // ["std::list<std::pair<int, int>>", 2, ["SQLite"], ["LIST", ["PAIR", "INT", "INT"]], false]
  VL_LIST_PAIR_INT_INT,  // ["std::list<std::pair<int, int>>", 2, ["SQLite"], ["VL_LIST", ["PAIR", "INT", "INT"]], true]

  // map< string,  pair< string,  vector<double> > > > 
  MAP_STRING_PAIR_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "STRING", ["PAIR", "STRING", ["VECTOR", "DOUBLE"]]], false]
  MAP_STRING_PAIR_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "STRING", ["PAIR", "STRING", ["VL_VECTOR", "DOUBLE"]]], false]
  MAP_STRING_PAIR_VL_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "STRING", ["PAIR", "VL_STRING", ["VECTOR", "DOUBLE"]]], false]
  MAP_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "STRING", ["PAIR", "VL_STRING", ["VL_VECTOR", "DOUBLE"]]], false]
  MAP_VL_STRING_PAIR_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "STRING", ["VECTOR", "DOUBLE"]]], false]
  MAP_VL_STRING_PAIR_VL_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "VL_STRING", ["VECTOR", "DOUBLE"]]], false]
  MAP_VL_STRING_PAIR_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "STRING", ["VL_VECTOR", "DOUBLE"]]], false]
  MAP_VL_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["MAP", "VL_STRING", ["PAIR", "VL_STRING", ["VL_VECTOR", "DOUBLE"]]], false]
  VL_MAP_STRING_PAIR_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "STRING", ["VECTOR", "DOUBLE"]]], true]
  VL_MAP_VL_STRING_PAIR_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "STRING", ["VECTOR", "DOUBLE"]]], true]
  VL_MAP_STRING_PAIR_VL_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "VL_STRING", ["VECTOR", "DOUBLE"]]], true]
  VL_MAP_STRING_PAIR_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "STRING", ["VL_VECTOR", "DOUBLE"]]], true]
  VL_MAP_VL_STRING_PAIR_VL_STRING_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "VL_STRING", ["VECTOR", "DOUBLE"]]], true]
  VL_MAP_VL_STRING_PAIR_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "STRING", ["VL_VECTOR", "DOUBLE"]]], true]
  VL_MAP_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "STRING", ["PAIR", "VL_STRING", ["VL_VECTOR", "DOUBLE"]]], true]
  VL_MAP_VL_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE,  // ["std::map<std::string, std::pair<std::string, std::vector<double>>>", 5, ["SQLite"], ["VL_MAP", "VL_STRING", ["PAIR", "VL_STRING", ["VL_VECTOR", "DOUBLE"]]], true]

  // map<string,  map<string,  int> >
  MAP_STRING_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "STRING", ["MAP", "STRING", "INT"]], false]
  MAP_STRING_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "STRING", ["MAP", "VL_STRING", "INT"]], false]
  MAP_STRING_VL_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "STRING", ["VL_MAP", "STRING", "INT"]], false]
  MAP_STRING_VL_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "STRING", ["VL_MAP", "VL_STRING", "INT"]], false]
  MAP_VL_STRING_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["MAP", "STRING", "INT"]], false]
  MAP_VL_STRING_VL_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VL_MAP", "STRING", "INT"]], false]
  MAP_VL_STRING_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["MAP", "VL_STRING", "INT"]], false]
  MAP_VL_STRING_VL_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["MAP", "VL_STRING", ["VL_MAP", "VL_STRING", "INT"]], false]
  VL_MAP_STRING_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["MAP", "STRING", "INT"]], false]
  VL_MAP_VL_STRING_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["MAP", "STRING", "INT"]], false]
  VL_MAP_STRING_VL_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VL_MAP", "STRING", "INT"]], false]
  VL_MAP_STRING_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["MAP", "VL_STRING", "INT"]], false]
  VL_MAP_STRING_VL_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "STRING", ["VL_MAP", "VL_STRING", "INT"]], false]
  VL_MAP_VL_STRING_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["MAP", "VL_STRING", "INT"]], false]
  VL_MAP_VL_STRING_VL_MAP_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_MAP", "STRING", "INT"]], false]
  VL_MAP_VL_STRING_VL_MAP_VL_STRING_INT,  // ["std::map<std::string, std::map<std::string, int>>", 3, ["SQLite"], ["VL_MAP", "VL_STRING", ["VL_MAP", "VL_STRING", "INT"]], false]

  // vector<pair<pair<double, double>, map<string, double > > > >
  VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_MAP_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > > ", 5, ["SQLite"], ["VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["MAP", "STRING", "DOUBLE"]]], false]
  VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_MAP_VL_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > > ", 5, ["SQLite"], ["VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["MAP", "VL_STRING", "DOUBLE"]]], false]
  VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > > ", 5, ["SQLite"], ["VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_MAP", "STRING", "DOUBLE"]]], false]
  VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_VL_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > > ", 5, ["SQLite"], ["VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_MAP", "VL_STRING", "DOUBLE"]]], false]
  VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_MAP_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > > ", 5, ["SQLite"], ["VL_VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["MAP", "STRING", "DOUBLE"]]], false]
  VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_MAP_VL_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > > ", 5, ["SQLite"], ["VL_VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["MAP", "VL_STRING", "DOUBLE"]]], false]
  VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > > ", 5, ["SQLite"], ["VL_VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_MAP", "STRING", "DOUBLE"]]], false]
  VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_VL_STRING_DOUBLE, // ["std::vector<std::pair<std::pair<double, double>, std::map<std::string, double> > > > ", 5, ["SQLite"], ["VL_VECTOR", ["PAIR", ["PAIR", "DOUBLE", "DOUBLE"], ["VL_MAP", "VL_STRING", "DOUBLE"]]], false]

};

/// Represents operation codes for condition checking.
enum CmpOpCode {
{'fraction_non_alphanumeric': 0.2788375315888155, 'fraction_numerical': 0.008423684139017961, 'mean_word_length': 7.328015388096855, 'pattern_counts': {'":': 0, '<': 963, '<?xml version=': 0, '>': 972, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2315506', 'n_tokens_mistral': 29591, 'n_tokens_neox': 29420, 'n_words': 5379}