コード例 #1
0
ファイル: main.cpp プロジェクト: mustakcsecuet/blacc
/* TokenizeAll() - Get to the point we have a set of input tokens ready to parse.
 *
 * This function will, if it encounters no errors, completely tokenize all of the
 * input of the designated input file, as well as all files it %include's.
 * It will throw an exception on the first bad token (if any), but only after having
 * tokenized all of the input, %include files as well.
 ****************************************************************************************/
static void TokenizeAll(unique_ref<TTokens> Tokens, string GrammarFilename,
    int IncludeToken)
    {
    TFileTokens FileTokens;
    TToken      Token;

    Tokens->Tokenize(GrammarFilename, IncludeToken);

    FileTokens  = Tokens->GetFile(GrammarFilename);
    assert(FileTokens.Begin >= 0);
    for(auto iToken=FileTokens.Begin; ; ++iToken)
        {
        Token   = Tokens->Get(iToken);
        if(Token.Type == TToken::TKEOF)
            break;
        if(Token.Type == TToken::INCLUDE)
            {
            Token   = Tokens->Get(++iToken);
            if(Token.Type != TToken::WHITESPACE)
                Error("EXPECTING_WHITESPACE_AFTER_INCLUDE",
                    "Token", iToken);
            Token   = Tokens->Get(++iToken);
            if(Token.Type != TToken::QUOTED)
                Error("EXPECTING_QUOTED_STRING_AFTER_INCLUDE",
                    "Token", iToken);
            auto Filename = Token.Unquote();
            TokenizeAll(Tokens, Filename.get(), iToken);
            }
        }
    }
コード例 #2
0
ファイル: parse.cpp プロジェクト: mustakcsecuet/blacc
/* ??? modify to handle includes */
TParseToken  TParser::GetNextToken()
    {
    CurrentToken    = Tokens->Get(TokenCursor++);
    while( CurrentToken.Type == TToken::WHITESPACE
        || CurrentToken.Type == TToken::COMMENT
        || CurrentToken.Type == TToken::MCOMMENT
        || (IgnoreNewlines && CurrentToken.Type == TToken::NEWLINE))
        CurrentToken = Tokens->Get(TokenCursor++);

    CurrentToken.Index  = TokenCursor-1;
    if(CurrentToken.Type == TToken::TKEOF)
        --TokenCursor;

    return CurrentToken;
    }
コード例 #3
0
ファイル: FakeBlockStore.cpp プロジェクト: cryfs/cryfs
void FakeBlockStore::remove(unique_ref<Block> block) {
  Key key = block->key();
  cpputils::destruct(std::move(block));
  std::unique_lock<std::mutex> lock(_mutex);
  int numRemoved = _blocks.erase(key);
  ASSERT(numRemoved == 1, "Block not found");
}
コード例 #4
0
ファイル: OnDiskBlockStore.cpp プロジェクト: cryfs/cryfs
void OnDiskBlockStore::remove(unique_ref<Block> block) {
  Key key = block->key();
  cpputils::destruct(std::move(block));
  OnDiskBlock::RemoveFromDisk(_rootdir, key);
}
コード例 #5
0
void InMemoryBlockStore::remove(unique_ref<Block> block) {
  Key key = block->key();
  cpputils::destruct(std::move(block));
  int numRemoved = _blocks.erase(key.ToString());
  ASSERT(1==numRemoved, "Didn't find block to remove");
}
コード例 #6
0
void CachingBlockStore::release(unique_ref<Block> block) {
  Key key = block->key();
  _cache.push(key, std::move(block));
}
コード例 #7
0
 blockstore::Key CreateBlockWriteFixtureToItAndReturnKey() {
   auto block = blockStore->create(Data(data.size()));
   block->write(data.data(), 0, data.size());
   return block->key();
 }
コード例 #8
0
 blockstore::Key CreateBlockReturnKey(const Data &initData) {
   return blockStore->create(initData)->key();
 }
コード例 #9
0
 OnDiskBlockCreateSizeTest():
   block(OnDiskBlock::CreateOnDisk(dir.path(), key, std::move(Data(GetParam()).FillWithZeroes())).value()),
   ZEROES(block->size())
 {
   ZEROES.FillWithZeroes();
 }
コード例 #10
0
void ParallelAccessDataTreeStore::remove(unique_ref<DataTreeRef> tree) {
  Key key = tree->key();
  return _parallelAccessStore.remove(key, std::move(tree));
}
コード例 #11
0
ファイル: DirBlob.cpp プロジェクト: cryfs/cryfs
unique_ref<DirBlob> DirBlob::InitializeEmptyDir(FsBlobStore *fsBlobStore, unique_ref<Blob> blob, std::function<off_t(const blockstore::Key&)> getLstatSize) {
  InitializeBlob(blob.get(), FsBlobView::BlobType::DIR);
  return make_unique_ref<DirBlob>(fsBlobStore, std::move(blob), getLstatSize);
}
コード例 #12
0
void ParallelAccessFsBlobStore::remove(unique_ref<FsBlobRef> blob) {
    Key key = blob->key();
    return _parallelAccessStore.remove(key, std::move(blob));
}
コード例 #13
0
ファイル: CachingFsBlobStore.cpp プロジェクト: kjdyck/cryfs
 void CachingFsBlobStore::remove(unique_ref<FsBlobRef> blob) {
     auto baseBlob = blob->releaseBaseBlob();
     return _baseBlobStore->remove(std::move(baseBlob));
 }